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

46 lines
3.4 KiB
Markdown

{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
**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.
{% 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.