LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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:
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:
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
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)