Server Mode enables automated, continuous vulnerability scanning of WordPress plugins with real-time notifications to Discord and Telegram. Perfect for VPS deployment and continuous security monitoring.
- ✅ Continuous Scanning - Endless scanning mode that never stops
- ✅ Cron-Based Scheduling - Schedule scans at specific times
- ✅ WordPress.org Integration - Automatically fetches plugin list
- ✅ Discord Notifications - Real-time alerts via webhooks
- ✅ Telegram Notifications - Alerts and reports via bot
- ✅ Professional Reports - Markdown reports with POC details
- ✅ Fully Configurable - Interactive wizard for easy setup
- ✅ Organized Reports - Separate folders per plugin
- ✅ Temp Cleanup - Auto-cleanup of downloaded plugins
pip install PluginHunterPluginHunter
# Select option 7: Server Mode ConfigurationThe interactive wizard will guide you through:
- Scan mode selection (continuous or cron)
- Discord webhook setup
- Telegram bot setup
- Scan targets configuration
- Directory settings
- Rate limiting
Option A: From Interactive Menu (Recommended)
PluginHunter
# Select option 8: Start Server ModeThis will:
- Check if
server_config.jsonexists - Display current configuration
- Show scan mode and notification settings
- Confirm before starting
- Start server mode with the configured settings
Option B: From Command Line
PluginHunter server --config server_config.jsonOption C: Background Mode
# Using nohup
nohup PluginHunter server --config server_config.json > server.log 2>&1 &
# Using screen
screen -S vulnhunter
PluginHunter server --config server_config.json
# Press Ctrl+A, D to detach
# Using tmux
tmux new -s vulnhunter
PluginHunter server --config server_config.json
# Press Ctrl+B, D to detachThe easiest way to configure server mode:
PluginHunter
# Select option 7The wizard will:
- Ask for scan mode (continuous or cron)
- Configure Discord notifications (optional)
- Configure Telegram notifications (optional)
- Set scan targets (WordPress.org or custom list)
- Configure directories and settings
- Test webhooks/bots before saving
- Save configuration to
server_config.json
Create server_config.json:
{
"continuous_mode": {
"enabled": true,
"delay_between_scans": 10,
"max_concurrent_scans": 1,
"restart_on_queue_empty": true
},
"cron_mode": {
"enabled": false,
"schedule_type": "daily",
"time": "02:00",
"day": "monday",
"interval_hours": 24
},
"notifications": {
"discord": {
"enabled": true,
"webhook_url": "https://discord.com/api/webhooks/YOUR_WEBHOOK",
"notify_on_start": true,
"notify_on_complete": true,
"notify_on_critical": true
},
"telegram": {
"enabled": false,
"bot_token": "YOUR_BOT_TOKEN",
"chat_id": "YOUR_CHAT_ID",
"notify_on_start": true,
"notify_on_complete": true,
"notify_on_critical": true
}
},
"wordpress_api": {
"enabled": true,
"fetch_popular": true,
"fetch_new": false,
"max_plugins": 100,
"refresh_schedule": "0 2 * * *"
},
"scan_settings": {
"deep_scan": true,
"dynamic_verification": false,
"max_plugins_per_run": 10,
"rate_limit_delay": 5
},
"directories": {
"reports": "./server_reports",
"temp": "./temp_plugins",
"cleanup_temp": true
},
"custom_targets": {
"enabled": false,
"plugin_slugs": []
}
}Perfect for VPS deployment where you want continuous monitoring:
{
"continuous_mode": {
"enabled": true,
"delay_between_scans": 10,
"max_concurrent_scans": 1,
"restart_on_queue_empty": true
}
}enabled: Enable continuous modedelay_between_scans: Seconds to wait between scansmax_concurrent_scans: Number of parallel scansrestart_on_queue_empty: Restart queue when all plugins scanned
Start continuous scanning:
# Foreground
PluginHunter server --config server_config.json
# Background with nohup
nohup PluginHunter server --config server_config.json > server.log 2>&1 &
# Using screen
screen -S vulnhunter
PluginHunter server --config server_config.json
# Press Ctrl+A, D to detach
# Using tmux
tmux new -s vulnhunter
PluginHunter server --config server_config.json
# Press Ctrl+B, D to detachFor scheduled scans at specific times:
{
"cron_mode": {
"enabled": true,
"schedule_type": "daily",
"time": "02:00"
},
"continuous_mode": {
"enabled": false
}
}Schedule Types:
-
daily: Run daily at specific time{"schedule_type": "daily", "time": "02:00"} -
weekly: Run weekly on specific day{"schedule_type": "weekly", "day": "monday", "time": "02:00"} -
hourly: Run every hour{"schedule_type": "hourly"} -
interval: Run at custom interval{"schedule_type": "interval", "interval_hours": 6}
-
Create Discord Webhook:
- Go to your Discord server
- Server Settings → Integrations → Webhooks
- Create webhook and copy URL
-
Configure:
{ "discord": { "enabled": true, "webhook_url": "https://discord.com/api/webhooks/YOUR_WEBHOOK", "notify_on_start": true, "notify_on_complete": true, "notify_on_critical": true } } -
Test:
PluginHunter # Select option 7 # Configure Discord # Test webhook before saving
Notification Types:
notify_on_start: When scan startsnotify_on_complete: When scan completesnotify_on_critical: When critical/high vulnerabilities found
-
Create Telegram Bot:
- Message @BotFather on Telegram
- Send
/newbotand follow instructions - Copy bot token
-
Get Chat ID:
- Message your bot
- Visit:
https://api.telegram.org/bot<TOKEN>/getUpdates - Find your chat ID
-
Configure:
{ "telegram": { "enabled": true, "bot_token": "YOUR_BOT_TOKEN", "chat_id": "YOUR_CHAT_ID", "notify_on_start": true, "notify_on_complete": true, "notify_on_critical": true } }
Automatically fetch and scan plugins from WordPress.org:
{
"wordpress_api": {
"enabled": true,
"fetch_popular": true,
"fetch_new": false,
"max_plugins": 100,
"refresh_schedule": "0 2 * * *"
}
}enabled: Enable WordPress.org API integrationfetch_popular: Fetch popular pluginsfetch_new: Fetch newly added pluginsmax_plugins: Maximum number of plugins to fetchrefresh_schedule: Cron expression for database refresh
Refresh Schedule Examples:
0 2 * * *- Daily at 2:00 AM0 */6 * * *- Every 6 hours0 0 * * 0- Weekly on Sunday at midnight
{
"scan_settings": {
"deep_scan": true,
"dynamic_verification": false,
"max_plugins_per_run": 10,
"rate_limit_delay": 5
}
}deep_scan: Enable comprehensive analysisdynamic_verification: Enable exploit testing (requires Docker)max_plugins_per_run: Limit plugins per scan cyclerate_limit_delay: Seconds between API requests
{
"directories": {
"reports": "./server_reports",
"temp": "./temp_plugins",
"cleanup_temp": true
}
}Report Organization:
server_reports/
├── contact-form-7/
│ ├── scan_20240227_143022.json
│ ├── scan_20240227_143022.html
│ └── scan_20240227_143022_cve.md
├── akismet/
│ ├── scan_20240227_144530.json
│ └── scan_20240227_144530.html
└── ...
Each plugin gets its own folder with timestamped reports.
Temp Directory:
- Downloaded plugins stored temporarily
- Auto-cleanup after scan (if
cleanup_temp: true) - Saves disk space
Scan specific plugins instead of WordPress.org list:
{
"custom_targets": {
"enabled": true,
"plugin_slugs": [
"contact-form-7",
"akismet",
"jetpack",
"woocommerce"
]
},
"wordpress_api": {
"enabled": false
}
}# Configure
PluginHunter
# Select option 7
# Choose continuous mode
# Enable Discord notifications
# Configure settings
# Start
PluginHunter server --config server_config.json# Configure for daily 2 AM scan
PluginHunter
# Select option 7
# Choose cron mode
# Set daily at 02:00
# Configure notifications
# Start
PluginHunter server --config server_config.json# Install
pip install PluginHunter
# Configure
PluginHunter
# Select option 7, configure all settings
# Start in background
nohup PluginHunter server --config server_config.json > server.log 2>&1 &
# Check logs
tail -f server.log
# Stop
pkill -f "PluginHunter server"{
"custom_targets": {
"enabled": true,
"plugin_slugs": ["my-plugin-1", "my-plugin-2"]
},
"continuous_mode": {
"enabled": true,
"delay_between_scans": 30
}
}PluginHunter server --config server_config.json# View logs
tail -f server.log
# Check process
ps aux | grep PluginHunter
# View reports
ls -lh server_reports/# If running in foreground
Ctrl+C
# If running in background
pkill -f "PluginHunter server"
# If using screen
screen -r vulnhunter
Ctrl+C
# If using tmux
tmux attach -t vulnhunter
Ctrl+C# Check configuration
cat server_config.json
# Validate JSON
python3 -m json.tool server_config.json
# Check permissions
ls -la server_config.json# Test Discord webhook
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"content": "Test message"}'
# Test Telegram bot
curl "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Test"Reduce concurrent scans:
{
"continuous_mode": {
"max_concurrent_scans": 1
}
}Enable temp cleanup:
{
"directories": {
"cleanup_temp": true
}
}- Start with small plugin list - Test with 10-20 plugins first
- Monitor resource usage - Check CPU/memory/disk
- Use rate limiting - Avoid overwhelming WordPress.org API
- Enable temp cleanup - Save disk space
- Regular log rotation - Prevent log files from growing too large
- Test notifications - Verify webhooks/bots before production
- Backup reports - Archive old reports periodically
- Use screen/tmux - For persistent sessions on VPS
{
"scan_settings": {
"rate_limit_delay": 10,
"max_plugins_per_run": 5
}
}{
"wordpress_api": {
"refresh_schedule": "0 */12 * * *"
}
}{
"notifications": {
"discord": {
"enabled": true,
"webhook_url": "DISCORD_WEBHOOK"
},
"telegram": {
"enabled": true,
"bot_token": "TELEGRAM_TOKEN",
"chat_id": "TELEGRAM_CHAT_ID"
}
}
}-
Protect config file - Contains sensitive tokens
chmod 600 server_config.json
-
Use environment variables - For sensitive data
export DISCORD_WEBHOOK="your_webhook" export TELEGRAM_TOKEN="your_token"
-
Rotate tokens regularly - Update webhooks/bot tokens periodically
-
Monitor access logs - Check who's accessing reports
-
Secure VPS - Use firewall, SSH keys, fail2ban
For issues or questions:
- GitHub Issues: https://github.com/letchupkt/PluginHunter/issues
- Email: letchupkt.dev@gmail.com
Author: LAKSHMIKANTHAN K (letchupkt)
License: MIT