WordPress, il popolare sistema di gestione dei contenuti (CMS), alimenta circa il 43% di tutti i siti web in circolazione su Internet. Questo significa che milioni di siti in tutto il mondo utilizzano WordPress come piattaforma principale per il loro sito.
Con la crescente popolarità di WordPress, aumenta anche l’interesse degli attaccanti. Il CMS, insieme ai suoi plugin, temi e database, possono presentare vulnerabilità che mettono a rischio la sicurezza del nostro sito web.
Fortunatamente, esiste uno strumento gratuito chiamato WPScan, che può aiutare a identificare e risolvere questi problemi di sicurezza. WPScan è disponibile per una vasta gamma di sistemi operativi, tra cui Debian, Ubuntu, CentOS/RHEL 8, Fedora, Arch Linux e viene preinstallato su Kali Linux. Inoltre WPScan è disponibile direttamente sul beckend di WordPress utilizzando il plugin dedicato.
Una volta installato WPScan, è possibile utilizzarlo per eseguire una scansione completa di qualsiasi sito web basato su WordPress per individuare varie vulnerabilità, inclusi problemi nei file core, nei plugin e nei temi. Inoltre, WPScan verifica password deboli, presenza di HTTPS, elementi di intestazione e cerca file sensibili come debug.log e file di backup wp-config.php e molto altro ancora.
Indice
- Installazione di WPScan e Prima Scansione
- Modalità di Scansione WPScan
- Funzionalità WPScan: Verificare la presenza di plugin vulnerabili
- Funzionalità WPScan: Verificare la presenza di temi vulnerabili
- Funzionalità WPScan: modalità stealth
- Funzionalità WPScan: Enumerare gli utenti registrati
- Funzionalità WPScan: Lanciare l’attacco a dizionario e testare la password
Installazione di WPScan e Prima Scansione
In questa guida utilizzeremo WPScan su Kali Linux da riga di comando. WPScan viene preinstallato di default su Kali Linux, quindi non è necessario installarlo manualmente. Tuttavia, nel caso in cui non sia già presente nel nostro sistema operativo, apriamo il nostro terminale e digitiamo il seguente comando per procedere con l’installazione:
sudo apt install wpscan
Se già abbiamo installato WPScan e abbiamo intenzione di aggiornarlo alla versione più recente, possiamo farlo tramite il seguente comando, utilizzando sempre il terminale di Kali.
wpscan --update
Una volta installato, siamo pronti per eseguire la nostra prima scansione di base all nostro sito web, con il seguente comando:
wpscan --url https://www.il-tuo-sito-web.it/
Di default, WPScan non mostrerà informazioni sulle vulnerabilità nei risultati. Per accedere a questa funzionalità, dovremo generare un API Token. Per farlo, visitiamo il sito ufficiale di WPScan e selezioniamo il piano gratuito per la registrazione.

