Skip to main content

WordPress Watcher is a Python wrapper for WPScan that manages scans on multiple sites and reports by email and syslog.

Project description

WPWatcher

Automating WPScan to scan and report vulnerable Wordpress sites

Features

  • Scan multiple sites with WPScan
  • Parse WPScan output and divide the results in "Alerts", "Warnings", "Informations" and eventually "Errors"
  • Handled VulnDB API limit
  • Define reporting emails addresses for every configured site individually and globally (doc)
  • Define false positives strings for every configured site individually and globally (doc)
  • Define WPScan arguments for every configured site individually and globally (doc)
  • Send scan reports to Syslog server (doc)
  • Save raw WPScan output into files
  • Log file can also lists all the findings (doc)
  • Speed up scans using several asynchronous workers
  • Parse and follow URL redirection if WPScan fails and propose to ignore main redirect
  • Scan sites continuously at defined interval and configure script as a linux service (doc)
  • Parse results differently wether WPScan format is JSON or CLI
  • Additionnal alerts depending of finding type (SQL dump, etc.) (match list)
  • Keep track of fixed issues

Prerequisites

  • WPScan (itself requires Ruby and some libraries).
  • Python 3

Install

With PyPi (stable)

python3 -m pip install 'wpwatcher' --upgrade

Installs WPWatcher without syslog output support

Manually (develop)

git clone https://github.com/tristanlatr/WPWatcher.git
cd WPWatcher
python3 -m pip install '.[syslog]' # install with syslog support

wpwatcher should be in your PATH.

Review the Wiki for more documentation.

Try it out

Simple usage
Scan 2 sites with default config.

wpwatcher --url exemple.com exemple1.com

More complete exemple
Load sites from text file , add WPScan arguments , follow redirection if WPScan fails , use 5 asynchronous workers , email custom recepients if any alerts with full WPScan output attached. If you reach your API limit, it will wait and continue 24h later.

wpwatcher --urls sites.txt \
        --wpscan_args "--force --stealthy --api-token <TOKEN>" \
        --follow_redirect \
        --workers 5 \
        --send --attach \
        --email_to collaborator1@office.ca collaborator2@office.ca \
        --api_limit_wait

WPWatcher must read a configuration file to send mail reports.
This exemple assume you have filled your config file with mail server setings.

Configuration

Select config file with --conf File path. You can specify multiple files. Will overwrites the keys with each successive file.
Default config files are ~/.wpwatcher/wpwatcher.conf , ~/wpwatcher.conf and ./wpwatcher.conf.

Create and edit a new config file from template.

wpwatcher --template_conf > ./wpwatcher.conf
vim ./wpwatcher.conf

All configuration options

Configuration exemple

Sample configuration file with full featured wp_sites entry, custom WPScan path and arguments, vuln DB api limit handling, email and syslog reporting

[wpwatcher]
wp_sites=   [ {   
                "url":"exemple.com",
                "email_to":["site_owner@domain.com"],
                "false_positive_strings":[
                    "Yoast SEO 1.2.0-11.5 - Authenticated Stored XSS",
                    "Yoast SEO <= 9.1 - Authenticated Race Condition"],
                "wpscan_args":["--stealthy"]
              },
              { "url":"exemple2.com"  }  ]
wpscan_path=/usr/local/rvm/gems/default/wrappers/wpscan
wpscan_args=[   "--format", "json",
                "--no-banner",
                "--random-user-agent", 
                "--disable-tls-checks",
                "--api-token", "YOUR_API_TOKEN" ]
api_limit_wait=Yes
send_email_report=Yes
email_to=["me@gmail.com"]
from_email=me@gmail.com
smtp_user=me@gmail.com
smtp_server=smtp.gmail.com:587
smtp_ssl=Yes
smtp_auth=Yes
smtp_pass=P@assW0rd
syslog_server=syslogserver.ca
syslog_port=514

Email reports

One report is generated per site and the reports are sent individually when finished scanning a website.

WPWatcher Report List

WPWatcher Report

Questions ?

If you have any questions, please create a new issue.

Contribute

If you like the project and think you could help with making it better, there are many ways you can do it:

  • Create new issue for new feature proposal or a bug
  • Implement existing issues
  • Help with improving the documentation
  • Spread a word about the project to your collegues, friends, blogs or any other channels
  • Any other things you could imagine
  • Any contribution would be of great help

Running tests

pytest

Authors

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wpwatcher-2.4.1.tar.gz (27.4 kB view details)

Uploaded Source

Built Distribution

wpwatcher-2.4.1-py3-none-any.whl (34.6 kB view details)

Uploaded Python 3

File details

Details for the file wpwatcher-2.4.1.tar.gz.

File metadata

  • Download URL: wpwatcher-2.4.1.tar.gz
  • Upload date:
  • Size: 27.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.5

File hashes

Hashes for wpwatcher-2.4.1.tar.gz
Algorithm Hash digest
SHA256 ecea82a74447310f65c04ca41379b5555f56ae04eb8c0e3571cbf95fd918c3a1
MD5 9b72a3a1e04c9f87e8d1cc4fc9f64793
BLAKE2b-256 49fbeb880f44673d067805b5c49514eaf47497983cad0215c42cb594a171cfc9

See more details on using hashes here.

File details

Details for the file wpwatcher-2.4.1-py3-none-any.whl.

File metadata

  • Download URL: wpwatcher-2.4.1-py3-none-any.whl
  • Upload date:
  • Size: 34.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.5

File hashes

Hashes for wpwatcher-2.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d0419ac0a9c84e7ceed2e9c95767a1223f1fdef078a555bd4802c43ee7fea168
MD5 df9387325cc58d5ff7f0f71448845516
BLAKE2b-256 e325a17aeba79eba5384f19370aceb610b5ef6ae8c12f8d96d08d92dd629daa8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page