CMSmap è un web scanner in grado di automatizzare il processo di ricerca ed identificazione di falle di sicurezza di un sito o blog basato su uno dei tre principali CMS: WordPress, Joomla e Drupal. In questo articolo vedremo come utilizzare questo strumento, mostrando come esso consenta molto facilmente di effettuare una completa analisi di vulnerabilità.
Download e primo utilizzo
CMSmap è uno strumento software sviluppato in Python, ed in quanto tale può essere eseguito su qualsiasi sistema operativo in cui sia installato un interprete di questo linguaggio. Se non abbiamo già installato Python, possiamo farlo seguendo le semplici istruzioni sul sito ufficiale del progetto, oppure (nei sistemi Linux), facendo ricorso ai gestori di pacchetti (quali apt o yum).
Dopo esserci assicurati che Python sia installato, non resta che scaricare CMSmap dal repository di GitHub di Dionach. Una volta effettuato il download, scompattando il file .zip troveremo al suo interno lo script cmsmap.py, che rappresenta il comando vero e proprio che utilizzeremo.
La sintassi di base che ci consente di eseguire CMSmap è la seguente:
[code] python cmsmap.py -t http://www.ilmiosito.com [/code]
L'opzione -t
è forse la più importante di tutte, in quanto consente di specificare il sito web da analizzare; senza questa opzione, non potremo eseguire alcun test. Con il semplice comando precedente, d'altro canto, stiamo chiedendo a CMSmap di identificare automaticamente il tipo di CMS, effettuare una scansione completa delle vulnerabilità, enumerare gli utenti ed ottenere tutte le informazioni possibili sul nostro "bersaglio".
Di seguito è mostrato un esempio di output, che mostra come CMSmap consenta di ottenere questo genere di informazioni.
Utilizzare CMSmap
Oltre all'utilizzo standard, appena visto, CMSmap offre diverse opzioni per migliorare la scansione delle vulnerabilità.
Innanzitutto, possiamo decidere di effettuare l'analisi di un grande numero di siti web. Potremmo farlo eseguendo diverse volte CMSmap con l'opzione -t
, oppure (in modo più agevole) utilizzando l'opzione -i
, che accetta come parametro un file di testo contenente un URL per ogni riga. Inoltre, possiamo decidere di salvare l'output su un file di testo (per analizzarlo meglio in un secondo momento) con l'opzione -o
:
[code] python cmsmap.py -i input.txt -o output.txt [/code]
Talvolta può essere utile specificare espressamente la tipologia di CMS da analizzare. In alcuni casi, infatti, il gestore del sito web potrebbe modificare alcuni file per rendere difficile l'identificazione del CMS utilizzato. Se siamo a conoscenza del fatto che si tratti di WordPress, Joomla o Drupal, possiamo forzare di conseguenza la scansione, agevolando il lavoro di CMSmap:
[code]
#Scansione di WordPress:
python cmsmap.py -t http://www.miosito.com -f W
#Scansione di Joomla:
python cmsmap.py -t http://www.miosito.com -f J
#Scansione di Drupal:
python cmsmap.py -t http://www.miosito.com -f D
[/code]
Un'altra interessante caratteristica è la possibilità di effettuare una scansione di tutta una serie di plugin vulnerabili. Nel caso di Drupal e Joomla ciò può essere molto utile, in quanto non sono facilmente reperibili liste di plugin con falle di sicurezza, mentre CMSmap ne include una per ognuno dei tre CMS che consente di analizzare. Le liste sono disponibili all'interno della directory data
, e modificandole è possibile specificare ulteriori plugin da cercare durante l'analisi. Inoltre, è possibile aggiornare automaticamente tali liste tramite il comando seguente:
[code] python cmsmap.py -t http://www.miosito.com --update [/code]
Una scansione di alcuni plugin viene sempre effettuata anche senza specificare alcuna opzione aggiuntiva. Tuttavia, se vogliamo che venga effettivamente verificata la presenza di tutti i plugin che abbiamo inserito nelle liste, è bene ricordare che l'operazione può notevolmente allungare i tempi di analisi, e può essere utile aumentare il numero di thread disponibili per CMSmap (con l'opzione -T
). Ad ogni modo, per effettuare una scansione completa dei plugin, utilizziamo l'opzione -F
:
[code] python cmsmap.py -t http://www.miosito.com -F [/code]
Infine, l'ultima delle caratteristiche interessanti incluse su CMSmap è la possibilità di eseguire attacchi a forza bruta. Una volta ottenuta una lista di utenti, infatti, possiamo specificare una lista di password e tentare di ottenere le credenziali di accesso. Se, ad esempio, vogliamo tentare di ottenere la password dell'utente admin, procediamo così:
[code] python cmsmap.py -t http://www.miosito.com -u admin -p passwords.txt [/code]
Si consideri, inoltre, che possiamo passare all'opzione -u
anche il path di un file contenente una lista di username, attaccando quindi anche diversi utenti.
Se CMSmap riesce ad ottenere le credenziali di un account con i permessi di upload dei plugin (operazione tipicamente di competenza dell'utente admin), esso effettua automaticamente l'upload di un plugin che consente di accedere ad una web shell. Tramite tale strumento, l'attaccante sarà in grado di eseguire comandi direttamente sul sistema operativo.
CMSmap ci mette a disposizione anche qualche altra funzionalità, che non approfondiamo in questa sede. Possiamo ottenere una lista di tutte le altre possibilità con l'opzione -h
:
[code] python cmsmap.py -h [/code]
L'output che otterremo sarà simile al seguente:
[code]
CMSmap tool v0.6 - Simple CMS Scanner
Author: Mike Manzotti mike.manzotti@dionach.com
Usage: cmsmap.py -t <URL>
-t, --target target URL (e.g. 'https://abc.test.com:8080/')
-v, --verbose verbose mode (Default: false)
-T, --threads number of threads (Default: 5)
-u, --usr username or file
-p, --psw password or file
-i, --input scan multiple targets listed in a given text file
-o, --output save output in a file
-k, --crack password hashes file
-w, --wordlist wordlist file (Default: rockyou.txt - WordPress only)
-a, --agent set custom user-agent
-U, --update (C)MSmap, (W)ordpress plugins and themes, (J)oomla components, (D)rupal modules
-f, --force force scan (W)ordpress, (J)oomla or (D)rupal
-F, --fullscan full scan using large plugin lists. Slow! (Default: false)
-h, --help show this help
Example: cmsmap.py -t https://example.com
cmsmap.py -t https://example.com -f W -F
cmsmap.py -t https://example.com -i targets.txt -o output.txt
cmsmap.py -t https://example.com -u admin -p passwords.txt
cmsmap.py -k hashes.txt
[/code]