目录
-
掌握CSRF 漏洞原理
-
掌握CSRF 漏洞场景
-
掌握CSRF 漏洞验证
1.CSRF 原理
1.基本概念
跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应。
借助于社工的一些帮助,例如,通过电子邮件或聊天发送链接,攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF 攻击可以强制用户执行更改状态的请求,例如转移资金、修改密码等操作。如果受害者是管理账户,CSRF 攻击会危及整个Web 应用程序。
2.关键点
受害者没有退出登录,受害者保持身份认证。 CSRF 继承了受害者的身份和特权,代表受害者执行非本意的、恶意的操作。 CSRF 会借用浏览器中与站点关联的所有身份凭据,例如用户的会话Cookie,IP 地址,Windows 域凭据等。
3.目标
CSRF 的目标是更改用户账户的状态,攻击者利用CSRF 发送的请求都是更改状态的请求,比如,转账、更改密码,购买商品等等。 CSRF 的场景中,攻击者是没有办法获得服务器的响应。
2.CSRF场景
-
银行账户转账 搭建模拟银行网站 http://10.4.7.130/bank/ 。
-
构造虚假网站 构造CSRF 攻击连接。
<meta charset='utf-8'> <img src='./1.jpg'><br /> <img src='http://10.4.7.130/bank/action.php? username=hacker&money=100&submit=%E4%BA%A4%E6%98%93' alt='宝刀在手,谁与争锋'>
攻击者通过 <img> 标签构造GET 请求。
浏览器根据 <img> 标签中的 SRC 属性,请求服务器资源,会自动带上身份认证信息。
-
场景建模
3.CSRF 防御
1.无效防御 使用秘密的Cookie。 仅接收POST 请求。 多步交易:多步交易,有可能会被恶意攻击者预测。 URL 重写:用户的身份信息会暴露在URL 中,不建议通过引入另外一个漏洞来解决当前漏洞。 HTTPS:所有安全机制的前提。
2.有效防御
验证Referer 字段:
-
前URL 的上一个URL;
-
转账页面到转账操作; 伪造? 添加Token 验证:
二次验证:在关键操作之前,再输入密码或者验证码。
-
HttpOnly:某些情况下禁止JS 脚本访问Cookie 信息。
-
SameSite:Cookie 属性,浏览器自带安全机制。