콘텐츠로 이동

WPProbe

WPProbe is a specialized WordPress enumeration and vulnerability assessment tool designed for authorized penetration testers. It performs deep reconnaissance on WordPress installations by identifying plugins, themes, users, and known vulnerabilities. WPProbe combines multiple detection techniques to maximize accuracy and provides actionable vulnerability information.

Key features include:

  • Plugin and theme enumeration (active and inactive)
  • Version detection and vulnerability correlation
  • User account enumeration
  • WordPress core version identification
  • Known CVE matching
  • Automated exploitation recommendations
git clone https://github.com/mazenhatem/wpprobe.git
cd wpprobe
pip install -r requirements.txt
python wpprobe.py --help
pip install wpprobe
wpprobe --help
# Clone repository
git clone https://github.com/mazenhatem/wpprobe.git
cd wpprobe

# Install Python 3.7+
python3 --version

# Install dependencies
pip3 install -r requirements.txt

# Run the tool
python3 wpprobe.py
docker pull wpprobe
docker run -it wpprobe --help
apt update && apt install wpprobe -y
CommandDescription
wpprobe -u <url>Scan WordPress site for plugins/themes
wpprobe -u <url> -e pluginsEnumerate only plugins
wpprobe -u <url> -e themesEnumerate only themes
wpprobe -u <url> -e usersEnumerate WordPress users
wpprobe -u <url> -e allFull enumeration (plugins, themes, users)
wpprobe -u <url> --update-dbUpdate vulnerability database
wpprobe -u <url> -o <file>Save results to JSON file
wpprobe -u <url> -vVerbose output with details
wpprobe -u https://example.com

Performs complete enumeration including WordPress version, plugins, themes, and users. Automatically checks for known vulnerabilities in detected components.

wpprobe -u https://example.com -e plugins -v

Focuses on identifying installed plugins and their versions. Useful when you’ve already identified WordPress and want detailed plugin information.

wpprobe -u https://example.com -e themes

Identifies the active theme and any other installed themes, including version information and known vulnerabilities.

wpprobe -u https://example.com -e users -v

Discovers WordPress user accounts and usernames. Useful for password spray attacks or targeted phishing campaigns in authorized assessments.

wpprobe -u https://example.com -o results.json -v

Generates detailed enumeration results in JSON format for further analysis or integration with other tools.

wpprobe --update-db
wpprobe -u https://example.com -o results.json

Updates the tool’s vulnerability database with latest CVEs before scanning to ensure detection of recent vulnerabilities.

#!/bin/bash
# Create list of target WordPress sites
cat targets.txt
# https://wordpress1.example.com
# https://wordpress2.example.com
# https://internal-blog.local

