Questo potrebbe essere la prova di un tentativo Attacco byte NULL avvelenato . PHP e Perl non usano stringhe con terminazioni NULL , ma la maggior parte dei sistemi sottostanti (qualsiasi cosa basata su C) fa.
Questo può portare ad una certa classe di attacco in cui l'attaccante costruisce una stringa che il programmatore intendeva essere impossibile. Ad esempio, se si stesse utilizzando una libreria C per includere il contenuto del file locale in una pagina Web, nel PHP si potrebbe fare qualcosa di simile;
grabLocalFile($_GET['file_name'] . ".php");
Aggiungendo manualmente ".php"
può sembrare che venga offerta una certa sicurezza, in quanto solo i nomi dei file che terminano con .php
possono essere inclusi. Tuttavia se un utente malintenzionato è in grado di inviare una richiesta come;
example.com/index.php?file_name=/etc/passwdgrabLocalFile("/etc/passwdstr_replace(chr(0), '', $string);
.php");
Il byte null .php
sarà trattato come parte della stringa da php, che finisce con la chiamata;
grabLocalFile($_GET['file_name'] . ".php");
Quando questa stringa raggiunge il sistema sottostante, il byte NULL verrà trattato come un terminatore di stringa e il /etc/passwd
verrà ignorato. Ora l'autore dell'attacco ha incluso %code% nella pagina Web che sta visualizzando, nonostante il tentativo dello sviluppatore di imporre l'inclusione solo dei file che terminano con ".php"
Per mitigare questo tipo di attacchi puoi eliminare del tutto il byte NULL facendo qualcosa del genere
example.com/index.php?file_name=/etc/passwdgrabLocalFile("/etc/passwdstr_replace(chr(0), '', $string);
.php");
Indipendentemente da ciò, suhosin sembra configurato correttamente per difendersi da questa classe di attacco.