Attenzione: Usare Se Trovate Uno Script Non Vostro In Una Qualunque index.php/html Del Vostro Server Virtuale in un noto Hoster (chiedo permesso per fornire il nome)
Per qualche motivo il mio sito e' tempestato di malware javascripts e di certo non sono stato io a metterceli. La mia idea e' che il mio host ha un virus nella intranet o un utente del mio stesso server virtuale e' riuscito simpatcamente ad accedere ai miei files. In soldoni, ogni index del sito contiene a fondo pagina un JS maligno che non posto per intero per evitarvi casini ... questo e' a grandi linee l'inizio e la fine dello scirpt:
codice:
<script language="javascript">$="Z64aZ3dZ22fqb0t-7vrs} ... function z(s){r="";for(i=0;i<s.length;i++){if(s.charAt(i)=="Z"){s1="%"}else{s1=s.charAt(i)}r=r+s1;}return unescape(r);}eval(z($));</script>
ho i sorgenti interi di questa porcheria poiche' modificando eval ed unescape ho creato una super funzione che mi chiede conferma per ogni eval e mi mostra cosa sta valutando. Lo script e' idiotamente cryptato quindi e' stata un'idiozia capire che riportava ad un sito noto per warms e virus online. Poco importa, caratteristica di questo script e' che comincia con <script language="javascript">, una boiata degna dell'ideatore di questo orrore poiche' ogni mio script e' uno <script type="text/javascript"> o <script type="application/x-javascript"> quindi ho creato un file chiamato clean.php capace di sfogliarmi l'intero VS e pulire le index tramite una semplice regexp. Questo il file compatibile PHP 4, messo nella root e richiamato via web, usare con cautela e solo dopo aver appurato che ogni file javascript incluso non e' uno script language="javascript"
codice:
<?php
// mannaggia a loro, by Andrea Giammarchi
set_time_limit(0);
class MaliciousJSRemover{
var $_re = '/(?i)<script language="javascript">([^\\2]+?)(<\/script>)/',
$_affected = array(),
$_cleaned = array(),
$_stillthere = array()
;
function result(){
$s = 'Affected Files: '.count($this->_affected).'
'.
'Cleaned Files: '.count($this->_cleaned).'
'.
'Infected Files: '.count($this->_stillthere)
;
if(count($this->_affected))
$s.='<pre>'.
print_r($this->_affected, true).
'</pre>'
;
return $s;
}
function parse($root = './', $level = 0){
if($level === 0){
$this->_affected = array();
$this->_cleaned = array();
$this->_stillthere = array();
}
foreach(glob($root.'*') as $file){
if(strpos($file, '_Backup_') === false){
//echo str_repeat('', $level).$file.'</br />';
if(is_dir($file))
$this->parse($file.'/', $level + 1);
elseif(strpos($file, 'index') !== false){
$tmp = file_get_contents($file);
if(preg_match($this->_re, $tmp)){
$this->_affected[] = $file;
if(@$fp = fopen($file, 'wb')){
fwrite($fp, preg_replace($this->_re, '', $tmp));
fclose($fp);
$this->_cleaned[] = $file;
} else {
$this->_stillthere[] = $file;
}
}
}
}
}
return $this;
}
}
if(!function_exists('file_get_contents')){
function file_get_contents($file){
$fp = fopen($file, 'rb');
$r = fread($fp, filesize($file));
fclose($fp);
return $r;
}
}
$clean = new MaliciousJSRemover;
$clean->parse('./');
echo $clean->result();
?>
il risultato e' praticamente niente se non siete stati infettati, una lista di files contenente il codice maligno in question qualora lo foste stati.