{{#include ../../banners/hacktricks-training.md}} **Controlla i dettagli completi di questa tecnica in [https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf](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. > [!NOTE] > **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 `\
.TMP`. Notabilmente:

- Il percorso predefinito è tipicamente `C:\Windows\Temp`.
- Il prefisso è solitamente "php".
- Il `` 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.

{{#include ../../banners/hacktricks-training.md}}