Прежде всего, я не уверен, что это относится сюда, а не к 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'],'');
?>
Таким образом, они заменяют регулярное выражение .*, которое соответствует чему угодно (включая пустую тему), кодом PHP, который принимает запрос POST и выполняет заданный код. По сути, это позволяет злоумышленнику выполнить любой PHP-код, который он хочет, на веб-сайте клиента. Во всем очень интересно разбираться, но надоедает исправлять.
В PHP есть инструменты для чтения данных exif (а именно, exif_read_data()), и я использовал их для сканирования всех файлов изображений на веб-сайте клиента и составления списка изображений, которые содержат вредоносные данные exif. Однако в PHP нет способа изменить эти данные. Итак, я провел небольшое исследование и обнаружил, что существует программа для Linux под названием «ExifTools», которая позволяет вам изменять данные 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 были очищены.
Но количество зараженных файлов довольно велико, и я не хотел бы переходить по файлу, чтобы запускать команду на каждом из них.
Я пытался использовать абсолютный путь, а также удалить «./» из имен файлов. Я запускаю из правильного каталога для работы относительных путей (о чем свидетельствует тот факт, что вторая команда действительно работает с относительным путем), но он все еще не может найти ни один из файлов.
Я что-то забыл сделать или делаю не так?
head -3 files_with_malicious_exif.txt | xargs ls -1
? - person nosid   schedule 08.08.2013: 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
Я зацензурил часть пути звездочками, потому что это идентифицирует моего клиента. Обратите внимание, что часть сразу после каталога кажется обрезанной в начале (это не полное начало пути). - person imkingdavid   schedule 08.08.2013