Título: [LFI] ¿Podemos saltar este filtro para poder leer otro tipo de archivo? Publicado por: GGZ en 9 Agosto 2017, 04:17 am Hola.
Quiero ver si consigo explotar un LFI en bibtexbrowser. Directorio a explotar: /bibtexbrowser.php?frameset&bib=file.fib Me puse a mirar el código de bibtexbrowser ( https://github.com/monperrus/bibtexbrowser/blob/master/bibtexbrowser.php ), y me encontré con esto: Código
Este código está un poco más actualizado que el que estoy explotando en otra página, porque la versión que esta cargada en la página donde estoy explotando la vulnerabilidad es vulnerable a XSS, cuando esta versión de bibtexbrowser no es vulnerable, se puede ver que no es vulnerable por esta línea: Código
Ahora volviendo al caso de LFI: Baja la extensión del archivo así: Código Buscando por Google, leí que se podía hacer un bypass de la función pathinfo utilizando null byte ( http://www.madirish.net/202 ). Entonces para cargarme el index.php intenté algo como esto: index.php%00.bib , pero no parece funcionar. ¿Qué otras cosas podría intentar? o alguna explicación de porqué esto no funciona. Saludos Título: Re: [LFI] ¿Podemos saltar este filtro para poder leer otro tipo de archivo? Publicado por: #!drvy en 9 Agosto 2017, 18:06 pm El nullbyte no funciona porque a file_exists no le afectan nullbytes. Veras, en versiones anteriores de PHP, el nullbyte afectaba en string, lo que se traducía a que todas las funciones que trataban con ello, eran vulnerables. A partir de 5.3.4 si no me equivoco, eso cambió y ya no les afecta dado que nno admiten strings con nullbyte.
Sencilla demostración. test.php Código
Si hago la esta consulta (y tengo creado el archivo .bib): http://domain/test.php?file=hola.bib Me devolvería: Código: El archivo elegido es: string(8) "hola.bib" Pero si hago esto http://domain/test.php?file=test.php%00.bib Me devuelve: Código: El archivo elegido es: string(13) "test.php.bib" Si te fijas, la función strcasecmp si es vulnerable porque compara vía binaria pero el file_exists no lo es (dice que el archivo no existe, a pesar de que existe) porque no procesa strings con NullBytes. Puedes ver más info en el changelog de PHP para esa version. http://php.net/releases/5_3_4.php Citar Paths with NULL in them (foo\0bar.txt) are now considered as invalid (CVE-2006-7243). Eso se aplica para todas la funciones que tratan con archivos (file_exists, file_get_contents, include, require etc..) Saludos |