CSRF安全测试流程

版权声明: https://blog.csdn.net/Breeze_CAT/article/details/84955701

CSRF安全测试流程

1. csrf本质

跨站请求伪造的本质是通过伪造关键操作的数据包内容,从而借助拥有执行身份的用户保存cookie的浏览器发送出去,达到让用户不知情的情况下,“神不知鬼不觉”的执行的目的。

2. 收集csrf有利用价值的点

csrf由于其利用的特殊性,并不需要将整个站点的所有数据包均测试一遍,只需测试有csrf价值的点即可。具体“有无价值”的判断规则需自己定义,但一般情况下,一些需要权限的即时性的操作往往需要检验是否存在csrf,如:

1. 转账,购买
2. 修改密码
3. 删除,发布内容
···

一般情况下,足够安全的转账,购买,修改密码功能通常是多步骤的,并且穿插多种验证,这种情况下无需进行csrf测试,但如果上述功能通过单词操作完成执行(我们也是不建议如此操作的),则需要测试csrf。

3. 手工测试

若本次操作中存在csrf token参数,或存在验证码等防御行为,则不存在csrf漏洞。若将数据包中的referer字段去掉,或仅仅删除referer字段的值,重新发送得到服务器的正确受理。那么可认为存在csrf漏洞,若是在对referer字段修改后服务器受理该请求报错,则可以认为服务器防御csrf漏洞的方法是检验referer字段,可利用下面方法绕过referer字段的检验:

  • 通过使用data协议,自写一个html页面:

    <html>
        <body>
           <iframe src="data:text/html;base64,PGZvcm0gbWV0aG9kPXBvc3QgYWN0aW9uPWh0dHA6Ly9hLmIuY29tL2Q+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdpZCcgdmFsdWU9JzEyMycvPjwvZm9ybT48c2NyaXB0PmRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOzwvc2NyaXB0Pg==">
        </body> 
    </html>
    

    其中base64编码部分是需要提交表单的代码,如例子中解码后:

    <form method=post action=http://a.b.com/d>
        <input type=text name='id' value='123'/>
    </form>
    <script>
        document.forms[0].submit();
    </script>
    
  • https协议转http协议时不携带referer字段,可在自己https的服务器上构建csrf页面测试。

  • 判断是否有域的检测,如目标站点xx.com 验证的referer是验证的*.xx.com,可在二级域名中寻找可以发表自定义内容的页面,之后加入图片标签<img “csrf地址”>后发表内容,换账号访问测试是否可以执行。

猜你喜欢

转载自blog.csdn.net/Breeze_CAT/article/details/84955701