wpscan
is a tool that is backed by an on-line, real-time vulnerability database of CVEs that is specific to WordPress that is hosted by WPVulnDB. The tool scans WordPress sites to identify ones running known vulnerable versions. In order to get access to the up-to-date vulnerability database, create an account at: https://wpscan.com/. Then, in your user profile, scroll down to find an API token for your account. Copy the token for future steps in the lab.
To test the tool out, we will setup two different WordPress sites and then use the tool to scan each for vulnerabilities.
We will start by setting up an old version of WordPress. Visit Compute Engine and create a VM called wordpress46
in us-west1-b
running a recent LTS version of Ubuntu
for AMD64. Enable HTTP traffic to it. Note that this can be performed within Cloud Shell via:
gcloud compute instances create wordpress46 \
--machine-type e2-micro --zone us-west1-b \
--image-project ubuntu-os-cloud --image-family ubuntu-2004-lts \
--tags=http-server
Make a note of both its internal and external IP addresses.
Then, ssh
into the instance when it comes up and install docker
and docker-compose
. Next, create a directory called wp46
and change into it:
sudo apt update -y
sudo apt install docker.io docker-compose -y
mkdir wp46
cd wp46
We will be running WordPress using old versions of the official WordPress Docker container (version 4.6 copied from wordpress:4.6
) and the official MySQL Docker container (version 5.7 copied from mysql:5.7
). Containers are effectively virtual operating system images that can be executed together on a single real operating system. When executing multiple containers on a single machine, docker-compose
is sometimes used to bring the collection up and down and to configure its operating parameters including environment variables and virtual networks.
Within the wp46
directory, create a file called docker-compose.yaml
using an editor (nano
, vim
) with the following inside of it.
version: '3'
services:
# Database
db:
image: wuchangfeng/mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- wpsite
# Wordpress
wordpress:
depends_on:
- db
image: wuchangfeng/wordpress-vuln
restart: always
ports:
- '80:80'
volumes: ['./:/var/www/html']
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
networks:
- wpsite
networks:
wpsite:
volumes:
db_data:
The file specifies the credentials for the MySQL database as environment variables passed to the MySQL container. The MySQL container will automatically create the database and configure access to it. The file also specifies the database configuration as environment variables passed to the WordPress container. The WordPress container will use this to connect to the MySQL container to store and retrieve its information.
Invoke docker-compose
to bring the containers up.
sudo docker-compose up -d
When the containers are up and running, go to the Compute Engine console and click on the external IP
address of the VM to bring up the WordPress installation screen. Configure English
, name the site your OdinID
, and fill in a Username
and Password
that you will remember, then "Install WordPress
".
Log into the WordPress site, click on the upper-left home icon.
We will now set up an up-to-date deployment of WordPress. Visit Marketplace on Google Cloud's console. Within "Search", enter in WordPress and search. A large number of solutions can be deployed. Using the filters, select "Virtual machines" and "Free" to identify installations that run on VMs and do not have licensing fees to use.
Select any one of these deployments to run, but avoid high-availability ones that use a large number of servers. Then, "Launch
" the deployment and set its zone to us-west1-b
. After the launch has completed, configure your deployment by using any credentials given to log into the WordPress admin site.
After logging in and configuring the site, click on the "Home" icon to visit the default landing page for the site.
Go to Compute Engine and bring up your Kali VM. We will now use a Dockerized version of wpscan
to scan our two WordPress servers for vulnerabilities. Note that you must scan the WordPress sites using their internal IP
addresses to avoid being flagged for abuse.
As part of running wpscan
via its Docker container image, we will supply our API token. An example of a command to run the wpscan
container against a site is below. Log into your Kali VM and run the command against each WordPress server.
sudo docker run -it --rm wpscanteam/wpscan --url \
http://10.x.y.z --api-token <YOUR_API_TOKEN> --enumerate
If you don't know your API token, refer back to the first step of the codelab. The tool should find a large number of CVEs. Scroll up to examine the CVEs found. Find the total number found towards the top.
Note that if you get a docker
daemon error, you will need to restart docker
on the Kali VM.
sudo systemctl start docker
For the Marketplace deployment, show the output of a (hopefully) clean run of wpscan
on it.
Go to Deployment Manager in the Google Cloud Console, click on "Deployments" and delete your WordPress deployment.
Then, go to Compute Engine and delete your WordPress 4.6 VM. Via Cloud Shell, you can issue the command below:
gcloud compute instances delete wordpress46 \
--zone us-west1-b
Finally, stop your Kali VM (unless you're continuing on to the next lab)