网站如何被“包含隐藏在其中的PHP脚本的恶意编码图像”入侵?
我的广告服务器在周末被黑客入侵。
根据这篇文章,这似乎是一个普遍存在的问题。
里面有一些东西让我思考...
他说,攻击者使用一次攻击来获取其服务器的登录权限,然后上传了一个恶意编码的图像,其中包含隐藏在其中的PHP脚本。通过查看图像,攻击者强制在服务器上执行脚本
这怎么可能?它是否依赖于使用GD或类似设备打开的图像?他们是否上传了冒充图像的脚本,并以某种方式包含它?
我的广告服务器在周末被黑客入侵。
根据这篇文章,这似乎是一个普遍存在的问题。
里面有一些东西让我思考...
他说,攻击者使用一次攻击来获取其服务器的登录权限,然后上传了一个恶意编码的图像,其中包含隐藏在其中的PHP脚本。通过查看图像,攻击者强制在服务器上执行脚本
这怎么可能?它是否依赖于使用GD或类似设备打开的图像?他们是否上传了冒充图像的脚本,并以某种方式包含它?
它可以像上传文件一样简单,例如
GIF89a<?php
echo 'hi';
如果您的上传脚本通过 fileinfo 测试内容类型,或者它被识别为“GIF 图像数据,版本 89a”,因为这是将文件标识为 gif 所需的唯一模式/幻数。
OpenX上传脚本显然保留了建议的文件名,即可以将此“图像”另存为服务器上的foo.php。现在,如果您通过脚本请求该文件,则该脚本将作为php脚本执行,因为Web服务器通常/经常仅通过文件扩展名确定内容类型,例如通过mime_content_type()
GIF89a
http://hostname/uploaddir/foo.php
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
然后,php 回显前导并执行块。
将<?php块放入gif注释中稍微复杂一些,但基本上是一回事。GIF89a
<?php ...code...
您的服务器出于 w/e 原因正在解析该文件。攻击者将PHP放入图像注释中。
您如何验证文件是否为图像?如果您仅在哑剧类型上执行此操作,那么我相信他们可以伪造图像标题并在之后包含他们想要的任何内容。VolkerK有一个实际的例子
在完美的世界里,我不会通过PHP提供任何面向公众的图像,因为害怕这样的问题。
直接使用服务器提供图像;一个好的建议是将这些图像保存到一个目录中,在那里它们可以在没有PHP的情况下提供。
我认为这就是它的要点,如果我错了,有人会纠正我。