
CVE-2026-63030, CVE-2026-60137, wp2shell-Scanner
Erkennungs- und Validierungswerkzeuge für die WordPress-Core-Exposition gegenüber wp2shell
(CVE-2026-63030 / CVE-2026-60137). Die Modi werden mit einem Flag ausgewählt, und das
Ziel ist positionsabhängig. --scan nimmt einen Fingerabdruck der Core-Version und bestätigt, dass die
REST /batch/v1-Route erreichbar ist, ohne eine Exploit-Payload zu senden; die
--check/--read/--shell/--rce/--root-prereq-Modi sind der Validierungs-PoC
für autorisierte Labornutzung.
wp2shell.py ist ein einzelnes Skript, das nur die Standardbibliothek verwendet – keine externen
Abhängigkeiten. Jeder Aufruf gibt ein ZephrSec-Banner auf stderr aus, bevor es
läuft (es bleibt von stdout fern, sodass die JSON-Ausgabe von --scan -j nicht beeinträchtigt wird).
Es ist genau ein Modusflag erforderlich; das Ziel ist positionsabhängig (eine URL für jeden
Modus oder eine Hostliste für --scan).
wp2shell.py (--scan | --check | --read | --shell | --rce | --root-prereq)
[targets ...] [-f FILE] [-j] [-t THREADS] [--prefix PREFIX]
[--delay DELAY] [--repeats REPEATS] [--preset PRESET] [--expr EXPR]
[--max-len MAX_LEN] [--user USER] [--password PASSWORD] [--cmd CMD]
[-i] [--no-cleanup] [-y] [--sleep SLEEP] [--rounds ROUNDS]
[--route {auto,rest-route,wp-json}] [--proxy PROXY] [--authorized]
[--timeout TIMEOUT]
| Flag | Was es tut |
|---|---|
--scan | Zerstörungsfreier Expositionscheck: Versions-Fingerabdruck + bestätigt, dass die REST /batch/v1-Route erreichbar ist. Es wird keine Exploit-Payload gesendet. |
--check | Bestätigt eine blinde zeitbasierte SQLi mit einer harmlosen differenziellen Sonde. |
--read | Extrahiert Daten über blinde SQLi (ein Preset oder ein roher SQL-Skalarausdruck). |
--shell | Authentifizierte RCE-Kette unter Verwendung eines geknackten/wiederhergestellten Admin-Passworts. |
--rce | Anmeldeinformationslose Pre-Auth-RCE: Erzeugt sich selbst einen Admin über die SQLi und setzt dann eine sich selbst säubernde Webshell ein. |
--root-prereq | Harmloser Shell-zu-Root-Prüfschritt; führt nur Diagnosen durch, niemals eine lokale Privilegieneskalation. |
| Flag | Gilt für | Was es tut |
|---|---|---|
-f, --file | --scan | Hosts aus einer Datei lesen (eine pro Zeile; #-Kommentare werden übersprungen). |
-j, --json | --scan | Ergebnisse als JSON auf stdout ausgeben. |
-t, --threads | --scan | Scan-Gleichzeitigkeit (Standard 10). |
--prefix | --check/--read | DB-Tabellenpräfix (Standard wp_). |
--delay | --check/--read | Eingefügte SLEEP-Sekunden für das Timing-Orakel (Standard 0,15). |
--repeats | --check/--read | Median über N Sonden pro Bit; bei verrauschten Verbindungen erhöhen (Standard 1). |
--preset | --read | Integriertes Ziel: version, database, db_user, users, siteurl (Standard users). |
--expr | --read | Roher SQL-Skalarausdruck zum Extrahieren (überschreibt --preset). |
--max-len | --read | Maximale extrahierte Zeichenfolgenlänge (Standard 128). |
--user | --shell/--root-prereq | Admin-Benutzername, mit dem angemeldet wird (Standard admin). |
--password | --shell/--root-prereq | Klartext-Admin-Passwort (knacke den Hash aus --read; für diese Modi erforderlich). |
--cmd | --shell/--rce | Auf dem Ziel auszuführender Befehl (Standard id). |
-i, --interactive | --shell/--rce | Interaktive Web-Befehlsschleife anstelle eines einzelnen Befehls. |
--no-cleanup | --shell/--rce | Das hinterlassene Plugin/Webshell bleibt bestehen (nur Labor). |
-y, --yes | --shell/--rce/--root-prereq | Überspringe die interaktive Autorisierungsaufforderung (für Automatisierung). |
--sleep | --rce | Eingefügte SLEEP-Sekunden für die Pre-Auth-SQLi-Erkennung (Standard 4). |
--rounds | --rce | Median über N Sonden für --rce-Erkennung (Standard 3). |
--route | --rce | Stapel-Routenform: auto, rest-route oder wp-json (Standard auto). |
--proxy | --rce | Leite Anfragen über einen HTTP-Proxy, z. B. Burp unter http://127.0.0.1:8080. |
--authorized | --rce | Bestätige Autorisierung für ein Nicht-Loopback---rce-Ziel (erforderlich für entfernte Hosts). |
--timeout | alle | Zeitüberschreitung pro Anfrage in Sekunden (Standard 15). |
Ausführlicher Blogbeitrag: https://blog.zsec.uk/wp2shell-code-trace-deep-dive/
nuclei -t wp2shell-exposure.yaml -u https://target
Einzelner Host, mehrere Hosts oder eine Datei.
python3 wp2shell.py --scan https://target
python3 wp2shell.py --scan host1 host2 host3
python3 wp2shell.py --scan -f hosts.txt
Optionen: -f/--file Hosts-Datei (eine pro Zeile), -j/--json JSON-Ausgabe,
-t/--threads Gleichzeitigkeit (Standard 10).
Die Modi --check/--read/--shell/--rce/--root-prereq senden echte Exploit-
Payloads. Führen Sie sie nur gegen das mitgelieferte Localhost-Labor oder andere Systeme aus, die Ihnen gehören und für die Sie ausdrücklich autorisiert sind, sie zu testen. --shell und --rce führen eine entfernte Codeausführung durch und sind für das Labor/autorisierte Ziele vorgesehen; --rce auf einem Nicht-Loopback-Host erfordert --authorized. --root-prereq verwendet dasselbe token-gesteuerte Diagnose-Plugin, um Shell-zu-Root-Voraussetzungen zu prüfen, führt jedoch keine lokale Privilegieneskalation durch.
--shell benötigt ein wiederhergestelltes/geknacktes Admin-Passwort. --rce ist die
anmeldeinformationslose Pre-Auth-Kette: Es erzeugt sich selbst einen Administrator über die SQLi (oEmbed → Changeset → reentrante parse_request) und setzt dann die Webshell ein – kein Passwort erforderlich.
--shell, --rce und --root-prereq fordern vor dem Senden einer Codeausführungs-Payload eine interaktive y/N-Autorisierung (sie brechen bei nicht interaktivem/EOF-Stdin ab). Übergeben Sie -y/--yes, um die Eingabeaufforderung für die Automatisierung gegen das Labor oder ein autorisiertes Ziel zu überspringen.
docker compose -f poc/lab/docker-compose.yml up -d
python3 wp2shell.py --check http://127.0.0.1:8080
python3 wp2shell.py --read http://127.0.0.1:8080 --expr @@version
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' --cmd id
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' -i
python3 wp2shell.py --rce http://127.0.0.1:8080 --cmd id
python3 wp2shell.py --rce http://127.0.0.1:8080 -i
python3 wp2shell.py --root-prereq http://127.0.0.1:8080 --user admin --password 'Summer2026!'
Patch-Diffs, die zur Untermauerung des PoC verwendet werden, sind unter poc/diffs/ gespeichert, mit Forschungsnotizen
in poc/RESEARCH.md. Die SQLi ist vollständig aus dem author__not_in-Fix rekonstruierbar. Die anmeldeinformationslose --rce-Kette (oEmbed → Changeset → Re-Entry → Admin-Erstellung) reproduziert die Standard-RCE gegen das mitgelieferte Labor; --shell ist der alternative Pfad über eine wiederhergestellte/geknackte Admin-Anmeldeinformation zur authentifizierten Plugin-Upload- und Befehlsausführung.