Updated Jul 15, 2026

Scanners

Enumerate WordPress plugins, themes, and users

WordPress scanner for plugins, themes, users, and known vulns.

Agent

overview

What wpscan does

wpscan fingerprints a WordPress site at --url, then enumerates plugins, themes, users, and interesting files against its vulnerability database.

Select coverage with --enumerate codes such as vp, vt, and u. --stealthy and --detection-mode trade breadth for quieter passive checks.

Confirmed WordPress only. For many URLs in one pass use wpscan-loop; for non-WordPress apps prefer nuclei templates.

source github.com/wpscanteam/wpscan

use cases

Where wpscan fits

Audit a WordPress blog for known vulns

Run against a single --url with an --api-token so plugin and theme versions map to vulnerability data.

Enumerate users before credential testing

Use --enumerate u to recover author IDs and usernames that feed a later password attack or phishing check.

Quiet passive fingerprint of plugins

Enable --stealthy or --plugins-detection passive when you need coverage without aggressive probing.

Export structured findings for a pipeline

Set --format json so downstream nodes can parse plugins, themes, and users without scraping CLI text.

reference

wpscan inputs and flags

68 inputs
NameTypeFlagDescription
urlSTRING--urlThe URL of the blog to scan (http or https). Mandatory.
enumerateSTRING--enumerateEnumeration process: vp, ap, p, vt, at, t, tt, cb, dbe, u, m (comma separated).
api-tokenSTRING--api-tokenWPScan API token used to display vulnerability data.
formatSTRING--formatOutput format: cli, json, cli-no-colour, or cli-no-color.
stealthyBOOLEAN--stealthyQuiet profile: random UA, passive detection, passive plugin version checks.
detection-modeSTRING--detection-modeGlobal detection mode: mixed, passive, or aggressive (default mixed).
plugins-detectionSTRING--plugins-detectionPlugin enumeration mode: mixed, passive, or aggressive (default passive).
max-threadsSTRING--max-threadsMaximum concurrent threads (default 5).

Showing key inputs. wpscan exposes 68 inputs in total.

