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

ale*_*lex 16 php image openx

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

根据这篇文章,这似乎是一个普遍存在的问题.

那里有一些东西让我思考......

他说,攻击者利用一次攻击获取其服务器的登录权限,然后上传了一个包含隐藏在其中的PHP脚本的恶意编码图像.通过查看映像,攻击者强制脚本在服务器上执行

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

Vol*_*erK 35

它可以像上传文件一样简单

GIF89a<?php
echo 'hi';
Run Code Online (Sandbox Code Playgroud)

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

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

php然后回显领先GIF89a并执行<?php ...code...块.
将<?php块放入gif注释中稍微复杂一些,但基本上是相同的.

  • 请参阅http://secunia.com/advisories/37475/:"该漏洞是由于banner-edit.php脚本允许上传具有webroot内文件夹的任意扩展名的文件引起的." (2认同)

The*_*per 5

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

你如何验证文件是图像?如果你只是在mime类型上做,那么我相信他们可以伪造图像标题并包含他们想要的任何内容.VolkerK有一个实际的例子

在完美的世界中,我不会因为担心这样的问题而通过PHP为任何面向公众的图像服务.

使用服务器直接提供图像; 一个很好的建议是将这些图像保存到一个可以在没有 PHP的情况下提供服务的目录中.

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