首先,我并不认为它属于这里,而不是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数据中的这两个项目。
但受感染文件的数量相当高,我不想逐个文件地在每个文件上运行命令。
我尝试使用绝对路径以及从文件名中删除“./”。我正在从正确的目录运行相关路径工作(由第二个命令与相对路径一起工作的事实证明)但它仍然找不到任何文件。
有什么我忘记做或做得不好的事吗?
答案 0 :(得分:2)
如果您已开始使用xargs,那么我们可以尝试通过诊断解决问题,如果您的目标是简单地完成工作,下面的小小循环将起作用;如果你的文件名确实有特殊字符,你只需要将$ fixfile更改为“$ fixfile”。
cat files_with_malicious_exif.txt | while read fixfile; do exiftool -make="" -model="" $fixfile; done