LFI2RCE Via temp file uploads
Last updated
Last updated
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)
Controlla i dettagli completi di questa tecnica in https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
Quando un motore PHP riceve una richiesta POST contenente file formattati secondo l'RFC 1867, genera file temporanei per memorizzare i dati caricati. Questi file sono cruciali per la gestione dei caricamenti di file negli script PHP. La funzione move_uploaded_file
deve essere utilizzata per spostare questi file temporanei in una posizione desiderata se è necessaria una memorizzazione persistente oltre l'esecuzione dello script. Dopo l'esecuzione, PHP elimina automaticamente eventuali file temporanei rimanenti.
Avviso di sicurezza: Gli attaccanti, a conoscenza della posizione dei file temporanei, potrebbero sfruttare una vulnerabilità di Local File Inclusion per eseguire codice accedendo al file durante il caricamento.
La sfida per l'accesso non autorizzato risiede nella previsione del nome del file temporaneo, che è intenzionalmente randomizzato.
Sfruttamento su sistemi Windows
Su Windows, PHP genera nomi di file temporanei utilizzando la funzione GetTempFileName
, risultando in un modello come <path>\<pre><uuuu>.TMP
. In particolare:
Il percorso predefinito è tipicamente C:\Windows\Temp
.
Il prefisso è solitamente "php".
Il <uuuu>
rappresenta un valore esadecimale unico. Crucialmente, a causa della limitazione della funzione, vengono utilizzati solo i 16 bit inferiori, consentendo un massimo di 65.535 nomi unici con percorso e prefisso costanti, rendendo fattibile la forza bruta.
Inoltre, il processo di sfruttamento è semplificato sui sistemi Windows. Una peculiarità nella funzione FindFirstFile
consente l'uso di caratteri jolly nei percorsi di Local File Inclusion (LFI). Questo consente di creare un percorso di inclusione come il seguente per localizzare il file temporaneo:
In certe situazioni, potrebbe essere necessaria una maschera più specifica (come php1<<
o phpA<<
). Si possono provare sistematicamente queste maschere per scoprire il file temporaneo caricato.
Sfruttamento su Sistemi GNU/Linux
Per i sistemi GNU/Linux, la casualità nella denominazione dei file temporanei è robusta, rendendo i nomi né prevedibili né suscettibili ad attacchi di forza bruta. Ulteriori dettagli possono essere trovati nella documentazione di riferimento.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)