LFI2RCE Via temp file uploads

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

Altri modi per supportare HackTricks:

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

Caricamento di file PHP

Quando un motore PHP riceve una richiesta POST contenente file formattati secondo RFC 1867, genera file temporanei per memorizzare i dati caricati. Questi file sono cruciali per la gestione del caricamento dei file negli script PHP. La funzione move_uploaded_file deve essere utilizzata per spostare questi file temporanei in una posizione desiderata se è necessario uno storage persistente oltre l'esecuzione dello script. Dopo l'esecuzione, PHP elimina automaticamente eventuali file temporanei rimanenti.

Allarme di sicurezza: Gli attaccanti, consapevoli della posizione dei file temporanei, potrebbero sfruttare una vulnerabilità di inclusione di file locali per eseguire codice accedendo al file durante il caricamento.

La sfida per l'accesso non autorizzato consiste nel prevedere il nome del file temporaneo, che è intenzionalmente randomizzato.

Sfruttamento su sistemi Windows

Su Windows, PHP genera nomi di file temporanei utilizzando la funzione GetTempFileName, con un pattern come <percorso>\<pre><uuuu>.TMP. In particolare:

  • Il percorso predefinito è tipicamente C:\Windows\Temp.

  • Il prefisso è di solito "php".

  • <uuuu> rappresenta un valore esadecimale univoco. In modo cruciale, a causa delle limitazioni della funzione, vengono utilizzati solo i 16 bit inferiori, consentendo un massimo di 65.535 nomi univoci con percorso e prefisso costanti, rendendo fattibile un attacco di forza bruta.

Inoltre, il processo di sfruttamento è semplificato sui sistemi Windows. Una peculiarità della funzione FindFirstFile consente l'uso di caratteri jolly nei percorsi di inclusione di file locali (LFI). Ciò consente di creare un percorso di inclusione come il seguente per individuare il file temporaneo:

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

In alcune situazioni potrebbe essere necessaria una maschera più specifica (come php1<< o phpA<<). È possibile 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 non prevedibili né suscettibili ad attacchi di forza bruta. Ulteriori dettagli possono essere trovati nella documentazione di riferimento.

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

Altri modi per supportare HackTricks:

Last updated