.htacess 和随机文件被黑客入侵

.htacess 和随机文件被黑客入侵

最近,在我运行 apache 和 php 的某台客户服务器上,我注意到网站上的每个文件夹中都放置了一堆随机文件。它们以随机数字命名,例如 205492.php。

还有一些 .htaccess 文件与这些随机编号的文件一起放置。我的主机告诉我它是客户端在 php 中上传的脚本,但文件的所有者/组设置为 httpd。我认为这意味着是 apache 守护进程将文件放在这里。这些文件的创建时间都设置为完全相同的时间戳。

随机 php 文件中有很多 CURL 和 base64_encode 函数。我确实注意到,为我客户建立网站的人将整个文件夹的 chmod 设置为 777。后来我将其更改为 755,认为这可能是问题所在。

我想知道是否有人听说过类似的事情,以及是否有人有任何建议。非常感谢您抽出时间。

答案1

不仅糟糕的或一般的程序员,优秀的 PHP 程序员也常常忘记安全目标。

虽然这不是板上钉钉的事情,但黑客网站是可以建立的方式引入一些规则更加困难

  • 代码/数据/工作文件分割和权限执行
    • 代码:保存可执行文件的目录:此目录必须可访问但不得由运行 apache 的用户写入(不同系统中的 www-data 或 httpd)(php_admin_flag 引擎开启)
    • 数据:页面附带的 css、图片和静态文件的位置:此目录不得由 Apache 写入或执行(php_admin_flag 引擎关闭)
    • 用户可上传文件、临时文件等的目录:此目录可以写入但不得由 Apache 执行(php_admin_flag 引擎关闭)
  • 禁用 .htaccess 文件:三分之一的时间里,网站“黑客”只涉及重写 .htaccess 文件,因此这就像权限提升。如果 Apache 不必检查任何 .htaccess 文件是否位于所服务路径的任何级别,则还可以加快 Apache 的速度。
  • 在 PHP 中引入非阻碍性限制,例如
    • 禁用未使用的功能(系统、开头的 exec),
    • 引入 open_basedir (严格规定不允许 php exec 的目录)
    • php_admin_flag 引擎在目录 / 中关闭,并且只允许特定目录(或者更好的是特定文件)
    • display_errors 严格关闭
    • 对于许多虚拟主机网站来说,如果能引入一个 sendmail 包装器,就会变得非常方便,这样就可以给每封外发信件都打上水印,这样就更容易找到哪个虚拟主机向系统发送垃圾邮件
  • 当然还要避免一些常见错误,比如包含 GET/POST 变量

一个简单的 sendmail 包装器:

#!/bin/sh
umask 077
TEMP=/tmp
CHROOT=${1:-unspecified}

trap "rm -f msg.$$ ; exit 1" 0 1 2 3 15

rm -f msg.$$ || exit 1;
cat | formail -f -I "X-subsystem-sent: \"$CHROOT\"" >$TEMP/trapmail.$$

exec <$TEMP/trapmail.$$ || exit 1
rm -f $TEMP/trapmail.$$ # safe, we hold the file descriptor

exec /usr/sbin/sendmail -t -i 
exit 1

答案2

该网站正在使用的一个文件/库中存在漏洞。该漏洞允许将文件上传到服务器,并且听起来像是放置在任意位置。由于 PHP 以与 apache 相同的用户身份运行,因此所有上传的文件都将归该用户所有。其次,由于文档根目录被 chmoded 为 777,它允许任何系统用户将文件/文件夹写入该路径。

像您一样更改权限级别(chmod 755)将有助于解决该问题,但我建议查看您的日志/代码并消除漏洞或可能的漏洞。

答案3

我的一个网站也遇到过类似的情况。我使用服务器日志和基于 PHP 的 CMS 日志来识别 IP 地址。

使用 .htaccess 文件我添加了以下行(阻止访问点空白)

#Blacklist
RewriteCond %{REMOTE_ADDR} (?:123.123.123.123) [NC]

我用 IP 替换上面的数字(或者如果来自可疑国家/地区,则阻止整个范围),这就是我所做的。成功了。但这只是一个可能的解决方案。希望对您有所帮助!

相关内容