La concatenazione delle stringhe è vulnerabile al carattere nullo in aspx?

1

Ho appena visto questa riga di codice in VB in un file .aspx

FileUpload.SaveAs(sPath & "/" & FileUpload.FileName)

Questa riga salva un file caricato da un utente. Utilizza il metodo SaveAs . Ero preoccupato per il sPath perché l'utente può modificarlo.

L'utente può solo salvare l'immagine, quindi controlla l'estensione del nome del file. Ho pensato che qualcuno possa usare un carattere null per salvare un altro file, come:

/path/evil.aspx0x00/image.jpg

Fortunatamente, questo non funziona. Ma c'è un altro modo di manipolare? Qualcuno può inviare un altro modo di carattere null?

- Modifica

Per quanto ne so, elencho questo tipo di carattere null

  • 0x00
  • %00
  • /0
  • /x0
  • �
  • �

C'è di più?

- Modifica 2

Lol, questo elenco offre più tipi di carattere null

    
posta Rodrigo 10.12.2014 - 03:32
fonte

2 risposte

1

In un meccanismo di caricamento di file, alcune cose dovrebbero sempre essere considerate come controllate, il controllo di base sulle estensioni dei file non è sufficiente a mio avviso.

  1. Controllo intestazione file: leggi i primi pochi byte del file e determina se si tratta di un'immagine o meno.
  2. Converti l'immagine: se il passaggio 1 ha esito positivo, converti l'immagine in un formato diverso dal formato caricato. Questo è per eliminare il possibile codice dannoso nelle immagini.

Per quanto riguarda la domanda relativa all'iniezione di nullbyte: oltre a 0x00,% 00 può essere utilizzato anche nei nomi di file, ad esempio:

/path/evil.aspx%00.jpg

Dubito che funzioni in ASPX ma dipende dalla tua configurazione.

    
risposta data 10.12.2014 - 06:34
fonte
1

FileUpload.FileName è completamente specificato dall'utente. Può contenere "/../" e altre sequenze di escape del percorso simili, quindi non ci si può fidare di esso.

Se si salva il file su disco, la cosa migliore da fare sarebbe ignorare il nome file fornito dall'utente e creare invece il proprio nome file sicuro garantito. Ad esempio, è possibile generare un nuovo GUID per ottenere ciò. Se devi assolutamente utilizzare il nome file fornito dall'utente, considera la possibilità di limitarlo solo a {caratteri alfanumerici, trattino, carattere di sottolineatura, punto} e impone che il nome file debba iniziare e terminare con un carattere alfanumerico.

    
risposta data 15.12.2014 - 08:27
fonte

Leggi altre domande sui tag