LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
compress.zlib://
y PHP_STREAM_PREFER_STDIO
Un archivo abierto utilizando el protocolo compress.zlib://
con la bandera PHP_STREAM_PREFER_STDIO
puede continuar escribiendo datos que lleguen a la conexión más tarde en el mismo archivo.
Esto significa que una llamada como:
Enviaré una solicitud pidiendo http://attacker.com/file, luego el servidor podría responder a la solicitud con una respuesta HTTP válida, mantener la conexión abierta y enviar datos adicionales algún tiempo después que también se escribirán en el archivo.
Puedes ver esa información en esta parte del código php-src en main/streams/cast.c:
Este CTF fue resuelto utilizando el truco anterior.
El atacante hará que el servidor víctima abra una conexión leyendo un archivo desde el servidor del atacante utilizando el protocolo compress.zlib
.
Mientras esta conexión exista, el atacante exfiltrará la ruta al archivo temporal creado (es filtrado por el servidor).
Mientras la conexión siga abierta, el atacante explotará un LFI cargando el archivo temporal que controla.
Sin embargo, hay una verificación en el servidor web que previene cargar archivos que contengan <?
. Por lo tanto, el atacante abusará de una Condición de Carrera. En la conexión que aún está abierta, el atacante enviará la carga útil de PHP DESPUÉS de que el servidor web haya verificado si el archivo contiene los caracteres prohibidos, pero ANTES de cargar su contenido.
Para más información, consulta la descripción de la Condición de Carrera y el CTF en https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)