Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
phpmyadmin-importldi — phpMyAdmin 5.2.3 – Hoch – Remote – SQLi – ImportLdi TERMINATED BY leftover | Kitploit
Tools/GitHubGitHub/abraxas/phpmyadmin-importldi
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsLabs & Praxis
GitHubabraxas/phpmyadmin-importldi

phpmyadmin-importldi

phpMyAdmin 5.2.3 – Hoch – Remote – SQLi – ImportLdi TERMINATED BY leftover

Repository anzeigen
vor 4 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Abraxas Labs - phpmyadmin-importldi

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-importldi

phpmyadmin-importldi

Klasse: SQLi Reichweite: Remote

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

ImportLdi.php baut LOAD DATA mit FIELDS/LINES TERMINATED BY aus den POST-Parametern ldi_terminated und ldi_new_line. Diese beiden Strings werden in einfach-quotiertes SQL konkateniert. ldi_enclosed und ldi_escaped durchlaufen escapeString. phpMyAdmin setzt PMA_ENABLE_LDI auf /import, wodurch MYSQLI_OPT_LOCAL_INFILE aktiviert wird.

Ein angemeldeter Benutzer sendet per POST format=ldi mit einem Anführungszeichen in ldi_terminated. Das ausgegebene LOAD DATA enthält den rohen POST-Inhalt innerhalb von TERMINATED BY. SQL-Injection in die Benutzerverbindung, nicht in den Control-User.

IDnoch keine CVE
KlasseSQLi
ReichweiteRemote (authentifizierter Cookie-Login; Tabellenimport, Format ldi)
CWECWE-89
CVSSMedium: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
ProduktphpMyAdmin
Betroffen5.2.3 Tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Authauthentifizierter Cookie-Login. Tabellenimport, Format ldi
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Ein angemeldeter phpMyAdmin-Benutzer, der den Tabellenimport öffnen kann, kann SQL in LOAD DATA ... TERMINATED BY auf seiner MySQL-Verbindung injizieren.

PrivilegMethode / SinkRecon / Integrität / VerfügbarkeitIm Lab nachgewiesen oder abgeleitet
Das Literal FIELDS TERMINATED BY aufbrechenPOST index.php?route=/import format=ldi ldi_terminated mit einem AnführungszeichenIntegrität der von PMA erzeugten AnweisungIm Lab nachgewiesen. HTML-SQL-Box: TERMINATED BY '',PMA-IMPORTLDI-WITNESS'
ENCLOSED BY in-band haltenDerselbe POST, Anführungszeichen in ldi_enclosedNegativkontrolleIm Lab nachgewiesen. ENCLOSED BY wird escaped
Zusätzliches SQL auf der Benutzerverbindung (INTO OUTFILE / stacked falls erlaubt)Derselbe Sink, sobald der String geschlossen istIntegrität der BenutzerverbindungAbgeleitet. Das Lab stoppt beim aufgebrochenen Delimiter. Standard-mysqli::query ist single-statement
Datei-Lesen/-Schreiben auf MySQL-SeiteDasselbe LOAD DATA, falls das Konto FILE oder LOCAL INFILE zum Webserver hatIntegrität von Dateien, die mysqld berühren kannAbgeleitet. Hier nicht gewährt. Nicht beansprucht

In diesem Lab ausgeschlossen: unauthentifizierter Zugriff, Control-User / pmadb, OS-include-LFI und FILE-gesteuertes Lesen/Schreiben. Der angemeldete Benutzer hat bereits eine SQL-Box; dieser Rest ist der nicht escaped Delimiter innerhalb einer Anweisung, die PMA für ihn baut.

Gleicher Pin: WebAuthn CustomServer leftover.

Wie ich es gefunden habe

Ich habe phpMyAdmin RELEASE_5_2_3 gepinnt. Import-Plugins, die LOAD DATA von Hand bauen, sind ein Quoting-Audit. Zwei von vier Delimiter-Feldern waren escaped. Zwei nicht:

$sql .= ' FIELDS TERMINATED BY \'' . $ldi_terminated . '\'';
...
$sql .= ' LINES TERMINATED BY \'' . $ldi_new_line . '\'';

ldi_enclosed / ldi_escaped rufen $dbi->escapeString auf. Common.php setzt PMA_ENABLE_LDI auf /import + format=ldi. Routen GET|POST /import und GET|POST /table/import.

Bereits dokumentierte Irrwege: LFI ohne FILE-Grant behaupten; die SQL-Box als den Fund behandeln (der Rest ist der nicht escaped Delimiter, den PMA konkateniert); Control-User / pmadb behaupten; eine Reverse Shell. Theater.

Lab

python3 phpmyadmin-importldi-Abraxas-Labs.py
# or: cd lab && ./run.sh

Ziel nur http://127.0.0.1:19290. Images phpmyadmin:5.2.3 und mysql:8.0. Compose-Projekt phpmyadmin-importldi. Der Stack wird nach dem Lauf abgebaut.

Cookie-Login. POST /import mit format=ldi und einem Anführungszeichen in ldi_terminated. Ausgegebenes LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'. Dasselbe Anführungszeichen in ldi_enclosedwird als escapedENCLOSED BYgespeichert. Der Pin-Quellcode auf dem 5.2.3-Image enthält weiterhin'.$ldi_terminated.'und$dbi->escapeString($ldi_enclosed)`.

SUCCESS phpmyadmin-importldi pin=RELEASE_5_2_3 how=live TERMINATED-BY-raw ENCLOSED-escaped PMA-IMPORTLDI-WITNESS

Der Fix

escapeString auf ldi_terminated und ldi_new_line, genau wie bei enclosed und escaped. Int-Cast für skip_queries.

Referenzen

  • github.com/phpmyadmin/phpmyadmin Tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/Plugins/Import/ImportLdi.php
  • Gleicher Pin: PMA-5.2.3-WebAuthn-2FA
  • CWE-89

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen