一个网站如何被“包含隐藏在其中的 PHP 脚本的恶意编码图像”入侵?

Posted

技术标签:

【中文标题】一个网站如何被“包含隐藏在其中的 PHP 脚本的恶意编码图像”入侵?【英文标题】:How is a website hacked by a "maliciously encoded image that contained a PHP script hidden inside it"? 【发布时间】:2011-04-05 13:18:46 【问题描述】:

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

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

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

攻击者使用一次攻击来获取登录信息 对他的服务器的权限,然后 上传了恶意编码的图像 包含隐藏的 php 脚本 在里面,他说。通过查看 图像,攻击者强制脚本 在服务器上执行

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

【问题讨论】:

【参考方案1】:

我看到的服务器妥协的唯一可能性是图像是included,而不是通过例如读取。 readfile 和其他流函数。

【讨论】:

你是对的,但也许我遗漏了一些东西,为什么有人include 图像?也许是一些糟糕的基于 PHP 的缓存控制,而不是 echo readfile($file) 在自定义标头之后它只是 includes。 @alex 我不知道为什么有人会这样做,但我在 SO 上看到过。 是的,我在生产代码中也看到过这种错误。这已经很糟糕了。【参考方案2】:

您的服务器出于 w/e 原因解析该文件。攻击者将 PHP 放入图片评论中。

您如何验证文件是图像?如果您仅对 mime 类型进行操作,那么我相信他们可以伪造图像标题并在此之后包含他们想要的任何内容。 VolkerK has a practical example

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

直接使用服务器提供图像;一个好的建议是将这些图像保存到一个目录,在该目录中无需 PHP。

我认为这就是它的要点,如果我错了,请纠正我。

【讨论】:

如何通过 cmets 向图像添加代码?我有兴趣制作一张图片来测试我的其他一些网站。 所以基本上,你说的和我一样,对吧?图像被包括在内。服务器将如何执行它? 任何标准的图像编辑器都可以做到。在 GIMP 中添加评论的方法如下:img192.imageshack.us/img192/4104/createanewimage001.png @The 重点不在于您如何能够嵌入 PHP 代码。这就是服务器执行它的原因。 见secunia.com/advisories/37475:“该漏洞是由于banner-edit.php脚本允许将具有任意扩展名的文件上传到webroot内的文件夹。”【参考方案3】:

可以像上传文件一样简单

GIF89a<?php
echo 'hi';

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

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

php 然后回显前面的GIF89a 并执行&lt;?php ...code... 块。 将

【讨论】:

参见secunia.com/advisories/37475:“该漏洞是由于banner-edit.php脚本允许将具有任意扩展名的文件上传到webroot内的文件夹而引起的。” 哇,即使是 Linux 中的 file 实用程序也被这个愚弄了!

以上是关于一个网站如何被“包含隐藏在其中的 PHP 脚本的恶意编码图像”入侵?的主要内容,如果未能解决你的问题,请参考以下文章

什么是CC攻击,如何防止网站被CC攻击?

如何防止网站被*** 防止网站数据被***篡改

Django开发的网站如何被百度更好收录

如何防止网站被SQL注入攻击?

网站被黑了被挂马篡改后我是如何解决网站被挂马!

如何做好网站安全防护 防止网站被黑?