
Generiert eine selbstübermittelnde HTML-Trigger-Seite, die eine reflektierte HTML-Injection im WordPress-Login (CVE-2026-64638) ausnutzt, um ein benutzerdefiniertes Banner anzuzeigen – für autorisierte Sicherheitstests.
Ein einzigartiger, abhängigkeitsfreier PoC-Generator für die reflektierte
HTML-Injection CVE-2026-64638 in WordPress auf wp-login.php
(strip_tags() vs. KSES-Parser-Differenz). Er erzeugt eine sich selbst
absendende Trigger-Seite: Wenn das Opfer die Datei öffnet, sendet die Seite
still den Injection-Payload per POST und das Opfer landet direkt auf der
Ziel-Login-Seite mit einem gerenderten Banner — keine Interaktion, kein
JavaScript auf der Zielseite.
Nur für autorisierte Sicherheitstests. Verwenden Sie dies nur gegen Systeme, die Ihnen gehören oder für die Sie ausdrücklich autorisiert sind.
| Versionen | Status |
|---|
| 6.4.0 – 7.0.2 | Verwundbar — funktioniert sofort |
| 5.8 – 6.3 | Bedingt — erfordert ein Plugin, das login_errors mit erlaubtem style durch wp_kses() leitet |
| 4.7 – 5.7 | Nicht ausnutzbar (Benutzername wird nicht reflektiert) |
| 6.4.9 / 6.5.9 / 6.6.6 / 6.7.6+ / 6.8.7 / 6.9.6 / 7.0.3+ | Gepatcht (esc_html) |
python3 banner_poc.py \
--out trigger.html \
--target http://192.0.2.10/wp-login.php \
--msg "Scheduled System Maintenance"
# Unterverzeichnis + versteckter Login-Pfad + Untertitel
python3 banner_poc.py \
--out trigger.html \
--target http://10.0.0.5:8080/blog/my-secret-login \
--msg "Please sign in again" --sub "Session expired"
Hosten Sie trigger.html an einem beliebigen Ort. Wenn das Opfer sie öffnet,
wird es mit gerendertem Banner zur Ziel-Login-Seite weitergeleitet. Der Sprung
ist still: kein sichtbarer Zwischeninhalt, der Hintergrund entspricht dem
WordPress-Login-Bildschirm, die Landung erfolgt in ~0,5 s.
| Flag | Beschreibung |
|---|---|
--out | Ausgabe-HTML-Datei (erforderlich) |
--target | Vollständige Login-Seiten-URL — einschließlich Unterverzeichnis-/versteckter Login-Pfade (erforderlich) |
--msg | Banner-Text (Standard: Scheduled System Maintenance) |
--sub | Optionale Untertitelzeile |
wp-login.php reflektiert einen Benutzernamen eines fehlgeschlagenen Logins
in die Fehlermeldung. Verwundbare Versionen bereinigen ihn mit PHP
strip_tags(), das alles durchlässt, wo auf < ein Leerzeichen folgt.< div style="..."> als echtes Element an.< /strong> (Schrägstrich mit vorangestelltem Leerzeichen) übersteht
ebenfalls strip_tags() und wird zu einem echten schließenden Tag
umgebaut, sodass der Payload das <strong> der Vorlage (ein HTML5-aktives
Formatierungselement) als erstes Token schließen und die exakte
DOM-Kontrolle behalten kann.div der Größe
Null verschluckt den Endtext der Vorlage („… ist auf dieser Website nicht
registriert …“).class-freie Inline-Stile, die
safecss_filter_attr() überstehen. Auf 6.3+ / 6.4+ rendert
position:fixed ein Vollbild-Overlay; auf 5.8–6.2 werden diese
Eigenschaften entfernt und derselbe Payload degradiert sich selbst zu einem
roten Banner im Seitenfluss.Reines HTML/CSS — auf dem Ziel wird kein JavaScript ausgeführt.
WAF-Regeln, die auf <script> oder Event-Handler abzielen, greifen nicht.
Dieses Tool wird für defensive Forschung und autorisierte Penetrationstests veröffentlicht. Der Autor ist nicht für Missbrauch verantwortlich.