hacktricks/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

3.4 KiB

{% hint style="success" %} 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)

Podržite HackTricks
{% endhint %}

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.

{% hint style="info" %} Bezbednosna upozorenje: Napadači, svesni lokacije privremenih fajlova, mogu iskoristiti ranjivost Local File Inclusion da izvrše kod pristupajući fajlu tokom učitavanja. {% endhint %}

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:

http://site/vuln.php?inc=c:\windows\temp\php<<

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.