Intereting Posts
Установка mcrypt на OSX 10.8.2 – PHP 5.3.15 с homebrew вложения для пользовательских типов сообщений php-код, необходимый для приложения Android, который запрашивает базу данных Асинхронные / параллельные HTTP-запросы с использованием PHP curl_multi как ограничить определенный домен (ы) электронной почты, а также отправить форму Ошибка Codeigniter 404 на Live Server Как обновить столбец идентификаторов, начиная с 1 раза Как искать письма из почтового ящика с помощью строки Subject как автоматически копировать весь каталог в виде эскизов, используя phpthumb (или некоторую другую библиотеку) цикл через массив объектов imagecreatefromjpeg и подобные функции не работают в PHP SQL-инъекция, которая распространяется вокруг mysql_real_escape_string () Должен ли я преобразовать сохраненный Markdown в HTML или просто сохранить HTML? 500 Внутренняя ошибка сервера для файла php не для html Как получить доступ к ZF2-приложению без «общедоступного» URL-адреса

PHP / SSH regex script / command для удаления идентичного кода вредоносного кода из многих файлов

У меня есть вирус, который заразил тысячи файлов на одном из серверов моего клиента.

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

В принципе, хотя, в отличие от большинства вредоносных программ, я видел, где он вводит php перед закрытием?> Кода GOOD (что очень сложно определить, какой код кода / плохой), эта текущая вредоносная программа ALWAYS добавляет новый <?php ... malware ... ?> .

Итак, в основном, скажем, здесь есть хороший код:

 <?php require('./wp-blog-header.php'); ?> 

Вместо того, чтобы добавлять некоторый вид base64_decode eval сразу после инструкции require, но перед?? (Что может затруднить удаление, когда страница заканчивается в условном / сложном заявлении), это всегда добавит следующий код с NEW <?php ... ?> так:

 <?php require('./wp-blog-header.php'); ?><?php ... malware ...?> 

Я не хочу помещать здесь какой-либо вредоносный код, но так всегда запускается вредоносный код:

 <?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir = "tons and tons of characters";$eva1tYlbakBcVSir = "\x6335\1443\3x6f\1534\x70\170\x65";$SNIPSNIPSNIPSNIP;} ?> 

Я хотел бы искать каждый файл для <?php @error_reporting(0); if (!isset <?php @error_reporting(0); if (!isset и если это последний оператор PHP на странице, а затем удалить все в пределах

Вот как вы очищаете весь проект с помощью чистого php.

Ни в коем случае я не беру на себя никакой ответственности за любые убытки, включая, но ограничиваясь прямым, косвенным, особым или косвенным ущербом, возникающим в результате или каким-либо образом связанным с использованием предоставленного кода, независимо от того, по гарантии, контракту, деликту или иным образом; независимо от того, был ли нанесен ущерб лицам или имуществу или иным образом; и независимо от того, была ли потеря получена или возникла из-за результатов использования этого кода. ;п

 <?php //Enter it as it is and escape any single quotes $find='<?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir =\'\';?>'; echo findString('./',$find); function findString($path,$find){ $return=''; ob_start(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if(is_dir($path.'/'.$file)){ $sub=findString($path.'/'.$file,$find); if(isset($sub)){ echo $sub.PHP_EOL; } }else{ $ext=substr(strtolower($file),-3); if($ext=='php'){ $filesource=file_get_contents($path.'/'.$file); $pos = strpos($filesource, $find); if ($pos === false) { continue; } else { //The cleaning bit echo "The string '".htmlentities($find)."' was found in the file '$path/$file and exists at position $pos and has been removed from the source file.<br />"; $clean_source = str_replace($find,'',$filesource); file_put_contents($path.'/'.$file,$clean_source); } }else{ continue; } } } } closedir($handle); } $return = ob_get_contents(); ob_end_clean(); return $return; } ?> к <?php //Enter it as it is and escape any single quotes $find='<?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir =\'\';?>'; echo findString('./',$find); function findString($path,$find){ $return=''; ob_start(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if(is_dir($path.'/'.$file)){ $sub=findString($path.'/'.$file,$find); if(isset($sub)){ echo $sub.PHP_EOL; } }else{ $ext=substr(strtolower($file),-3); if($ext=='php'){ $filesource=file_get_contents($path.'/'.$file); $pos = strpos($filesource, $find); if ($pos === false) { continue; } else { //The cleaning bit echo "The string '".htmlentities($find)."' was found in the file '$path/$file and exists at position $pos and has been removed from the source file.<br />"; $clean_source = str_replace($find,'',$filesource); file_put_contents($path.'/'.$file,$clean_source); } }else{ continue; } } } } closedir($handle); } $return = ob_get_contents(); ob_end_clean(); return $return; } ?> 

Удачи.

UPDATE (с регулярным выражением):

 <?php error_reporting(E_ALL); $find='<\?php @error_reporting\(0\); if \(!isset\((.*?)\?>'; echo findString('./',$find); function findString($path,$find){ $return=''; ob_start(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if(is_dir($path.'/'.$file)){ $sub=findString($path.'/'.$file,$find); if(isset($sub)){ echo $sub.PHP_EOL; } }else{ $ext=substr(strtolower($file),-3); if($ext=='php'){ $filesource=file_get_contents($path.'/'.$file); //The cleaning bit echo "The string '".htmlentities($find)."' was found in the file '$path/$file and has been removed from the source file.<br />"; $clean_source = preg_replace('#'.$find.'#','',$filesource); // $clean_source = str_replace($find,'',$filesource); file_put_contents($path.'/'.$file,$clean_source); }else{ continue; } } } } closedir($handle); } $return = ob_get_contents(); ob_end_clean(); return $return; } ?> к <?php error_reporting(E_ALL); $find='<\?php @error_reporting\(0\); if \(!isset\((.*?)\?>'; echo findString('./',$find); function findString($path,$find){ $return=''; ob_start(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if(is_dir($path.'/'.$file)){ $sub=findString($path.'/'.$file,$find); if(isset($sub)){ echo $sub.PHP_EOL; } }else{ $ext=substr(strtolower($file),-3); if($ext=='php'){ $filesource=file_get_contents($path.'/'.$file); //The cleaning bit echo "The string '".htmlentities($find)."' was found in the file '$path/$file and has been removed from the source file.<br />"; $clean_source = preg_replace('#'.$find.'#','',$filesource); // $clean_source = str_replace($find,'',$filesource); file_put_contents($path.'/'.$file,$clean_source); }else{ continue; } } } } closedir($handle); } $return = ob_get_contents(); ob_end_clean(); return $return; } ?> 

Пока это самый близкий (спасибо mvds)

sed -e "s/<?php @error_reporting.*?>//g" --in-place=_cleaned *

хотя -in-place = _cleaned дает ошибку sed: illegal option -- -