Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
phpmyadmin-importldi — phpMyAdmin 5.2.3 - Élevé - À distance - SQLi - ImportLdi TERMINATED BY résiduel | Kitploit
Outils/GitHubGitHub/abraxas/phpmyadmin-importldi
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionLabs et Pratique
GitHubabraxas/phpmyadmin-importldi

phpmyadmin-importldi

phpMyAdmin 5.2.3 - Élevé - À distance - SQLi - ImportLdi TERMINATED BY résiduel

Voir le dépôt
il y a 3 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - phpmyadmin-importldi

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

phpmyadmin-importldi

Classe : SQLi Portée : Distante

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

ImportLdi.php construit LOAD DATA avec FIELDS/LINES TERMINATED BY à partir des POST ldi_terminated et ldi_new_line. Ces deux chaînes sont concaténées dans du SQL entre guillemets simples. ldi_enclosed et ldi_escaped passent par escapeString. phpMyAdmin active PMA_ENABLE_LDI sur /import, donc MYSQLI_OPT_LOCAL_INFILE est activé.

Un utilisateur connecté envoie en POST format=ldi avec un guillemet dans ldi_terminated. Le LOAD DATA émis contient le POST brut à l'intérieur de TERMINATED BY. Injection SQL dans la connexion de l'utilisateur, pas dans le control user.

IDpas encore de CVE
ClasseSQLi
PortéeDistante (connexion authentifiée par cookie ; import de table, format ldi)
CWECWE-89
CVSSMoyen : 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
ProduitphpMyAdmin
Affecté5.2.3 tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Authconnexion authentifiée par cookie. Import de table, format ldi
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Un utilisateur phpMyAdmin connecté qui peut ouvrir l'import de table peut injecter du SQL dans LOAD DATA ... TERMINATED BY sur sa connexion MySQL.

PrivilègeMéthode / sinkRecon / intégrité / disponibilitéProuvé en lab ou déduit
Casser le littéral FIELDS TERMINATED BYPOST index.php?route=/import format=ldi ldi_terminated avec un guillemetIntégrité de la requête construite par PMAProuvé en lab. Boîte SQL HTML : TERMINATED BY '',PMA-IMPORTLDI-WITNESS'
Garder ENCLOSED BY in-bandMême POST, guillemet dans ldi_enclosedContrôle négatifProuvé en lab. ENCLOSED BY est échappé
SQL supplémentaire sur la connexion utilisateur (INTO OUTFILE / stacked si autorisé)Même sink une fois la chaîne ferméeIntégrité de la connexion utilisateurDéduit. Le lab s'arrête au délimiteur cassé. Par défaut mysqli::query est mono-requête
Lecture/écriture de fichiers côté MySQLMême LOAD DATA si le compte dispose de FILE ou LOCAL INFILE vers le serveur webIntégrité des fichiers que mysqld peut toucherDéduit. Non accordé ici. Non revendiqué

Écarté sur ce lab : accès non authentifié, control-user / pmadb, LFI via include OS, et lecture/écriture conditionnée par FILE. L'utilisateur connecté dispose déjà d'une boîte SQL ; ce reliquat est le délimiteur non échappé à l'intérieur d'une requête que PMA construit pour lui.

Même pin : WebAuthn CustomServer leftover.

Comment je l'ai trouvé

J'ai épinglé phpMyAdmin RELEASE_5_2_3. Les plugins d'import qui construisent LOAD DATA à la main sont un audit de quoting. Deux des quatre champs de délimiteur étaient échappés. Deux ne l'étaient pas :

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

ldi_enclosed / ldi_escaped appellent $dbi->escapeString. Common.php active PMA_ENABLE_LDI sur /import + format=ldi. Routes GET|POST /import et GET|POST /table/import.

Fausses pistes déjà consignées : revendiquer un LFI sans octroi FILE ; traiter la boîte SQL comme la découverte (le reliquat est le délimiteur non échappé que PMA concatène) ; revendiquer control-user / pmadb ; un reverse shell. Du théâtre.

Lab

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

Cible uniquement http://127.0.0.1:19290. Images phpmyadmin:5.2.3 et mysql:8.0. Projet Compose phpmyadmin-importldi. La stack est démontée après l'exécution.

Connexion par cookie. POST /import avec format=ldi et un guillemet dans ldi_terminated. LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'émis. Le même guillemet dansldi_enclosedstocké commeENCLOSED BYéchappé. Le code source épinglé sur l'image 5.2.3 contient toujours'.$ldi_terminated.'et$dbi->escapeString($ldi_enclosed)`.

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

Le correctif

escapeString sur ldi_terminated et ldi_new_line, comme pour enclosed et escaped. Cast en int de skip_queries.

Références

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/Plugins/Import/ImportLdi.php
  • Même pin : PMA-5.2.3-WebAuthn-2FA
  • CWE-89

Licence

GNU Affero GPL v3.0. Voir LICENSE. Lab en loopback uniquement. Aucune garantie.

Télécharger l’outil