wpscanteam/wpscan · error · WPScan::Error::NotWordPress
The remote website is up, but does not seem to be running Wo
Error message
The remote website is up, but does not seem to be running WordPress.
What it means
Raised by Core#check_wordpress_state (app/controllers/core.rb:233) when the target responds normally but shows no WordPress fingerprints under the configured detection mode (passive = homepage markers; aggressive = additional requests). Core#before_scan rescues it once, injects anti-bot cookies via target.maybe_add_cookies and re-checks; it still re-raises if the site does not look like WordPress. --force bypasses the check entirely.
Source
Thrown at app/controllers/core.rb:233
# @return [ Boolean ] Whether the DB update is currently in progress
def updating_db?
@updating_db
end
# Raises errors if the target is hosted on wordpress.com or is not running WordPress.
# Also checks if the homepage_url is still the install URL.
def check_wordpress_state
raise Error::WordPressHosted if target.wordpress_hosted?
if %r{/wp-admin/install.php$}i.match?(Addressable::URI.parse(target.homepage_url).path)
output('not_fully_configured', url: target.homepage_url)
exit(WPScan::ExitCode::VULNERABLE)
end
raise Error::NotWordPress unless target.wordpress?(ParsedCli.detection_mode) || ParsedCli.force
end
# Loads the related server module into the target and includes it on WpItem
# (needed to check if directory listing is enabled etc.).
#
# @return [ Symbol ] The server module loaded
def load_server_module
server = target.server || :Apache # auto-detect
case ParsedCli.server
when :apache
server = :Apache
when :iis
server = :IIS
when :nginx
server = :Nginx
end
View on GitHub (pinned to 62c9cef471)
Solutions
- Open the site in a browser and confirm it is WordPress; if the blog lives under a path such as /blog, point --url at that path
- Re-run with --detection-mode aggressive so more fingerprints are checked
- If you are certain it is WordPress and accept the risk, add --force
- If wp-content was renamed, supply --wp-content-dir to help detection
Example fix
# before wpscan --url http://example.com # => The remote website is up, but does not seem to be running WordPress. # after wpscan --url http://example.com/blog --detection-mode aggressive # or, when certain it is WP: wpscan --url http://example.com --force
Defensive patterns
Strategy: validation
Validate before calling
# Quick WordPress fingerprint before committing to a scan body = Typhoeus.get(url, followlocation: true).body wp = body.match?(/wp-content|wp-includes|name="generator" content="WordPress/i) puts 'not obviously WordPress — consider aggressive mode or --force' unless wp
Try / catch
begin scan.run rescue WPScan::Error::NotWordPress retry with '--detection-mode aggressive' # decide on --force only after manual confirmation end
Prevention
- Point --url at the actual WP install path, not a proxy or landing site
- Use --detection-mode aggressive for customized or hardened sites
- Reserve --force for targets manually confirmed to be WordPress
- Remember WPScan already retries once with anti-bot cookies before failing
When it happens
Trigger: `wpscan --url http://target` against a non-WordPress site (static site, other CMS), or a WordPress site whose markers are hidden — renamed wp-content, no generator meta, no wp-login references, WAF stripping fingerprints — with passive detection mode and no --force, so target.wordpress?(ParsedCli.detection_mode) is false both before and after the cookie retry.
Common situations: Wrong --url (marketing site in front of the WP install at /blog); obfuscation plugins (Hide My WP) removing markers; heavily customized themes with no default WP asset paths; targets genuinely not running WordPress.
AI-assisted analysis of wpscanteam/wpscan@62c9cef471 (2026-08-21).
Data as JSON: /api/errors/448a7cba4a78d98c.
Report an issue: GitHub.