Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
phpmyadmin-importldi — phpMyAdmin 5.2.3 - Alta - Remoto - SQLi - ImportLdi TERMINATED BY leftover | Kitploit
Ferramentas/GitHubGitHub/abraxas/phpmyadmin-importldi
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoLabs e Prática
GitHubabraxas/phpmyadmin-importldi

phpmyadmin-importldi

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

Ver Repositório
há 4 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Abraxas Labs - phpmyadmin-importldi

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

phpmyadmin-importldi

Classe: SQLi Alcance: Remoto

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

ImportLdi.php constrói LOAD DATA com FIELDS/LINES TERMINATED BY a partir dos POST ldi_terminated e ldi_new_line. Essas duas strings são concatenadas em SQL entre aspas simples. ldi_enclosed e ldi_escaped passam por escapeString. O phpMyAdmin define PMA_ENABLE_LDI em /import para que MYSQLI_OPT_LOCAL_INFILE fique ativado.

Um usuário autenticado envia via POST format=ldi com uma aspa em ldi_terminated. O LOAD DATA emitido contém o POST bruto dentro de TERMINATED BY. Injeção de SQL na conexão do usuário, não na conexão de controle.

IDainda sem CVE
ClasseSQLi
AlcanceRemoto (login autenticado por cookie; importação de tabela, formato ldi)
CWECWE-89
CVSSMédio: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
ProdutophpMyAdmin
Afetado5.2.3 tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Autenticaçãologin autenticado por cookie. Importação de tabela, formato ldi
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1

O que um atacante pode fazer

Um usuário autenticado no phpMyAdmin que consegue abrir a importação de tabela pode injetar SQL em LOAD DATA ... TERMINATED BY na conexão MySQL dele.

PrivilégioMétodo / sinkReconhecimento / integridade / disponibilidadeComprovado em lab ou inferido
Quebrar o literal FIELDS TERMINATED BYPOST index.php?route=/import format=ldi ldi_terminated com uma aspaIntegridade da instrução que o PMA constróiComprovado em lab. Caixa SQL HTML: TERMINATED BY '',PMA-IMPORTLDI-WITNESS'
Manter ENCLOSED BY in-bandMesmo POST, aspa em ldi_enclosedControle negativoComprovado em lab. ENCLOSED BY é escapado
SQL extra na conexão do usuário (INTO OUTFILE / empilhado se permitido)Mesmo sink assim que a string é fechadaIntegridade da conexão do usuárioInferido. O lab para no delimitador quebrado. O padrão mysqli::query é de instrução única
Leitura/escrita de arquivos no lado do MySQLMesmo LOAD DATA se a conta tiver FILE ou LOCAL INFILE para o servidor webIntegridade dos arquivos que o mysqld pode tocarInferido. Não concedido aqui. Não alegado

Descartado neste lab: acesso não autenticado, usuário de controle / pmadb, LFI via include do SO e leitura/escrita condicionada a FILE. O usuário autenticado já tem uma caixa SQL; esse resquício é o delimitador não escapado dentro de uma instrução que o PMA constrói para ele.

Mesmo pin: WebAuthn CustomServer leftover.

Como eu encontrei

Fixe no phpMyAdmin RELEASE_5_2_3. Plugins de importação que constroem LOAD DATA manualmente são uma auditoria de aspas. Dois dos quatro campos de delimitador eram escapados. Dois não eram:

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

ldi_enclosed / ldi_escaped chamam $dbi->escapeString. Common.php define PMA_ENABLE_LDI em /import + format=ldi. Rotas GET|POST /import e GET|POST /table/import.

Caminhos errados já registrados: alegar LFI sem concessão de FILE; tratar a caixa SQL como a descoberta (o resquício é o delimitador não escapado que o PMA concatena); alegar usuário de controle / pmadb; um reverse shell. Teatro.

Lab

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

Alvo apenas http://127.0.0.1:19290. Imagens phpmyadmin:5.2.3 e mysql:8.0. Projeto Compose phpmyadmin-importldi. A stack é desmontada após a execução.

Login por cookie. POST /import com format=ldi e uma aspa em ldi_terminated. Emitido LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'. A mesma aspa em ldi_enclosedarmazenada comoENCLOSED BYescapado. O código-fonte fixado na imagem 5.2.3 ainda tem'.$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

A correção

escapeString em ldi_terminated e ldi_new_line, da mesma forma que em enclosed e escaped. Cast para int em skip_queries.

Referências

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

Licença

GNU Affero GPL v3.0. Veja LICENSE. Apenas lab em loopback. Sem garantia.

Baixar ferramenta