Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Regexp - замена кода  (Прочитано 1046 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Regexp - замена кода
« : 24 Февраля 2013, 16:07:10 »
У меня вопрос по bash, точнее regexp. Какая-то гадасть во все файлы index.php повставляла вредноносный код, сайтов много, вручную заменять очень долго, пытался через скриптик, но выходит ошибка - 
sed: -e expression #1, char 3047: unterminated `s' command догадываюсь что где-то проблема со спецсимволом. Скрипт работает, так как тестировал не один раз, но сейчас какой-то символ мешает нормально отработать.
Вот сам скрипт, с тестовым стрингом:
#!/bin/sh
while read filename
do
echo $filename
cat $filename | sed 's|test_string||'g >  1.txt
mv 1.txt $filename
done < file.txt
он ищет и удаляет test_string c входного файла file.txt (там список файлов где удалять)

А вот то, что мне нужно реально удалить  http://pastebin.com/6LNUDnVR    но скрипт просто очищает файл полностью.
Помогите, пожалуйста, очень нужно.
Пишу о разном сюда nixtalk.com

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Regexp - замена кода
« Ответ #1 : 24 Февраля 2013, 19:19:50 »
[off topic]
Скриптики конечно круто, но не сейчас.
Ты не можешь быть уверен что тебе кроме этой бяки еще пол системы рут китов не напихали и что твои скрипты не будут делать Сизифов труд.
Бери ка ты диск со своим любимым серверным дистрибутивом, и иди переустанавливать все системы которые поимели. Да не смей отключать SeLinux/AppArmor не давай прав чему попало, только на то что не обходимо и не битом больше.
Обнови наконец старые дырявые CMS'ки и пофикси свой код. Пароли сделай разные, или лучше вход по ключу.
ну ты понял что список можно продолжать очень долго...

Понаберут студентов, блин, а потом жалуются что у них сайты зараженные.
[/off topic]

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Regexp - замена кода
« Ответ #2 : 25 Февраля 2013, 05:08:20 »
cat $filename | sed 's|test_string||'g >  1.txt
mv 1.txt $filename
LESS='-p --in-place' man sed

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: Regexp - замена кода
« Ответ #3 : 25 Февраля 2013, 14:30:44 »
Так не получится, я уже понял, надо экранировать спецсимволы. На PHP можно точно сделать, но в нем не силен.
Пишу о разном сюда nixtalk.com

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Regexp - замена кода
« Ответ #4 : 25 Февраля 2013, 15:17:02 »
Так не получится, я уже понял, надо экранировать спецсимволы.
Так в чём проблема?
Экранируйте, либо подставляйте в hex-виде.

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: Regexp - замена кода
« Ответ #5 : 26 Февраля 2013, 22:46:27 »
Выкладываю рабочий вариант, со всеми экранированиями, взят кусок начала вредноносного кода и его конец, для большей "точности".
#!/bin/sh
ap="'";
while read filename
do
echo $filename

sed '/<?php  $GLOBALS\['$ap'_1158244728_'$ap'\]/h; {
         
//,/eval($GLOBALS\['$ap'_1158244728_'$ap'\]\[20\]($_REQUEST\["c"\])); ?>
/H
         /eval($GLOBALS\['$ap'_1158244728_'$ap'\]\[20\]($_REQUEST\["c"\])); ?>/{
          x
          s|<?php  $GLOBALS\['$ap'_1158244728_'$ap'\].*eval($GLOBALS\['$ap'_1158244728_'$ap'\]\[20\]($_REQUEST\["c"\])); ?>||
         }
         }
         /<?php  $GLOBALS\['$ap'_1158244728_'$ap'\]/d
      
'  $filename > 1.txt

mv 1.txt $filename
done < file.txt

Проверено, работает на 100%. Пользуйтесь, кому нужно!

p.s. Экранировать необходимо []{}.*/\.
вместо '  подставляется '$ap'     
в file.txt подставляете абсолютные пути к файлам
Пишу о разном сюда nixtalk.com

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.