Directory trasversale in PHP con l'array $ _FILES?

4

Sto lavorando su un'applicazione php che sta gestendo il caricamento di file. Sto cercando di iniettare un payload del percorso trasversale nel nome del file come /../../../../etc/ .

Il fatto è che la linea di codice vulnerabile sta usando il nome del file attraverso l'array $_FILES["name"] . Questo array php integrato esegue una disinfezione automatica su tutti i caratteri speciali vulnerabili.

Mi chiedevo se si tratta di una protezione sufficiente o se è necessario aggiungere altre disinfettanti? C'è un modo per aggirare l'igienizzazione dei php?

    
posta KB303 17.08.2018 - 03:59
fonte

2 risposte

0

Secondo la mia esperienza, $_FILES["uerrfile"]["name"] contiene già solo una parte nome file, con il percorso eliminato.

Tuttavia, il manuale PHP suggerisce di utilizzare comunque la funzione basename() , quindi non sono in grado di dirti diversamente.

Nota a margine, non consiglierei comunque di utilizzare i nomi dei file originali in quanto sono estremamente scomodi da gestire, dato che potrebbero essere duplicati o contenenti caratteri speciali, oppure essere troppo lunghi e troncati, ecc.

Quindi un nuovo nome assegnato da un sistema sarebbe più utilizzabile. Personalmente ho sviluppato l'abitudine di nominare i file dopo md5() dal contenuto del file, oppure puoi usare qualsiasi altro metodo come uniqid() .

    
risposta data 17.08.2018 - 11:18
fonte
0

...the vulnerable line of code...

In che modo vulnerabili?

  • se l'utente finale può sovrascrivere i file in / etc allora hai un grave problema di permessi

  • se l'utente può convincere la tua applicazione che ha caricato (ad esempio) / etc / shadow, ma la scrittura non è riuscita a causa di un problema di autorizzazioni, ed è quindi in grado di recuperare / etc / shadow quindi, in aggiunta al problema dei permessi hai un grosso problema con la gestione delle transazioni / gestione degli errori nel tuo codice applicazione

La versione breve è che il parametro $ _FILES [] ["nome"] è fornito / controllato dall'utente. L'attraversamento della directory è solo uno dei problemi che incontrerai se utilizzi i dati per determinare il nome file / posizione del contenuto sul tuo server. Ci sono altre sorprese in serbo per te .

Potrebbe essere necessario conservare i dati $ _FILES [] ["name"] per l'indicizzazione, ma scegliere un nuovo nome / posizione sul server, preferibilmente associato a un mimetype che lo identifica esplicitamente come contenuto caricato.

Nota che se segui questo consiglio e hai bisogno di conservare i dati del nome, tieni presente che potresti aumentare la superficie di attacco a seconda di come memorizzi la mappatura tra il nome fornito dall'utente e il nome scelto (ad es. i dati possono diventare un vettore per l'iniezione SQL).

    
risposta data 17.08.2018 - 14:04
fonte

Leggi altre domande sui tag