玩转CSRF之挖洞实例分享

本文首发i春秋论坛,原创作者:0h1in9e . 未经许可,禁止转载

0x01 前言

最近在挖SRC的时候经常遇到一些CSRF漏洞,发现其实掌握原理之后很容易挖到关于CSRF的漏洞。在平时的漏洞挖掘中,CSRF也没有太高的门槛,对于技术的要求也没那么高;另外,现在互联网上的CSRF漏洞还是相对较多的,就连一些大厂商SRC去挖的时候也能遇到一些CSRF漏洞,挖掘起来技术难度不高。另外,此篇难度不高,大牛请绕道。

0x02 CSRF简介

CSRF(Cross-site request forgery),跨站请求伪造。和XSS比较相似,但又不尽相同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。说白了,就是攻击者恶意构造了网站的某些操作,引诱用户去点击,从而在用户不知情的情况下做一些操作(攻击者盗用了你的身份,以你的名义发送恶意请求)。比如严重的有修改用户密码,管理员密码、添加管理员,甚至是转账等重要操作,一般的就很多了,比如修改用户信息、更改购物车、不知不觉改了你的收获地址……

下面以一张图来分析下具体的攻击过程(图片来自互联网):
81a4b79a2a0118ea2324621199cffefd.jpg
通过这张图,我们能大概了解CSRF的攻击过程如下:

  1. 用户C访问了Web A之后在本地储存了Cookie认证信息;
  2. 用户C被攻击者诱导访问了Web B上的恶意链接,这个恶意链接在Web A 上执行了恶意代码。

也就是说要完成CSRF的攻击,有两个条件:

  1. 用户本地含有正常网站的认证信息;
  2. 用户访问了恶意链接。

这里大概讲了一下CSRF的攻击原理,那么在具体的漏洞挖掘中,应该怎样去挖掘CSRF漏洞呢?

0x03 CSRF漏洞挖掘实例

一般来说,挖掘CSRF,只需要找到漏洞存在就可以了,不需要用构造的Payload去攻击用户。所以,挖洞就放在了如何找漏洞上边。那么下面我就分享下我在实战挖掘过程中总结的经验吧(不是很全,有没提到的大牛们可以补充在评论里哈)

**实例一 看我如何巧妙改掉你不顺眼的昵称 ** 在用户个人信息修改的地方,很容易出CSRF漏洞,如下如:
QQ截图20161201232613.png

首先没有CSRF Token,其次HTTP头里边referer经验证没有也可以(服务器端并未验证referer),接下来需要做的就是Burpsuit里边右键->Engagement Tools->Generate CSRF POC就可用POC去测试了。

**实例二 看我如何把商品加到你的购物车 ** 在商品添加购物车时并未做验证,可以利用漏洞让用户购物车加入任意商品。
QQ截图20161201233627.png
同样的套路,这里就不再赘余了。

实例三 看我如何改掉你的简历信息
某大公司有个招聘网站,用户需要填写简历然后投到相应的岗位。在没有做CSRF相关防护的情况下可以修改任意用户简历。
QQ截图20161201234342.png
同样的检测套路,这里用户简历相关信息全在POST里边了。只需要生成CSRF POC就可以验证这里的漏洞了。看到我里边很多信息写的是“CSRF Test”。

实例四 看我帮你留个言
QQ截图20161201235044.png

实例五 看我如何让你买的东西寄到我家
当然题目有点夸大,其实就是一个购物网站修改收货地址的CSRF漏洞
QQ截图20161201235346.png

……

还有很多我没概括到的,在测试的时候只需要测试敏感操作是否有CSRF验证即可:)

0x04 CSRF挖洞流程

  1. 首先就是对目标敏感部位进行抓包分析,比如修改信息、转账、添加信息等等。通常一个数据包HTTP请求头里边都会有一个Referer,这个需要特别去验证。比如放到Burpsuit Repeater里边去测试:去掉referer,看结果是否有变化。如果没有变化意味着这里的Referer服务器端并未验证,那就继续看下一步。
    QQ截图20161202000157.png
    QQ截图20161202000231.png

  2. 紧接着就是查看数据包是否存在类似CSRF token的字段、常见的有参数有csrf、token、sid……(一般这些字段的值都是随机字符串),如果没有的话就排除CSRF Token的验证了。转到下一步。

  3. 很多时候走完了上边两个流程其实就已经可以断定这里是存在CSRF的,不过还有一个隐蔽的地方。在某些操作对数据包的提交采用Ajax的情况,存在一种情况,就是数据包HTTP请求头会自定义一个字段,这个时候就像存在referer的情况一样,没办法csrf了。

针对这种情况我举个我遇到的例子吧:

在通过XSS盲打进入一个系统后台之后,对后台进行了简单的测试。其中对管理员添加的地方抓个包看看:
QQ截图20161202001500.png
经历了步骤一二之后,发现了隐藏在HTTP头里边的method:Save,意味着这里CSRF是不存在了。

经历了以上三步之后,基本你的CSRF漏洞就到手了:)

0x05 总结

漏洞挖掘还是比较注重实战经验,我挖洞周期也不长,经验有限。对于CSRF漏洞最近挖的比较多,这里就总结了一下经验。其实CSRF是最不需要你用各种工具的一个漏洞了,只需要一个Burpsuit,就可以开始了。一般来说,都是需要手工测试的。当然,CSRF还有些好用的半自动话工具,比如OWASP CSRFTester。也别觉得需要手工挖掘就很难。换个角度想,正因为需要手工,那些自动化程序才不容易检测到,这样挖洞重复率不就大大降低了么。