挖洞经验 | 看我如何找到雅虎的远程代码执行漏洞并获得5500刀奖金

挖洞经验 | 看我如何找到雅虎的远程代码执行漏洞并获得5500刀奖金

就在几个月前,安全研究专家在Apache Struts2中发现了一个严重的安全漏洞CVE-2017-5638,可能有些同学已经听说过这件事情。这是一个远程代码执行漏洞,当时互联网中的大量Web应用都受到了这个漏洞的影响。大约三个星期之后,就有研究人员发布了Struts2的漏洞利用代码。

在一次挖洞前的侦查过程中,我遇到了下面这条链接:

https://svdevems01.direct.gq1.yahoo.com/sm/login.jsp

这是雅虎所使用的一个登录页面。

12.png

我曾尝试在这个页面中寻找漏洞,但不幸的是我啥也没找到,直到我发现了下面这个节点:

https://svdevems01.direct.gq1.yahoo.com/sm/login/loginpagecontentgrabber.do

注:如果你发现了某个节点地址中包含有.action、.do或.go的话,这就说明这个Web应用运行了Struts2。

正如我之前所说的,针对Struts2漏洞的漏洞利用代码已经发布出来了,而且这个漏洞的利用过程也非常简单。虽然我知道这里存在漏洞,但现成的漏洞利用代码在这里并不能起作用,所以我感觉可能是Web应用防火墙在作怪,或者说某些东西屏蔽了我的攻击。

由于我能够确定这里的确存在漏洞,所以我不可能停下来。但如果要提交一个有效漏洞的话,我必须要提供一个可行的PoC来证明这个漏洞是否有价值。在经过了一段时间的研究之后,我发现了一篇推文,这篇推文介绍了如何通过一个Payload绕过WAF并成功利用这个漏洞。

我所使用的检测方法需要利用Content-Type HTTP header来发送一个经过特殊制作的数据包,header数据如下所示:

Content-Type:%{#context[‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’].addHeader(‘X-Ack-Th3g3nt3lman-POC’,4*4)}.multipart/form-data

这个经过特殊构造的请求不仅可以让Web服务器计算两个数相乘,而且还可以请求Web服务器进行任何其他形式的运算。在上面这个例子中,请求计算的数值为4 * 4,服务器端返回的结果为16,这也就意味着这台服务器是存在安全漏洞的。

正如下图所示,响应数据中将包含新的header,即X-Ack-Th3g3nt3lman-POC: 16

13.png

这些已经足够我通过HackerOne向雅虎提交漏洞报告了,雅虎的技术人员在收到报告后的30分钟内对漏洞进行了分级,然后及时将存在漏洞的应用下线以修复这个问题,几天之后我便收到了雅虎给我提供的5500刀漏洞奖金。

其实挖洞并不难,只要你愿意花时间,愿意动脑思考,我相信几千美刀的漏洞奖金大家还是可以轻松收入囊中的。最后,希望我的这些小发现可以给大家在挖洞的过程中带来一些灵感。