hacktricks/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

33 lines
2.6 KiB
Markdown

{{#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 `<path>\<pre><uuuu>.TMP`. Notabilmente:
- 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.
{{#include ../../banners/hacktricks-training.md}}