Full flag reference (68 inputs)
NameTypeFlagDescription
urlSTRING--urlThe URL of the blog to scan. Allowed Protocols: http, https. Default Protocol if none provided: http. This option is mandatory.
forceBOOLEAN--forceDo not check if the target is running WordPress or returns a 403
proxySTRING--proxyFormat: protocol://IP:port
scopeSTRING--scope'Comma separated (sub-)domains to consider in scope. Wildcard(s) allowed in the trd of valid domains, e.g: *.target.tld. Separator to use between the values: ','
vhostSTRING--vhostThe virtual host (Host header) to use in requests
formatSTRING--formatOutput results in the format supplied. Available choices: cli, json, cli-no-colour, cli-no-color
serverSTRING--serverForce the supplied server module to be loaded. Available choices: apache, iis, nginx
headersSTRING--headersAdditional headers to append in requests
verboseBOOLEAN--verboseVerbose mode
stealthyBOOLEAN--stealthyAlias for --random-user-agent --detection-mode passive --plugins-version-detection passive
throttleSTRING--throttleMilliseconds to wait before doing another web request. If used, the max threads will be set to 1.
api-tokenSTRING--api-tokenThe WPScan API Token to display vulnerability data, available at https://wpscan.com/profile
cache-dirSTRING--cache-dirDefault: /tmp/wpscan/cache
enumerateSTRING--enumerateEnumeration 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.
http-authSTRING--http-authFormat: login:password
login-uriSTRING--login-uriThe URI of the login page if different from /wp-login.php
no-bannerBOOLEAN--no-bannerDon't display the banner
no-updateBOOLEAN--no-updateDo not update the Database.
passwordsFILE--passwordsList of passwords to use during the password attack. If no --username/s option supplied, user enumeration will be run.
proxy-authSTRING--proxy-authFormat: login:password
user-agentSTRING--user-agentUser agent
clear-cacheBOOLEAN--clear-cacheClear the cache before the scan
max-threadsSTRING--max-threadsThe max threads to use. Default: 5
cookie-stringSTRING--cookie-stringCookie string to use in requests, format: cookie1=value1[; cookie2=value2
detection-modeSTRING--detection-modeDefault: mixed. Available choices: mixed, passive, aggressive
timthumbs-listFILE--timthumbs-listList of timthumbs' location to use
usernames-fileFILE--usernamesList of usernames to use during the password attack.
wp-content-dirSTRING--wp-content-dirThe wp-content directory if custom or not detected, such as "wp-content"
wp-plugins-dirSTRING--wp-plugins-dirThe plugins directory if custom or not detected, such as "wp-content/plugins"
wp-version-allBOOLEAN--wp-version-allCheck all the version locations
db-exports-listFILE--db-exports-listList of DB exports' paths to use
password-attackSTRING--password-attackForce 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
request-timeoutSTRING--request-timeoutThe request timeout in seconds. Default: 60
users-detectionSTRING--users-detectionUse the supplied mode to enumerate Users, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
users-list-fileFILE--users-listList of users to check during the users enumeration from the Login Error Messages
medias-detectionSTRING--medias-detectionUse the supplied mode to enumerate Medias, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
themes-detectionSTRING--themes-detectionUse the supplied mode to enumerate Themes, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
themes-list-fileFILE--themes-listList of themes to enumerate.
themes-thresholdSTRING--themes-thresholdRaise an error when the number of detected themes via known locations reaches the threshold. Set to 0 to ignore the threshold. Default: 20
user-agents-listFILE--user-agents-listList of agents to use with --random-user-agent
usernames-stringSTRING--usernamesList of usernames to use during the password attack. Examples: 'a1', 'a1,a2,a3'
exclude-usernamesSTRING--exclude-usernamesExclude usernames matching the Regexp/string (case insensitive). Regexp delimiters are not required.
max-scan-durationSTRING--max-scan-durationAbort the scan if it exceeds the time provided in seconds
plugins-detectionSTRING--plugins-detectionUse the supplied mode to enumerate Plugins. Default: passive. Available choices: mixed, passive, aggressive
plugins-list-fileFILE--plugins-listList of plugins to enumerate.
plugins-thresholdSTRING--plugins-thresholdRaise an error when the number of detected plugins via known locations reaches the threshold. Set to 0 to ignore the threshold. Default: 100
random-user-agentBOOLEAN--random-user-agentAdditional headers to append in requests. Separator to use between the headers: '; '. Examples: 'X-Forwarded-For: 127.0.0.1', 'X-Forwarded-For: 127.0.0.1; Another: aaa'
users-list-stringSTRING--users-listList of users to check during the users enumeration from the Login Error Messages. Examples: 'a1', 'a1,a2,a3'
cache-time-to-liveSTRING--cache-ttlThe cache time to live in seconds. Default: 600
connection-timeoutSTRING--connect-timeoutThe connection timeout in seconds. Default: 30
disable-tls-checskBOOLEAN--disable-tls-checksDisables SSL/TLS certificate verification, and downgrade to TLS1.0+ (requires cURL 7.66 for the latter)
themes-list-stringSTRING--themes-listList of themes to enumerate. Examples: 'a1', 'a1,a2,a3'
themes-version-allBOOLEAN--themes-version-allCheck all the themes version locations according to the choosen mode (--detection-mode, --themes-detection and --themes-version-detection)
config-backups-listFILE--config-backups-listList of config backups' filenames to use'
plugins-list-stringSTRING--plugins-listList of plugins to enumerate. Examples: 'a1', 'a1,a2,a3'
plugins-version-allSTRING--plugins-version-allCheck all the plugins version locations according to the choosen mode (--detection-mode, --plugins-detection and --plugins-version-detection)
timthumbs-detectionSTRING--timthumbs-detectionUse the supplied mode to enumerate Timthumbs, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
db-exports-detectionSTRING--db-exports-detectionUse the supplied mode to enumerate DB Exports, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
ignore-main-redirectBOOLEAN--ignore-main-redirectIgnore the main redirect (if any) and scan the target url
main-theme-detectionSTRING--main-theme-detectionUse the supplied mode for the Main theme detection, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
wp-version-detectionSTRING--wp-version-detectionUse the supplied mode for the WordPress version detection, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
exclude-content-basedSTRING--exclude-content-basedExclude all responses matching the Regexp (case insensitive) during parts of the enumeration. Both the headers and body are checked. Regexp delimiters are not required.
multicall-max-passwordsSTRING--multicall-max-passwordsMaximum number of passwords to send by request with XMLRPC multicall. Default: 500
config-backups-detectionSTRING--config-backups-detectionUse the supplied mode to enumerate Config Backups, instead of the global (--detection-mode) mode. Available choices: mixed, passive, aggressive
themes-version-detectionSTRING--themes-version-detectionUse the supplied mode to check themes versions instead of the --detection-mode or --themes-detection modes. Available choices: mixed, passive, aggressive
file-to-read-write-cokiesFILE--cookie-jarFile to read and write cookies
plugins-version-detectionSTRING--plugins-version-detectionUse the supplied mode to check plugins versions. Default: mixed. Available choices: mixed, passive, aggressive
interesting-findings-detectionSTRING--interesting-findings-detectionUse the supplied mode for the interesting findings detection. Available choices: mixed, passive, aggressive

example

Run wpscan

wpscan · command
# enumerate vulnerable plugins/themes and users on a WordPress sitewpscan --url https://example.com --enumerate vp,vt,u --format json --no-update
sample output
[+] URL: https://example.com/[+] Started: Wed Jul 15 12:00:00 2026[+] Interesting Finding(s): | WordPress version 6.4.2 identified[+] Enumerating Vulnerable Plugins | Name: akismet - v5.3[+] Enumerating Users | id: 1 | login: admin[+] Finished: https://example.com/

guidance

Choosing wpscan

Use when the target is confirmed WordPress and you want plugin, theme, user, and vuln coverage in one pass. For many WordPress URLs use wpscan-loop. For other stacks use nuclei.

wpscan-loop

Same scanner over a file of URLs. Prefer it when you have many WordPress sites instead of one --url.

nuclei

Template scanner across any stack. Broader coverage; not WordPress-specialized like wpscan.

faq

wpscan questions

Pass --url https://example.com and optionally --enumerate vp,vt,u. On Trickest set the url and enumerate inputs on the wpscan node.

Run wpscan yourself

A blog URL feeds wpscan, which enumerates plugins, themes, and users, checks them against the vulnerability database, and writes the findings as a queryable output.

Facts on this page come from the live Trickest tool library.