Come testare la vulnerabilità del caricamento delle immagini in un'applicazione mobile?

2

Sto amministrando un'applicazione mobile con molti utenti. Gli utenti possono caricare le proprie immagini .jpg.

Non posso sapere in questo momento se gli input delle immagini sull'applicazione che sto amministrando sono sterilizzati o meno, ma so che un utente è riuscito a caricare un'immagine che blocca l'applicazione per chiunque veda l'immagine.

Funziona così:

  1. L'utente carica il suo file .jpg sul suo profilo

  2. Viene memorizzato nel database

Ho controllato il database e ho visto che invece del nome del file immagine per l'utente si dice semplicemente <HTML></HTML>

Mi sono subito reso conto che poteva avere un metodo per unire file HTML / PHP con file immagine ed eseguire codice.

Essendo estremamente stupido, ho cancellato il file effettivo che ha caricato senza prima controllarlo.

Ora, c'è un modo per lanciare semplici codici php / mysql usando il metodo image merge per testare me stesso la vulnerabilità? Ho provato le varianti con l'aggiunta di codice html e php nei dati EXIF dell'intestazione, ma è comunque stato salvato come immagine normale nel database. Non sono riuscito a ottenere l'immagine salvata come < HTML > < / HTML > come ha fatto in origine l'hacker.

È possibile che non sia stato in grado di superare la sicurezza e di entrare effettivamente nel server, ma è ovvio che ha lanciato uno script che ha provocato un errore e l'arresto anomalo dell'applicazione.

Vorrei capire che tipo di metodo è stato usato qui. Gradirei qualsiasi aiuto!

    
posta AndyTTT 14.08.2015 - 01:08
fonte

2 risposte

1

Una delle più importanti leggi della sicurezza: non pensare mai alla fiducia del cliente. Nessuna eccezione.

Se il tuo cliente può inviare qualsiasi file per te e avere accesso diretto ad esso in un secondo momento, stai cercando dei problemi.

Se i tuoi file sono immagini, assicurati che siano davvero delle immagini. Cercare .png sull'estensione o Tipo di contenuto: immagine / png non è sufficiente. È necessario utilizzare le funzioni per rilevare realmente un'immagine.

E non devi permettere agli utenti di accedere direttamente ai file. Prendi il file, metti una cartella inaccessibile al server web usando un nome generato e usa un file per inviare l'immagine al client, usando fpasstrhu () o qualcosa del genere. Se possibile, applica qualche trasformazione all'immagine.

Non importa se si tratta di un'applicazione mobile, un'applicazione desktop, un'API o altro: il server è lo stesso.

    
risposta data 19.04.2016 - 00:01
fonte
0

Se non hai disinfettato il tuo input di file AT ALL, l'hacker potrebbe aver appena caricato una shell PHP come c99.php sul tuo server. Poteva quindi accedere al controllo della shell tramite yourapp.com/uploads/c99.php

Se hai verificato il tipo di contenuto della richiesta, potrebbe caricare la shell dopo aver modificato il tipo di contenuto della richiesta in image / jpg tramite uno strumento di modifica POST HTTP.

E se hai controllato l'estensione del file, probabilmente ha caricato la shell c99.php come c99.jpg e ha cambiato l'estensione del file in .php tramite uno strumento di modifica HTTP POST.

A proposito, questa shell php di cui ho parlato ha il pieno controllo del tuo server, portando a perdite di dati e defacement.

Ho cercato la documentazione di php.net sui caricamenti di file sicuri e il modo più sicuro per disinfettare i dati di input dei file è usare l'estensione finfo.

    
risposta data 18.08.2015 - 23:23
fonte

Leggi altre domande sui tag