我一直都认为与人分享是一种很好的特质,而且我也从漏洞奖励领域中的多位安全研究专家身上学到了很多能够让我终身受用的东西,所以我决定在这篇文章中跟大家分享一些我近期的小发现,希望这些东西能够帮助各位Freebuf的小伙伴早日开启自己的漏洞奖励之旅。

11.png

就在几个月前,安全研究专家在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刀漏洞奖金。

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

* 参考来源:medium, FB小编Alpha_h4ck编译