2021-11-24
什么是CSRF
跨站点请求伪造(Cross—Site Request Forgery),伪装来自受信任用户的请求来利用受信任的网站。简单来说CSRF就是获取凭证伪造身份去做事。
详细点说:假如A网站中存在CSRF漏洞,攻击者构造一个利用的POC,发送给受害者(在浏览器中处于登陆状态),让受害者点击POC,导致受害者在A网站上的的资料被修改或者钱财被转移。
可能存在csrf的位置
所有用户进行操作的位置都可能存在CSRF,修改信息、密码、头像。
利用条件
1.利用浏览器中缓存的cookie
2.没有一次型的token验证
危害
1.修改受害者的一些资料、转账或者改密码
2.如果获取到应用程序中的管理员cookie,攻击者完全可以控制应用的所有数据和功能
分类
1.资源包含
资源包含是在大多数介绍CSRF概念的演示或基础课程中可能看到的类型。这种类型归结为控制HTML标签(例如<image>、<audio>、<video>、<object>、<script>等)所包含的资源的攻击者。如果攻击者能够影响URL被加载的话,包含远程资源的任何标签都可以完成攻击。
2.基于表单
通常在正确使用安全的请求方式时看到。攻击者创建一个想要受害者提交的表单; 其包含一个JavaScript片段,强制受害者的浏览器提交。
3.XMLHttpRequest
基于XHR的CSRF通常由于SOP而以XSS有效载荷的形式出现。没有跨域资源共享策略 (Cross-Origin Resource Sharing, CORS),XHR仅限于攻击者托管自己的有效载荷的原始请求。
防御
通过CSRF-token或者验证码来检测用户提交
验证 Referer/Content-Type
对于用户修改删除等操作最好都使用POST操作
避免全站通用的Cookie,严格设置Cookie的域
bypass
https://shahmeeramir.com/methods-to-bypass-csrf-protection-on-a-web-application-3198093f6599
1.跨账户使用令牌
2.替换相同的长度
3.从请求中删除csrf token
4.解码CSRF token
5.通过HTML提取CSRF token
6.只使用token的静态部分