我最近专注于雅虎的漏洞奖励计划,并花了不少时间剖解雅虎的聊天软件寻找安全漏洞,但结果并不怎么理想。在我头疼之余,读到一篇另一名参与雅虎漏洞奖励的安全人员Meals发的吐槽。Meals发现了一个可用于在一台雅虎服务器上获得远程代码执行权限的漏洞,并将其原理和利用方法汇报给了雅虎的漏洞奖励部门。但Meals说,雅虎非但没有支付他应得的金钱奖励,反而以他超出了规定的可测试范围为由禁止他继续从事雅虎的奖励计划,使他无法按他的准备继续测试。这激发了我的好奇心– 说不定Meals研究的网站上还存在更多高危漏洞。
在和我朋友Dawgyg商议后,我们决定亲自研究一下Meals在被封前研究的服务器。
Meals所入侵的服务器属于一个被雅虎所收购的子公司,Media Group One。雅虎所列出的Media Group One可测试的范围如下:
虽然这范围包含了不少域名,但Meals却主要只针对其中的SnackTV的内容管理系统进行了测试,其他的却并未碰触。所以,我和Dawgyg决定研究一下SnackTV的www子域。Dawgyg之前稍微看了一下这个子域的Web应用程序,并发现了几个XSS漏洞。这个Web应用与大多数雅虎的网站不同,一是因为运营它的是个德国公司,二是因为它面向的客户群是一些制片商的开发人员,而不是标准的雅虎用户。

SnackTV的搜索页面。很明显,这是个用于储存并播放视频的Web应用,但由于注册过程需要管理员人工批准,我们没能获得上传文件的权限。
在Dawgyg忙于调试工具以自动化我们项目的扫描部分时,我花了些时间学习怎么使用这个Web应用。了解如何正规使用一个程序通常是理解它不该被如何操作的先决条件;而漏洞往往藏匿于开发者没有考虑到的用户操作中。
我和Dawgyg在渗透一个新程序时都会在后台运行一些用于收集更多程序信息的工具。两个我常用的脚本是“subbrute”(a5cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6f1K9r3g2d9L8$3!0C8i4K6u0r3M7%4g2T1j5Y4u0#2N6r3f1`.)和“dirsearch”(969K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5i4g2J5L8%4y4G2M7X3W2S2i4K6u0r3k6r3W2J5M7$3g2S2M7X3y4Z5),它们可以自动识别安全漏洞和潜在的可被攻击的内容。学习掌握这些工具对于任何渗透测试工程师都是十分有帮助的。
我们起初的进展并不顺利;在运行了这些工具一段时间后我们获得多是一些无关紧要的输出。大多数内容都是些影响微乎其微并难以被利用的安全错误,比如访问“.htpasswd”文件时服务器返回标准的HTTP403错误而不是个统一的错误处理页(服务器设置泄露)、“/admin”页面指向管理员登陆页面(更易被发现,导致暴力破解)等。但最终dirsearch并没让我们失望:通过使用一个非常长的网站常见文件名字典为词库,dirsearch的暴力搜索找到了一个服务器上的有趣文件。
这个文件名为“getImg.php”,位于“imged”文件夹内(3bbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4F1j5h3y4C8N6s2k6Q4x3X3g2V1k6g2)9J5c8X3W2E0k6$3g2V1i4K6u0r3k6$3g2@1d9h3#2Y4i4K6u0W2M7r3S2H3i4K6t1&6。
它是个PHP文件,根据GET参数返回内容,不过我们不知道它接受什么参数名和参数值。举个例子,GET参数的运行原理如下:
我们要做的就是摸索出服务器接收的参数,但这说着比做着简单。继续使用暴力破解是一个办法,但消耗的时间成本太高,实属下策。幸运的是,在用谷歌搜索了一会儿后,我们发现了一些调用这个PHP文件的链接,链接里包含了参数 。通过研究这些链接,我们得知:
1. “getImg.php”文件用于修改指定的图片文件。它通过GET参数“imageurl”接收一个图片的链接,并根据其他参数会对其进行修改,最后返回修改好的图片。
2. 这些参数与我们见过的一个名为ImageMagick的图片处理程序接受的参数很相似,所以这个文件很可能在服务器后台调用ImageMagick来实现它的功能。
ImageMagick程序的某些版本存在一个严重的远程执行代码漏洞,被人们戏称为“ImageTragick”(程序原名是“图片魔法”,这里被人改了两个字母恶搞为“图片悲剧”;漏洞详细内容在38eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0N6X3g2Q4x3X3g2E0K9i4c8J5k6g2)9J5k6h3!0J5k6#2)9J5c8X3y4Y4K9g2)9J5k6r3u0A6L8W2)9J5c8X3y4$3k6h3&6S2L8h3g2Q4x3X3g2U0k6$3W2Q4x3@1k6F1j5h3#2W2i4K6y4p5b7#2k6q4i4K6u0V1x3U0l9I4y4W2)9J5k6o6x3%4x3e0b7`.记载)。我们决定先尝试几个利用这个漏洞的攻击载荷。
(译者注:这里作者说的可能不够详细。我大概看了一下这个漏洞,稍微解释一下原理。ImageMagick可以通过调用外部的库和程序来实现额外功能,比如通过调用system库从命令行运行wget程序来下载网络上的图片。在调用时,ImageMagick会把相关变量传递给调用的库和程序,但它并不会在传递前对变量进行编码或过滤。如果这个变量被用户控制,则可能在ImageMagick调用外部程序时注入恶意代码。
举个简易化的例子,比如ImageMagick通过system库运行wget下载用户指定的网络图片文件。用户输入11aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2P5r3q4E0M7r3I4W2i4K6u0W2j5$3!0E0i4K6u0r3x3g2)9J5k6h3A6H3k6H3`.`.,则ImageMagick调用的指令如下:
如果用户在提供的链接里注入代码,则可以控制服务器。用户输入e05K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2P5r3q4E0M7r3I4W2i4K6u0W2j5$3!0E0i4K6u0r3x3g2)9J5k6h3A6H3k6#2)9J5c8U0q4Q4x3X3g2B7M7r3N6Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4x3@1t1`. rm -rf /“,则ImageMagick调用的指令如下:
)
我和Dawgyg花了不少时间制作藏有攻击载荷的文件。由于ImageMagick不对接收的文件内容进行任何编码或过滤,所以我们只需在合适的位置注入代码并让服务器运行它就能夺取服务器的控制权了。我们一开始的思路是把含有攻击载荷的图片链接嵌入在一个XML页面上,这样ImageMagick通过调用其他程序访问这个链接时就会执行我们的恶意代码。这是漏洞发现者所公布的利用这个漏洞的手法,不过在SnackTV上并没有成功。后来事实证明这个方向是正确的,不过需要一些调整。我们太依赖于漏洞发现者使用的方法了,反而漏看了最简单的注入方法。
以下是我们一开始尝试的嵌有恶意代码的XML文件;我们把它存在了一个自己的网站上,并把URL作为imageurl参数的值提供给了getImg.php。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!