Es esta una vulnerabilidad ya archiconocida por todos, pero que no está
de más hablar un poco sobre ella. Los caracteres nulos, o Null Bytes,
son caracteres especializados en la señalización del final de una
cadena, es decir, indican el final de una cadena. De esta forma, los
caracteres que vengan detrás del null byte serán ignorados. Esto va a
adquirir mucha importancia a la hora de bypassear ciertas funciones o
filtros.
La representación de estos caracteres nulos cambia en
cada lenguaje, pero básicamente siempre están compuestos por 0s. Por
ejemplo:
PERL => \0
C++ => \x00
URLENCODE => %00
Estos
son solo unos pocos ejemplos. Bien, entonces si tenemos una string
(~cadena de texto) con el contenido "Hola Soy Vengador de las Sombras",
en realidad eso equivaldría a "Hola Soy".
Ahora que ya hemos
comprendido el cómo funciona la vulnerabilidad, pasemos a la parte
práctica. Imaginémonos que tenemos una aplición web en PERL, y que un
cacho del código fuente es así:
###############Trozo de Código#########################
# $opcion es introducido por método get desde la URL
$archivo = "$opcion.html";
open(PAGINA,"<$archivo"); @source = ;
foreach $linea (@source){
print $linea;
}
####################Mas codigo fuente ####################Si
yo por ejemplo pusiera PUTA, el script trataría de abrir el archivo
PUTA.html. Ahora imaginémosnos que tiene en el mismo directorio (si lo
tuviera en otro también se podría hacer, sólamente tendríamos que añadir
../ para ir subiendo directorios) un archivo llamado Index.php. Si
nosotros seteamos $opcion con la cadena index.php, el script trataría de
abrir index.php.html, que no existe y por tanto daría error.
Pero si lo que hacemos es colocar un null byte (%00)
en la petición GET, podremos lograr que el script ignore la última
parte (.html) abriendo index.php y permitiéndonos ver su código fuente
(un Source Code Disclosure). Entonces la petición debería de quedar algo
así: ?opcion=index.php%00
COmo pueden ver, esta técnica es
aplicable (siempre y cuando sea vulnerable a esta técnica) tanto a SQL
injections, como a LFIs, Transversal Paths, etc... es sólo usar la
imaginación.
Fuente: http://0verl0ad.blogspot.com/2008/10/poison-null-byte.html