Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
phpmyadmin-importldi — phpMyAdmin 5.2.3 - Alta - Remota - SQLi - ImportLdi TERMINATED BY leftover | Kitploit
Strumenti/GitHubGitHub/abraxas/phpmyadmin-importldi
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingLab e Pratica
GitHubabraxas/phpmyadmin-importldi

phpmyadmin-importldi

phpMyAdmin 5.2.3 - Alta - Remota - SQLi - ImportLdi TERMINATED BY leftover

Vedi Repository
28 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - phpmyadmin-importldi

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

Write-up: https://abraxaslabs.tech/research/phpmyadmin-importldi

phpmyadmin-importldi

Classe: SQLi Portata: Remota

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

ImportLdi.php costruisce LOAD DATA con FIELDS/LINES TERMINATED BY a partire dai parametri POST ldi_terminated e ldi_new_line. Queste due stringhe vengono concatenate in SQL tra apici singoli. ldi_enclosed e ldi_escaped passano attraverso escapeString. phpMyAdmin imposta PMA_ENABLE_LDI su /import in modo che MYSQLI_OPT_LOCAL_INFILE sia attivo.

Un utente autenticato invia via POST format=ldi con un apice in ldi_terminated. Il LOAD DATA generato contiene il POST grezzo all'interno di TERMINATED BY. SQL injection sulla connessione dell'utente, non sull'utente di controllo.

IDnessuna CVE al momento
ClasseSQLi
PortataRemota (login autenticato tramite cookie; importazione tabella, formato ldi)
CWECWE-89
CVSSMedia: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
ProdottophpMyAdmin
Affetto5.2.3 tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Authlogin autenticato tramite cookie. Importazione tabella, formato ldi
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Un utente phpMyAdmin autenticato che può aprire l'importazione di una tabella può iniettare SQL in LOAD DATA ... TERMINATED BY sulla propria connessione MySQL.

PrivilegioMetodo / sinkRicognizione / integrità / disponibilitàProvato in lab o dedotto
Rompere il letterale FIELDS TERMINATED BYPOST index.php?route=/import format=ldi ldi_terminated con un apiceIntegrità dell'istruzione costruita da PMAProvato in lab. Riquadro SQL HTML: TERMINATED BY '',PMA-IMPORTLDI-WITNESS'
Mantenere ENCLOSED BY in-bandStesso POST, apice in ldi_enclosedControllo negativoProvato in lab. ENCLOSED BY è sottoposto a escape
SQL aggiuntivo sulla connessione dell'utente (INTO OUTFILE / stacked se consentito)Stesso sink una volta chiusa la stringaIntegrità della connessione dell'utenteDedotto. Il lab si ferma al delimitatore rotto. Il valore predefinito di mysqli::query è a istruzione singola
Lettura/scrittura di file lato MySQLStesso LOAD DATA se l'account dispone di FILE o LOCAL INFILE verso il web serverIntegrità dei file che mysqld può toccareDedotto. Non concesso qui. Non rivendicato

Esclusi su questo lab: accesso non autenticato, utente di controllo / pmadb, LFI tramite include a livello di OS e lettura/scrittura vincolata a FILE. L'utente autenticato dispone già di un riquadro SQL; questo residuo è il delimitatore non sottoposto a escape all'interno di un'istruzione che PMA costruisce per lui.

Stesso pin: residuo WebAuthn CustomServer.

Come l'ho trovato

Ho fissato phpMyAdmin RELEASE_5_2_3. I plugin di importazione che costruiscono LOAD DATA a mano sono un audit sul quoting. Due dei quattro campi delimitatore erano sottoposti a escape. Due no:

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

ldi_enclosed / ldi_escaped chiamano $dbi->escapeString. Common.php imposta PMA_ENABLE_LDI su /import + format=ldi. Route GET|POST /import e GET|POST /table/import.

Vicoli ciechi già registrati: dichiarare LFI senza un grant FILE; considerare la casella SQL come il finding (ciò che resta è il delimitatore non escapato che PMA concatena); dichiarare control-user / pmadb; una reverse shell. Teatro.

Lab

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

Target solo http://127.0.0.1:19290. Immagini phpmyadmin:5.2.3 e mysql:8.0. Progetto Compose phpmyadmin-importldi. Lo stack viene smontato dopo l'esecuzione.

Login tramite cookie. POST /import con format=ldi e una virgoletta in ldi_terminated. Emesso LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'. La stessa virgoletta in ldi_enclosedmemorizzata comeENCLOSED BYcon escape. Il codice sorgente fissato sull'immagine 5.2.3 contiene ancora'.$ldi_terminated.'e$dbi->escapeString($ldi_enclosed)`.

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

La correzione

escapeString su ldi_terminated e ldi_new_line, come per enclosed ed escaped. Cast a int di skip_queries.

Riferimenti

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

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo per laboratorio loopback. Nessuna garanzia.

Scarica lo strumento