【发布时间】:2014-07-05 13:06:24
【问题描述】:
我正在清理一个运行基于 PHP 的 CMS 的被黑网站。网站上的每个 PHP 文件都在文件的第一行开头插入了以下字符串:
<?php /**/ eval(base64_decode("aWYoZnVuY3Rpb25"));?>
(为了清楚起见,我截断了 base64 字符串。)
我的目标是通过 bash 脚本删除这个字符串。我首先确保我可以遍历所有文件。
#!/bin/bash
# de-malware-ifier
for i in $(find ~/Sites/www.domain.com -name '*.php'); do
echo "file $i"
done
这按预期工作,打印出数百个受感染文件的文件名。
然后我尝试修改 bash 脚本以替换每个文件的恶意字符串:
#!/bin/bash
# de-malware-ifier
for i in $(find ~/Sites/www.domain.com -name '*.php'); do
echo "file $i"
evil='<?php /**/ eval(base64_decode("aWYoZnVuY3Rpb25"));?>'
sed 's/$evil//'
done
但是,运行此脚本会挂起第一个文件。为什么这个脚本挂了,我应该如何修改这个脚本来给我想要的结果?
我在 Mac OSX 上。
【问题讨论】:
-
一般来说,撤消您知道的更改并不足以确保您重新获得对服务器的控制权。攻击者可能已经安装了一个(或多个)后门,在您“清理”系统后允许他们重新进入。服务器受损后的最佳方法是从头开始重建它,或者从入侵发生之前的备份中恢复。见this ServerFault question and answers。
-
当心
for i in $(command)...你应该避免这种语法。请参阅此答案以获取更多详细信息:stackoverflow.com/questions/19606864/ffmpeg-in-a-bash-pipe/… -
@GordonDavisson 谢谢,这对阅读此问题的其他人很有帮助。在我的具体情况下,无论如何,www.domain.com 都应该下线了,我已经这样做了。我将此视为基本 bash 脚本的学习练习,而不是被黑的服务器恢复。