Один из моих сайтов заражен каким-то вредоносным кодом. Код добавляется только к первой строке всех PHP файлов и выглядят следующим образом:Удаление длинной строки с помощью sed
<?php $ulhmjwklj = '#-#O#-#N# .......xqxe-1; ?> /*BEGIN LEGIT CODE HERE*/ <?php....
вредоносный код тысяча символов с большим количеством специальных символов и расстояния, так что я попытался создать сценарий, чтобы удалить его :
for i in $(find . -name \*.php); do
sed -i -E "s/<\?php\s$ulhmjwklj.*\?>//" $i;
echo $i;
done;
Эта sed
команды будет корректно удалить вредоносный код, оставляя легитимную код на первую линию, но затем во всех последующих строках он удаляет все <?php ... ?>
тегов. Так что я попытался изменения команды sed
только поиск/заменить на первой линии:
for i in $(find . -name \*.php); do
sed -i -E "1s/<\?php\s$ulhmjwklj.*\?>//" $i;
done;
Теперь команда sed
будет работать только на первой строке каждого файла, но он также удаляет любые законные PHP-теги, которые прилагаются в первую строку сразу после вредоносного кода.
Может кто-нибудь объяснить, где я здесь не так?
ли длина вредоносного кода фиксированного во всех файлах? Или это зависит от файла к файлу? – anacron
Кроме того, сколько всего файлов PHP у вас есть? Все ли они затронуты? – anacron
'. *' Is greedy ... – jm666