我们的服务器受到了攻击,我需要删除注入到大量 php 和 html 文件中的恶意代码。
有什么好方法可以替换多个文件中的代码?我尝试使用这个脚本:https://github.com/terry81/Malicious-Web-Scripts-Search/commit/2cdb95adfb667455080468ccaa3e58c822c2bd32但我无法让它工作。请帮忙!
答案1
您链接的脚本看起来很简单。您可以通过以下一行代码执行类似操作:
find $DIRS -print0 | xargs -0 perl -p -i.bak -e 's/\Qcode to be removed\E//'
这里$DIRS
代表文件所在的目录,code to be removed
代表恶意代码。将\Q
引用所有特殊字符,直到\E
。原始文件将备份到.bak
文件中。如果您不想要这个,请删除.bak
,即仅删除-i
,但不要将其与组合-e
,即-i -e
不组合-ie
。
小心,如果你操作错误,你可能会删除重要的东西!请先自行备份!
更新:
脚本版本:
#!/usr/bin/env perl -i.bak
use strict;
use warnings;
my $code = <<'END-OF-MALICIOUS-CODE';
xo=new Date(2010,11,3,2,21,4);t=xo.getSeconds();var huur=[36/t,36/t, ....
END-OF-MALICIOUS-CODE
chomp $code; # remove trailing newline
while (<>) {
s/\Q$code\E//;
print;
}
但将其放入文件中,最好带有.pl
扩展名,例如remcode.pl
。可以选择使其可执行(chmod +x file.pl
),否则您必须perl
明确调用它:
find $DIRS -print0 | xargs -0 perl remcode.pl
您可以执行“查找”部分以及 perl 代码,但这不是必需的。
不保证!先在几个文件上测试一下!
答案2
Sed、Perl 等都可以满足您的需要。但是...
我会不是假设有人能够将恶意代码注入大量脚本,但并未完全控制该机器。当然,你可以清除 HTML 中的恶意代码,但从你的机器运行的僵尸网络怎么办?
标准程序是将盒子从网络上拔出,并在重新插入之前进行全面的事后检查。至少,如果您一直保留备份的校验和,请运行整个文件系统的校验和。
最安全的方法可能是从您上次已知的良好备份中进行恢复 - 但前提是您可以从存档日志等中确定初始泄露的日期和时间。
答案3
有很多方法可以在多个文件中查找和替换文本。 塞德是最受欢迎的工具,但它是否合适很大程度上取决于你的文件是什么样子。你能给我们举一个恶意代码的例子吗?
答案4
你可以用这个轻松修复(或彻底破坏)大量文件:
sudo perl -pi.prev -e 's/bad string/new string/g' /path/to/folder/of/bad/files
当然,现在您需要一个正则表达式来匹配错误代码,因此您有两个问题。
它将复制每个以 .prev 结尾的文件,然后按照原始文件所示进行替换。
**
- 请首先仔细测试你的正则表达式!!!
**