网站是如何被“包含隐藏在其中的PHP脚本的恶意编码图像”攻击的?

时间:2010-08-29 23:57:35

标签: php image openx

我的广告服务器周末被黑了。

根据this article,这似乎是一个普遍存在的问题。

有些东西让我思考......

  

攻击者使用一次攻击来登录   他的服务器的权利,然后   上传了恶意编码的图片   包含隐藏的PHP脚本   在里面,他说。通过查看   图片,攻击者强迫脚本   在服务器上执行

这怎么可能?它是否依赖于用GD或类似方式打开的图像?他们是否上传了一个冒充图像的脚本,并以某种方式包含它?

3 个答案:

答案 0 :(得分:34)

可以像上传

这样的文件一样简单
GIF89a<?php
echo 'hi';

如果您的上传脚本通过fileinfomime_content_type()测试内容类型,则会将其识别为“GIF图像数据,版本89a”,因为GIF89a是唯一的模式/幻数需要将文件标识为gif。
并且OpenX上传脚本显然保留了建议的文件名,即可以在服务器上将此“图像”保存为foo.php。现在,如果您通过http://hostname/uploaddir/foo.php请求该文件,则该脚本作为php脚本执行,因为Web服务器通常/通常仅通过文件扩展名确定内容类型,例如通过

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

php然后回显前导GIF89a并执行<?php ...code...块 将&lt;?php块放入gif注释中稍微复杂一些,但基本相同。

答案 1 :(得分:5)

您的服务器正在解析该文件的原因。攻击者正在将PHP放入图像评论中。

您如何验证文件是图像?如果你只是在mime类型上做,那么我相信他们可以伪造图像标题并包含他们想要的任何内容。 VolkerK has a practical example

在完美的世界中,我不会因为害怕这样的问题而通过PHP提供任何面向公众的图像。

使用服务器直接提供图像;一个很好的建议是将这些图像保存到一个目录,在那里可以提供而不用 PHP。

我认为这是它的要点,如果我错了,有人会纠正我。

答案 2 :(得分:2)

我看到服务器泄露的唯一可能性是图片为include d而不是通过例如readfile和其他流功能。