Dopo aver effettuato la registrazione e ottenuto il nostro API Token, copiamolo e utilizziamolo insieme al comando seguente:
wpscan --url https://www.il-tuo-sito-web.it/ --api-token la tua-chiave-api
Nota: sostituisci il testo “tua chiave API“ con il tuo API Token appena generato. Con il piano gratuito possiamo effettuare fino a 25 richieste API al giorno.
Se tutto è andato a buon fine, avremo eseguito la nostra prima scansione all nostro sito.
Modalità di Scansione WPScan
Per esplorare i vari comandi e opzioni disponibili con WPScan, ci basta aprire la sezione di aiuto con il seguente comando:
wpscan -h
Questo comando ci fornirà un elenco completo dei comandi e delle opzioni disponibili per l’utilizzo di WPScan.
┌──(kali㉿kali)-[~] └─$ wpscan -h ______________________________________________________________________________________________________________________ __ _______ _____ \ \ / / __ \ / ____| \ \ /\ / /| |__) | (___ ___ __ _ _ __ ® \ \/ \/ / | ___/ \___ \ / __|/ _` | '_ \ \ /\ / | | ____) | (__| (_| | | | | \/ \/ |_| |_____/ \___|\__,_|_| |_| WordPress Security Scanner by the WPScan Team Version 3.8.25 @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart ______________________________________________________________________________________________________________________ Usage: wpscan [options] --url URL The URL of the blog to scan Allowed Protocols: http, https Default Protocol if none provided: http This option is mandatory unless update or help or hh or version is/are supplied -h, --help Display the simple help and exit --hh Display the full help and exit --version Display the version and exit -v, --verbose Verbose mode --[no-]banner Whether or not to display the banner Default: true -o, --output FILE Output to FILE -f, --format FORMAT Output results in the format supplied Available choices: cli-no-colour, cli-no-color, json, cli --detection-mode MODE Default: mixed Available choices: mixed, passive, aggressive --user-agent, --ua VALUE --random-user-agent, --rua Use a random user-agent for each scan --http-auth login:password -t, --max-threads VALUE The max threads to use Default: 5 --throttle MilliSeconds Milliseconds to wait before doing another web request. If used, the max threads will be set to 1. --request-timeout SECONDS The request timeout in seconds Default: 60 --connect-timeout SECONDS The connection timeout in seconds Default: 30 --disable-tls-checks Disables SSL/TLS certificate verification, and downgrade to TLS1.0+ (requires cURL 7.66 for the latter) --proxy protocol://IP:port Supported protocols depend on the cURL installed --proxy-auth login:password --cookie-string COOKIE Cookie string to use in requests, format: cookie1=value1[; cookie2=value2] --cookie-jar FILE-PATH File to read and write cookies Default: /tmp/wpscan/cookie_jar.txt --force Do not check if the target is running WordPress or returns a 403 --[no-]update Whether or not to update the Database --api-token TOKEN The WPScan API Token to display vulnerability data, available at https://wpscan.com/profile --wp-content-dir DIR The wp-content directory if custom or not detected, such as "wp-content" --wp-plugins-dir DIR The plugins directory if custom or not detected, such as "wp-content/plugins" -e, --enumerate [OPTS] Enumeration Process Available Choices: vp Vulnerable plugins ap All plugins p Popular plugins vt Vulnerable themes at All themes t Popular themes tt Timthumbs cb Config backups dbe Db exports u User IDs range. e.g: u1-5 Range separator to use: '-' Value if no argument supplied: 1-10 m Media IDs range. e.g m1-15 Note: Permalink setting must be set to "Plain" for those to be detected Range separator to use: '-' Value if no argument supplied: 1-100 Separator to use between the values: ',' Default: All Plugins, Config Backups Value if no argument supplied: vp,vt,tt,cb,dbe,u,m Incompatible choices (only one of each group/s can be used): - vp, ap, p - vt, at, t --exclude-content-based REGEXP_OR_STRING Exclude all responses matching the Regexp (case insensitive) during parts of the enumeration. Both the headers and body are checked. Regexp delimiters are not required. --plugins-detection MODE Use the supplied mode to enumerate Plugins. Default: passive Available choices: mixed, passive, aggressive --plugins-version-detection MODE Use the supplied mode to check plugins' versions. Default: mixed Available choices: mixed, passive, aggressive --exclude-usernames REGEXP_OR_STRING Exclude usernames matching the Regexp/string (case insensitive). Regexp delimiters are not required. -P, --passwords FILE-PATH List of passwords to use during the password attack. If no --username/s option supplied, user enumeration will be run. -U, --usernames LIST List of usernames to use during the password attack. Examples: 'a1', 'a1,a2,a3', '/tmp/a.txt' --multicall-max-passwords MAX_PWD Maximum number of passwords to send by request with XMLRPC multicall Default: 500 --password-attack ATTACK Force the supplied attack to be used rather than automatically determining one. Multicall will only work against WP < 4.4 Available choices: wp-login, xmlrpc, xmlrpc-multicall --login-uri URI The URI of the login page if different from /wp-login.php --stealthy Alias for --random-user-agent --detection-mode passive --plugins-version-detection passive [!] To see full list of options use --hh.
Funzionalità WPScan: Verificare la presenza di plugin vulnerabili
Questo comando eseguirà una scansione dei plugin installati sul nostro sito WordPress e utilizzerà la chiave API fornita per accedere ai dati sulle vulnerabilità dai server di WPScan.
wpscan --url https://www.il-tuo-sito-web.it/ --enumerate p --api-token la tua-chiave-api
Funzionalità WPScan: Verificare la presenza di temi vulnerabili
Questo comando eseguirà una scansione dei temi installati sul tuo sito WordPress e utilizzerà la chiave API fornita per accedere ai dati sulle vulnerabilità dai server di WPScan.
wpscan --url https://www.il-tuo-sito-web.it/ --enumerate t --api-token la tua-chiave-api
Funzionalità WPScan: modalità stealth
Questo comando avvierà WPScan in modalità stealth. Ciò aiuta a eseguire la scansione in modalità nascosta, impedendo al firewall dell’applicazione web di rilevare WPScan.
wpscan --url https://www.il-tuo-sito-web.it/ --stealthy
Funzionalità WPScan: Enumerare gli utenti registrati
Questo comando eseguirà una scansione per enumerare gli utenti registrati sul tuo sito WordPress.
wpscan --url https://www.il-tuo-sito-web.it/ --enumerate u
Funzionalità WPScan: Lanciare l’attacco a dizionario e testare la password
Dopo aver elencato i nomi utente, possiamo provare a eseguire un attacco di Brute force sull’utente individuato, per testare la sicurezza del nostro sito, digitando il comando:
wpscan --url https://www.il-tuo-sito-web.it/ --wordlist /path/dizionario/wordlist --username Nomeutente
WPScan inizierà a provare tutte le password presenti nel dizionario per il nome utente specificato. Una volta trovata quella giusta si bloccherà indicando il successo dell’operazione e mostrando una tabella con la password affiancata al nome dell’utente. Beh se hai questo risultato non è una bella notizia! Cambia la password impostandone una robusta!
Vi ricordo che scansionare i siti altrui a scopi non etici è illegale.