È possibile sfruttare un caricamento di file con whitelist e hashing del nome del file?

2

Ho una piccola applicazione web. Poiché è necessario caricare alcuni file, controllo le estensioni di file con una lista bianca (tgz, jpg, png, pdf, zip, rar, txt, gif, py, c, rb). In aggiunta a ciò, ho cancellato i nomi dei file con md5 quindi ad es. quando l'utente carica il file "exploit.php.jpg" viene rinominato in "526a8f9f3497b5a69bc4523ba0c6aacd.jpg".

Non esiste una verifica del tipo MIME né una funzione "getimagesize ()" o ridimensiona, se si tratta di un'immagine. Per questo è possibile caricare un file php che è stato appena rinominato in exploit.jpg

Anche se questo sembra essere molto rischioso e l'utente sa anche, dove questo file esiste sul mio server ( /images/526a8f9f3497b5a69bc4523ba0c6aacd.jpg ), non sono in grado di eseguire questo file come .php.

Quando provo ad aprire /images/526a8f9f3497b5a69bc4523ba0c6aacd.jpg%00 o /images/526a8f9f3497b5a69bc4523ba0c6aacd.php e così via .. Ottengo solo "file non trovato" (.php) o "immagine non può essere visualizzata" (jpg, gif).

Qualcuno sa se e come è possibile sfruttare quel fileupload?

    
posta zarathustra 18.11.2014 - 18:05
fonte

2 risposte

2

Non fidarti di una lista bianca, può essere ignorata:

Content-type: image/jpeg; filename=exploit.php

L'hashing dei file non ti protegge se l'autore dell'attacco può accedere direttamente al file:

<img src='http://yoursite.net/images/526a8f9f3497b5a69bc4523ba0c6aacd.jpg>

Potresti creare uno script PHP per leggere il file e inviare i contenuti all'utente, invariato. In questo modo, l'attaccante non farà mai riferimento al file sul tuo server e qualsiasi exploit lato server che potrebbe caricare non si innescherà:

<?php

$filename = getFilenameFromDatabase();
// e.g: $DOCROOT/images/exploit.rb.exe.py.bat.scr.php.jpg
header("Content-type: image/jpeg");
readfile("$filename");
?>

Assicurati di filtrare il percorso dei file, altrimenti l'autore dell'attacco può ottenere l'accesso in lettura dei tuoi file.

    
risposta data 18.11.2014 - 20:12
fonte
0

La vulnerabilità del caricamento dei file potrebbe essere sfruttata in combinazione con un bug di inclusione dei file locale per attaccare il lato server. Oppure un file dannoso (es: pdf) potrebbe essere caricato per attaccare un utente finale con privilegi amministrativi, per esempio.

Il tuo approccio sembra abbastanza ragionevole, tuttavia il diavolo è sempre nei dettagli e avresti bisogno di qualcuno con conoscenze di sicurezza per dare un'occhiata al tuo codice sorgente o eseguire un'applicazione per una valutazione più solida.

    
risposta data 28.01.2015 - 06:02
fonte

Leggi altre domande sui tag