我的广告服务器周末被黑了。
根据this article,这似乎是一个普遍存在的问题。
有些东西让我思考......
攻击者使用一次攻击来登录 他的服务器的权利,然后 上传了恶意编码的图片 包含隐藏的PHP脚本 在里面,他说。通过查看 图片,攻击者强迫脚本 在服务器上执行
这怎么可能?它是否依赖于用GD或类似方式打开的图像?他们是否上传了一个冒充图像的脚本,并以某种方式包含它?
答案 0 :(得分:34)
可以像上传
这样的文件一样简单GIF89a<?php
echo 'hi';
如果您的上传脚本通过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>
php然后回显前导GIF89a
并执行<?php ...code...
块
将&lt;?php块放入gif注释中稍微复杂一些,但基本相同。
答案 1 :(得分:5)
您的服务器正在解析该文件的原因。攻击者正在将PHP放入图像评论中。
您如何验证文件是图像?如果你只是在mime类型上做,那么我相信他们可以伪造图像标题并包含他们想要的任何内容。 VolkerK has a practical example
在完美的世界中,我不会因为害怕这样的问题而通过PHP提供任何面向公众的图像。
使用服务器直接提供图像;一个很好的建议是将这些图像保存到一个目录,在那里可以提供而不用 PHP。
我认为这是它的要点,如果我错了,有人会纠正我。
答案 2 :(得分:2)
我看到服务器泄露的唯一可能性是图片为include
d而不是通过例如readfile
和其他流功能。