LFI2RCE Via temp file uploads

Supporta HackTricks

Controlla i dettagli completi di questa tecnica in https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

Caricamenti di file PHP

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:

http://site/vuln.php?inc=c:\windows\temp\php<<

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.

Support HackTricks

Last updated