06.12 CSRF漏洞详解,一文看懂CSRF

0x00:CSRF 简述

CSRF(Cross Site Request Forgery,跨站请求伪造),字面理解意思就是在别的站点伪造了一个请求。专业术语来说就是在受害者访问一个网站时,其 Cookie 还没有过期的情况下,攻击者伪造一个链接地址发送受害者并欺骗让其点击,从而形成 CSRF 攻击。

0x01:CSRF 案例

受害者 (A) 登录了某个银行给朋友 (B) 转账,其转账操作发送的请求 URL 如下:

https://www.xxxx.com?account=A&money=10000&touser=B

account 代表受害者,money 是要转账的金额,touser 是被转入的账户。发送这个链接请求后,A 给 B 转账的操作完成。这时攻击者(C)伪造了一个链接,如下:

https://www.xxxx.com?account=A&money=10000&touser=C

这个链接的请求是 A 用户给 C 用户转账一万元。当 A 没有登录不存在 Cookie 信息时,此链接是无法执行的。这时攻击者通过一系列手段让 A 执行此链接,当 A 登录银行没有退出的时候,点击此链接便会执行成功。

0x02:代码示例

当程序对于类似此敏感信息操作提交时,没有进行相应的防护,便会产生 CSRF 攻击,例如一下代码:


0x03:如何测试

在渗透测试中,可以先看下网页源代码对于敏感信息提交有无防护措施,初步判断是否存在 CSRF,随后通过抓包确定提交的完整 URL 链接,并伪造另一个链接进行测试。

在代码审计中,可以先查看网页源代码,是否有防护措施。随后可查看 WEB 应用程序的配置文件中是否有相应的验证措施,最后查看后台的处理逻辑,对于发送过来的请求是否有过滤等措施。

0x04:防护方法

1,二次验证,进行重要敏感操作时,要求用户进行二次验证。

2,验证码,进行重要敏感操作时,加入验证码。

3,验证 HTTP 的 Referer 字段。

4,请求地址中添加 Token 并验证。

5,HTTP 头中自定义属性并验证。

0x05:防护代码

1,对于二次验证,可添加 JS,提交请求后询问客户是否提交,而不是直接发送请求给后台。



2,对于验证码,进行转账时,可输入图形验证码,也可以添加手机接收验证码等功能。


分享到:


相關文章: