LFI2RCE Via temp file uploads
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Proverite sve detalje ove tehnike na https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
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
, rezultirajući obrascem kao što je <path>\<pre><uuuu>.TMP
. Važno je napomenuti:
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, čineći 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 kao što je sledeća da locira 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 čini imena ni predvidivim ni podložnim napadima silom. Dodatne informacije mogu se naći u referenciranoj dokumentaciji.