lunes, 1 de septiembre de 2008

CRLF Injections: Infectando descargas

Saludos!


Documentandome un poco acerca de las CRLF Injections y de HTTP response Splitting, me he topado con un paper del blog de InyeXion (http://inyexion.com.ar/?num=113) que habla acerca de cómo infectar descargas usando esta técnica, aquí os la explico brevemente (recomiendo hechar un ojo al paper de InyeXion)


Un código PHP vulnerable a Source Code Disclosure, debido a que permite la descarga de cualquier tipo de archivo, puede convertirse en un vector de ataque para poder intrusear a una víctima. Tenemos un PHP como este:

header(”Content-Type: application/octet-stream”); header(”Content-Disposition: attachment; filename=”.$_REQUEST[”file”]);


Existen una serie de caracteres que HTTP utiliza como señales para dar saltos de línea y demás, estos caracteres son CR (carriage return) y LF (Line Feed), cuya representación es 0x0D y 0x0A.

Volviendo al ejemplo anterior en PHP, tendríamos una web para descargarnos archivos tipo www.miweb.com/descargas.php?file= , donde en file= pondríamos el archivo a descargar, véase por ejemplo:

www.miweb.com/descargas.php?file=programa.bat

Ahora bien, si a esa URL, le añadimos dos saltos de línea, el texto que haya acontinuación se transferirá como si fuese el propio código fuente del archivo. Por ejemplo, si añadiésemos %0d%0a%0d%0anc -l -p 57 -e cmd , se produciría el doble salto de linea, haciendo que nuestro archivo programa.bat contenga esas líneas, que lo que hacen es colocar una shell en el puerto 57.


Como podeis ver, esta técnica puede ser ampliable en su uso, y buscarse otros código s a inyectar en otras extensiones... todo lo que hay que tener es imaginación.
5 0verl0ad Labs: CRLF Injections: Infectando descargas Saludos! Documentandome un poco acerca de las CRLF Injections y de HTTP response Splitting, me he topado con un paper del blog de InyeX...

3 comentarios:

Anónimo dijo...

Estas equivocado, header() no admite saltos de línea y retorno de carro.

Anónimo dijo...

Para mi no estas equivocado.
pero me gustaría saber que entorno usas, que versión de apache y cual de php.

Gracias por el aporte!

The X-C3LL dijo...

¡Saludos!

No recuerdo qué laboratorio tenía montado por esa época (hace ya 6 años) pero creo que debía de ser PHP 5.1.0 o 5.1.1, no lo puedo asegurar.Lo monté para probar las inyecciones CRLF y el XSS que había en phpinfo().

De todas formas, a día de hoy, pese a que header() está parcheado, siguen dándote CVEs por CRLF injections "teóricas" (para muestra un botón http://packetstormsecurity.com/files/123771 ).

En entorno real reciente (en PHP) sólo he encontrado una en una aplicación que se comunicaba por sockets.

< >