








相信很多安全从业者入门时都跟我一样。我们接触了同一个CSRF的DEMO,同样也是维基百科中提到的。即为:
假如一家银行用以执行转账操作的URL地址如下:
https://bank.example.com/withdraw?account=AccoutName&amount=1000&for=PayeeName那么,一个恶意攻击者可以在另一个网站上放置如下代码:
<img src="https://bank.example.com/withdraw?account=Alice&amount=1000&for=Badman" />如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。
这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。
透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户的浏览器,让其以用户的名义执行操作。
我们像demo中那样,还原出两个网站来。
另一个网站
http://hackindex.com/index.html
<html>
<img src="http://test.bank.net/cookie.php">
</html>
受攻击的网站
http://test.bank.net/cookie.php
<?php
setcookie("user", "admin");
var_dump($_COOKIE);
?>
访问两次我们的受攻击网站,以确保请求时携带Cookie
接下来访问 另一个网站
发现在此页面请求去请求 http://test.bank.net/cookie.php 是没有携带Cookie的。并且设置Cookie标头后面也有一个叹号。
可以很轻易的看出CSRF攻击被限制了。此处测试浏览器为 Chrome/94.0.4606.61。
正当我要得出结论:“这种基础的CSRF已经被现代浏览器给屏蔽了”之前,又使用Firefox/93.0进行了测试,却发现可以正常使用原页面内下发的Cookie ,从而完成CSRF攻击。所以出现这种情况的原因是这两种浏览器对待第三方Cookie的策略不同。
SameSite=None;Secure,才可使攻击有效。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。