domingo, 11 de septiembre de 2011

Poison Null Byte

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

1 comentarios:

Anónimo dijo...

Buen aporte MR. JAck.! Ese método me ha funcionado para llegar mas atras del htdocs y sacar archivos config... AAA y quedo bn el ejemplo jajaja PUTA.html xD

Publicar un comentario