首先,我不肯定它属于这里而不是 ServerFault 或其他地方。如果它属于那里,我很抱歉。
无论如何,这里有一些关于我的问题的背景。我在一家管理各种客户网站的公司工作,我们接手的一个客户的网站上有很多需要删除的恶意软件。现在,在过去的几周里,我学到了很多关于使用 grep、find、xargs 等来查找和执行具有特定文件名、文件大小以及包含特定字符串或文本模式的文件的操作。
我们发现的一个问题是某些图像被注入了恶意的 exif 数据(基本上,Make 属性/.*/e
和 Model 属性的效果是eval(base64_decode(...));
编码字符串是一个 PHP 脚本,允许攻击者发送一个 POST 请求某个属性,然后通过 eval() 运行该属性的输入。然后,他们将以下代码注入到另一个 PHP 脚本中。
<?php
$exif = exif_read_data('/path/to/image.jpg');
preg_replace($exif['Make'],$exif['Model'],'');
?>
所以他们正在用接受 POST 请求并执行给定代码的 PHP 代码替换匹配任何内容(包括空主题)的正则表达式 .*。从本质上讲,这允许攻击者在客户端网站上执行他们想要的任何 PHP 代码。所有这些都很有趣,但修复起来很烦人。
PHP 有读取 exif 数据的工具(即 exif_read_data()),我用它来扫描客户端网站上的所有图像文件,并编译一个包含注入恶意 exif 数据的图像列表。但是,PHP 没有配备修改该数据的方法。所以,我做了一些研究,发现有一个名为“ExifTools”的linux程序可以让你改变exif数据。我安装了它并运行了以下命令:
xargs -a files_with_malicious_exif.txt exiftool -make="" -model=""
那里的文本文件只是一个文件路径列表,每个路径都有自己的行。该脚本正确读取文件名,因为它会输出一堆“错误:找不到文件 - ./path”消息(每个路径一个)。
问题是,该路径确实存在,如果我运行以下命令:
exiftool -make="" -model="" ./path/that/does/exist/and/is/in/the/file/like/this.jpg
有用。我检查了文件,其 exif 数据中的这两项已被清除。
但是受感染文件的数量相当多,我不想逐个文件对每个文件运行命令。
我尝试使用绝对路径以及从文件名中删除“./”。我正在从正确的目录运行相对路径(正如第二个命令确实适用于相对路径的事实所证明的那样),但它仍然找不到任何文件。
有什么我忘记做或做得不好的事情吗?