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

33 lines
2.4 KiB
Markdown

{{#include ../../banners/hacktricks-training.md}}
**Proverite sve detalje ove tehnike na [https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf](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.
> [!NOTE]
> **Bezbednosna upozorenje: Napadači, svesni lokacije privremenih fajlova, mogu iskoristiti ranjivost lokalnog uključivanja fajlova 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`. 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, što čini brute force izvodljivim.
Pored toga, proces eksploatacije je pojednostavljen na Windows sistemima. Osobina u funkciji `FindFirstFile` omogućava korišćenje džokera u putanjama lokalnog uključivanja fajlova (LFI). Ovo omogućava kreiranje putanje za uključivanje poput sledeće da locira 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 imenuje ni predvidljive ni podložne napadima silom. Dodatne informacije mogu se naći u referentnoj dokumentaciji.
{{#include ../../banners/hacktricks-training.md}}