【发布时间】:2013-08-10 12:22:12
【问题描述】:
首先,我不肯定它属于这里而不是 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 数据中的这两项已被清除。
但是被感染的文件数量比较多,我不想一个个文件一个一个地运行命令。
我尝试使用绝对路径以及从文件名中删除“./”。我正在从正确的目录运行相对路径(正如第二个命令确实适用于相对路径的事实所证明的那样),但它仍然找不到任何文件。
是否有什么事情我忘记做或做得不好?
【问题讨论】:
-
您的 xargs 命令看起来是文件,并且应该可以在输入文件正常的情况下工作。一个警告:假设任何文件名中没有空格,一切都很好。
-
我认为您必须提供更多信息。
head -3 files_with_malicious_exif.txt | xargs ls -1的输出是什么? -
我在任何文件名中都看不到任何空格(并且在我的文本编辑器中搜索空格字符是空的)。 @nosid 该命令的输出
: No such file or directory***.org/**.***.org/web/content/images/****.jpg : No such file or directory***.org/**.***.org/web/content/images/multimedia/***.jpg : No such file or directory***.org/**.***.org/web/content/images/***.jpg我用星号审查了部分路径,因为它可以识别我的客户。请注意,“目录”之后的部分似乎在开头被切断(它不是路径的完整开头)。