# Scan all targets
while read target; do
  echo "Scanning $target..."
  wpprobe -u $target -o ${target//\//_}_results.json
  sleep 2
done < targets.txt

# Generate summary report
find . -name "*_results.json" -exec jq '.target, .plugins' {} \;
# Scan and get detailed plugin information
wpprobe -u https://example.com -e plugins -v -o plugins.json

# Extract vulnerable plugins
cat plugins.json | jq '.plugins[] | select(.vulnerabilities | length > 0)'

# Count vulnerabilities by plugin
cat plugins.json | jq '.plugins[] | {name: .name, vuln_count: (.vulnerabilities | length)}' | sort_by(.vuln_count)
# Comprehensive scan with detailed output
wpprobe -u https://example.com -e all -v -o full_scan.json

# Extract critical vulnerabilities
cat full_scan.json | jq '.plugins[] | select(.vulnerabilities[] | select(.severity == "critical"))'

# Count issues by severity
cat full_scan.json | jq '[.plugins[].vulnerabilities[].severity] | group_by(.) | map({severity: .[0], count: length})'
# Use WPProbe for initial enumeration
wpprobe -u https://example.com -o initial_enum.json

# Identify critical vulnerabilities
cat initial_enum.json | jq '.plugins[] | select(.vulnerabilities[].severity == "critical") | .name'

# Run WPScan for deep dive on critical plugins
wpscan --url https://example.com --api-token YOUR_TOKEN

WPProbe uses multiple techniques to detect plugins:

TechniqueReliabilitySpeed
wp-content/plugins directory listingHighFast
Known plugin file pathsHighFast
JavaScript/CSS file URLsHighFast
README.txt in plugin directoriesHighFast
wp-admin assetsMediumFast
HTML commentsLowFast
$ wpprobe -u https://example.com -e plugins -v

[+] WordPress detected: version 5.9.2
[+] Plugins enumerated: 12

Plugin: Contact Form 7
  - Version: 5.5.2
  - Status: Active
  - Vulnerabilities: 2
    - CVE-2020-12447 (Medium): Local File Inclusion

Plugin: WooCommerce
  - Version: 6.1.0
  - Status: Active
  - Vulnerabilities: 3
    - CVE-2021-12741 (High): SQL Injection

Plugin: Yoast SEO
  - Version: 18.0
  - Status: Active
  - Vulnerabilities: 0
# Update vulnerability database regularly
wpprobe --update-db

# Database contains:
# - WordPress core CVEs
# - Plugin CVEs
# - Theme CVEs
# - CVSS scores
# - Exploit availability
SeverityCVSS ScoreImpact
Critical9.0-10.0Immediate exploitation risk
High7.0-8.9Significant exploitation risk
Medium4.0-6.9Moderate exploitation risk
Low0.1-3.9Minor exploitation risk
# Get all critical and high severity issues
wpprobe -u https://example.com -o scan.json
cat scan.json | jq '.plugins[] | select(.vulnerabilities[].severity >= "high")'

# Generate remediation list
cat scan.json | jq '.plugins[] | select(.vulnerabilities | length > 0) | {name: .name, version: .version, vuln_count: (.vulnerabilities | length)}'
# Enumerate all WordPress users
wpprobe -u https://example.com -e users -v

# Output example:
# [+] Users enumerated: 8
# - admin (ID: 1)
# - blogger (ID: 2)
# - john (ID: 3)
# - jane (ID: 4)
# WPProbe automatically tries multiple methods:
# 1. RSS feed (?feed=rss2)
# 2. Author archives (?author=1, ?author=2, etc.)
# 3. REST API (/wp-json/wp/v2/users)
# 4. Sitemap.xml parsing
# 5. Archives page HTML
# Enumerate users
wpprobe -u https://example.com -e users -o users.json

# Extract usernames
cat users.json | jq -r '.users[].username' > usernames.txt

# Use with Hydra for password spray
hydra -L usernames.txt -P passwords.txt https://example.com http-post-form \
  "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=&test_cookie=1:S=dashboard"
# Method 1: wp-includes/version.php parsing
# Method 2: wp-content/themes/twentyXXX/style.css
# Method 3: wp-admin/js/common.js
# Method 4: REST API /wp-json/

# WPProbe tries all methods automatically
wpprobe -u https://example.com -v
# Scan and check WordPress version
wpprobe -u https://example.com -o results.json

# Extract version
cat results.json | jq '.wordpress_version'

# Check against latest version
# WordPress 6.4.x is current (as of 2024)
# Versions below 6.0 are significantly outdated
# Scan through proxy (Burp Suite)
# Modify the Python script or use wrapper
python wpprobe.py -u https://example.com -x http://127.0.0.1:8080

# Specify custom User-Agent
# Edit wpprobe config or use environment variable
USER_AGENT="Mozilla/5.0 (Custom)" wpprobe -u https://example.com
# WPProbe has built-in timeouts
# For slow/distant targets, results may be incomplete
wpprobe -u https://slow-target.example.com -v

# Alternative: Increase request timeout in config
# Edit wpprobe.py or configuration file
#!/bin/bash
TARGET="https://example.com"
OUTPUT="assessment_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT

# Step 1: Initial enumeration
echo "[*] Starting WordPress assessment..."
wpprobe -u $TARGET -e all -v -o $OUTPUT/enumeration.json

# Step 2: Extract critical findings
echo "[*] Identifying critical vulnerabilities..."
cat $OUTPUT/enumeration.json | jq '.plugins[] | select(.vulnerabilities[] | select(.severity == "critical"))' > $OUTPUT/critical_vulns.json

# Step 3: Enumerate users for password spray list
echo "[*] Enumerating users..."
cat $OUTPUT/enumeration.json | jq -r '.users[].username' > $OUTPUT/usernames.txt

# Step 4: Generate report
cat > $OUTPUT/assessment_summary.txt << EOF
WordPress Assessment Report
Target: $TARGET
Date: $(date)

Critical Vulnerabilities: $(cat $OUTPUT/critical_vulns.json | wc -l)
Users Enumerated: $(wc -l < $OUTPUT/usernames.txt)
Plugins Found: $(cat $OUTPUT/enumeration.json | jq '.plugins | length')
Themes Found: $(cat $OUTPUT/enumeration.json | jq '.themes | length')
EOF

echo "[+] Assessment complete. Results in $OUTPUT/"
#!/bin/bash
# Scan and prioritize findings by exploitability

wpprobe -u https://target.com -o scan.json

# Extract exploitable vulnerabilities
echo "=== Critical, Exploitable Vulnerabilities ==="
cat scan.json | jq -r '.plugins[] | 
  select(.vulnerabilities[] | 
    select(.severity == "critical" and .exploit_available == true)
  ) | 
  "\(.name) v\(.version): \(.vulnerabilities[].cve)"'

echo ""
echo "=== High Severity Vulnerabilities ==="
cat scan.json | jq -r '.plugins[] | 
  select(.vulnerabilities[] | select(.severity == "high")) | 
  "\(.name) v\(.version): \(.vulnerabilities[].cve)"'
# Use WPProbe for quick enumeration
wpprobe -u https://example.com -e plugins -o quick_enum.json

# Use WPScan for deep vulnerability scanning
wpscan --url https://example.com --enumerate vp,u \
  --api-token YOUR_TOKEN \
  --output results.json \
  --format json
# Identify vulnerable plugin
wpprobe -u https://example.com | grep -i "vulnerable"

# Search for exploit
# Example: Contact Form 7 v5.5.2 - Local File Inclusion
searchsploit "Contact Form 7 5.5.2"

# Use in Metasploit
msfconsole
> search contact form 7
> use exploit/...
# Export enumeration data
wpprobe -u https://example.com -o data.json

# Parse and create custom assessment
python3 << 'EOF'
import json

with open('data.json') as f:
    data = json.load(f)

print("=== Plugin Risk Analysis ===")
for plugin in data['plugins']:
    vuln_count = len(plugin.get('vulnerabilities', []))
    if vuln_count > 0:
        print(f"{plugin['name']} v{plugin['version']}: {vuln_count} vulnerabilities")
EOF
# Add delays between requests
# Modify enumeration speed in configuration
wpprobe -u https://example.com --slow  # If supported

# Or use custom wrapper
for i in {1..12}; do
  curl -s "https://example.com/?author=$i" > /dev/null
  sleep 1
done
# WPProbe uses rotating user agents by default
# For additional stealth, use proxy with rotating agents
wpprobe -u https://example.com -x http://127.0.0.1:8080
# Then configure proxy to rotate user agents
  1. Authorization: Always obtain written permission before scanning
  2. Database Updates: Keep vulnerability database current before scanning
  3. Batch Operations: Document all scans with date/time stamps
  4. Escalation: Prioritize critical vulnerabilities for immediate patching
  5. Verification: Manually verify critical findings before reporting
  6. Responsible Disclosure: Follow coordinated disclosure practices
  7. Chain Analysis: Combine findings with WPScan and Metasploit for deeper assessment
  8. Documentation: Maintain detailed logs of enumeration and findings
# Test WordPress detection
curl -I https://example.com
curl https://example.com | grep -i wordpress

# If not detected as WordPress
# May not be WordPress or heavily customized
wpprobe -u https://example.com -v
# If plugins not detected
# Disable wp-content listing or use stealth mode
# Check if /wp-content/plugins/ is accessible
curl https://example.com/wp-content/plugins/

# If forbidden, enumeration is more difficult
# Rely on other detection methods (JavaScript, CSS)
# REST API may be disabled
curl https://example.com/wp-json/wp/v2/users

# Try alternative methods
curl https://example.com/?feed=rss2  # Check author info
curl https://example.com/?author=1   # Check 404 patterns
FeatureWPProbeWPScanWpseku
Plugin DetectionGoodExcellentGood
User EnumerationGoodGoodGood
Vulnerability DBGoodExcellentGood
SpeedFastSlowMedium
API Token RequiredNoYes (better)No
Setup ComplexityLowMediumLow

WPProbe is an essential tool for WordPress security assessments, enabling authorized penetration testers to quickly identify plugins, themes, users, and vulnerabilities. Combined with tools like WPScan and Metasploit, it provides comprehensive WordPress security evaluation capabilities for authorized security testing scenarios.