LFI2RCE Via temp file uploads
Proverite sve detalje ove tehnike na https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
PHP Učitavanje fajlova
Kada PHP engine primi POST zahtev koji sadrži fajlove formatirane prema RFC 1867, generiše privremene fajlove za skladištenje učitanih podataka. Ovi fajlovi su ključni za rukovanje učitavanjem fajlova u PHP skriptama. Funkcija move_uploaded_file
mora se koristiti za premestiti ove privremene fajlove na željenu lokaciju ako je potrebno trajno skladištenje nakon izvršenja skripte. Nakon izvršenja, PHP automatski briše sve preostale privremene fajlove.
Bezbednosna upozorenje: Napadači, svesni lokacije privremenih fajlova, mogu iskoristiti ranjivost Local File Inclusion da izvrše kod pristupajući fajlu tokom učitavanja.
Izazov za neovlašćen pristup leži u predviđanju imena privremenog fajla, koje je namerno nasumično.
Eksploatacija na Windows sistemima
Na Windows-u, PHP generiše imena privremenih fajlova koristeći funkciju GetTempFileName
, što rezultira obrascem poput <path>\<pre><uuuu>.TMP
. Značajno:
Podrazumevana putanja je obično
C:\Windows\Temp
.Prefiks je obično "php".
<uuuu>
predstavlja jedinstvenu heksadecimalnu vrednost. Ključno, zbog ograničenja funkcije, koristi se samo donjih 16 bita, što omogućava maksimalno 65,535 jedinstvenih imena sa konstantnom putanjom i prefiksom, što čini brute force izvodljivim.
Štaviše, proces eksploatacije je pojednostavljen na Windows sistemima. Osobina u funkciji FindFirstFile
omogućava korišćenje džokera u Local File Inclusion (LFI) putanjama. Ovo omogućava kreiranje putanje za uključivanje poput sledeće kako bi se locirao privremeni fajl:
U određenim situacijama, može biti potrebna specifičnija maska (kao što su php1<<
ili phpA<<
). Može se sistematski pokušati sa ovim maskama kako bi se otkrio otpremljeni privremeni fajl.
Eksploatacija na GNU/Linux sistemima
Za GNU/Linux sisteme, nasumičnost u imenovanju privremenih fajlova je robusna, što imena čini ni predvidivim ni podložnim napadima silom. Dodatne informacije mogu se naći u referenciranoj dokumentaciji.
Last updated