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-designer-json-sqli — phpMyAdmin 5.2.3 - Alta - Remoto - SQLi - Identificadores não sanitizados no JSON do Designer | Kitploit
Ferramentas/GitHubGitHub/abraxas/phpmyadmin-designer-json-sqli
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoSegurança de Banco de DadosLabs e Prática
GitHub
abraxas/phpmyadmin-designer-json-sqli

phpmyadmin-designer-json-sqli

phpMyAdmin 5.2.3 - Alta - Remoto - SQLi - Identificadores não sanitizados no JSON do Designer

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-designer-json-sqli

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

phpmyadmin-designer-json-sqli

Classe: SQLi Alcance: Remoto

phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). O AJAX do Designer save_setting_value faz json_encode do blob de configurações e o concatena em um UPDATE/INSERT entre aspas simples no link do usuário de controle. O nome de usuário é escapado. O JSON não. json_encode não escapa uma aspa simples.

Um usuário autenticado envia POST para index.php?route=/database/designer com operation=save_setting_value e uma aspa em value. queryAsControlUser então executa essa string como o usuário de controle do pma contra pma__designer_settings. Essa conta é o armazenamento de configuração, não o SQL box do usuário logado. O phpMyAdmin 6.x envolve esse blob em quoteString no ControlUser. O 5.2.3 ainda o concatena cru.

CVEs mais antigas do designer (2016-6616, 2019-11768, 2019-18622) eram de nome de usuário / nome de banco de dados. Este resquício é a coluna JSON settings_data.

IDainda sem CVE
ClasseSQLi (usuário de controle em pma__designer_settings)
AlcanceRemoto (login autenticado por cookie; Designer + pma__designer_settings habilitados)
CWECWE-89
CVSSAlto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProdutophpMyAdmin
Afetado5.2.3 tag RELEASE_5_2_3 (962857e)
AutenticaçãoLogin autenticado por cookie. Designer + pma__designer_settings habilitados.
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1:19220

O que um atacante pode fazer

Um usuário autenticado do phpMyAdmin que consegue abrir o Designer pode injetar SQL como o usuário de controle em pma__designer_settings.

PrivilégioMétodo / caminhoComprovado em lab ou inferido
Quebrar a string UPDATE/INSERT do usuário de controle (integridade do SQL do pmadb)POST index.php?route=/database/designer operation=save_setting_value com uma aspa em valueComprovado em lab. General log: SET settings_data = '{"snap_line":"PMA-DESIGNER-JSON-SQLI-WITNESS'#" }' cru. quoteString ausente
Truncar o próprio settings_data para que não seja mais JSON (integridade da própria linha)Mesmo POST; # comenta o resto da instruçãoComprovado em lab. O blob de appuser contém o witness e não é JSON válido. O save limpo grid-ok desapareceu
Sobrescrever as linhas de designer de outros usuários sem queries empilhadas (integridade da linha da vítima)Mesmo # comenta WHERE username = '...'Comprovado em lab. O victim semeado {"keep":"safe"} tornou-se o blob witness truncado
Instruções extras como o usuário de controleMesmo sink se o link mysqli de controle permitir multi-queryInferido. O padrão de mysqli::query é instrução única. Não habilitado aqui
Alcançar outras tabelas do pmadb (bookmarks, history, pma__userconfig)Apenas se queries empilhadas ou um breakout de escrita for possívelInferido. O usuário de controle neste lab tem apenas DML em phpmyadmin.*

Fechado neste lab: acesso não autenticado, o SQL box do appuser autenticado (apenas appdb; appuser não tem GRANT em phpmyadmin), shell do SO e queries empilhadas. O recurso não faz nada se o pmadb / designer settings estiver desligado (isso é um FAIL, não este resquício).

Como eu encontrei

Oito caçadas paralelas ao código-fonte de RELEASE_5_2_3. saveSetting concatena json_encode em '...'. O nome de usuário é escapeString. O 6.x já faz quoteString desse blob. O 5.2.3 não.

Caminhos errados: injetar no nome de usuário (ele é escapado); esperar um #1064 (o # comenta o resto, então o MySQL aceita o UPDATE truncado); tratar queries empilhadas como comprovadas (o padrão do mysqli é instrução única).

Lab

python3 phpmyadmin-designer-json-sqli-Abraxas-Labs.py

ou

cd lab
./run.sh

Apenas loopback: http://127.0.0.1:19220. Imagens phpmyadmin:5.2.3 e mysql:8.0. Projeto Compose phpmyadmin-designer-json-sqli. Witness PMA-DESIGNER-JSON-SQLI-WITNESS.

SUCCESS phpmyadmin-designer-json-sqli version=5.2.3 how=live raw-concat=yes truncated=true sql-error=false quoteString=no PMA-DESIGNER-JSON-SQLI-WITNESS

A correção

quoteString(..., ControlUser) / escapeString no blob JSON, assim como RecentFavoriteTable::saveToDb() e o phpMyAdmin 6.x nesta coluna. Não coloque a saída de json_encode dentro de um literal SQL entre aspas simples.

Referências

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3 (962857e)
  • libraries/classes/Database/Designer/Common.php saveSetting
  • Controllers/Database/DesignerController.php POST operation=save_setting_value
  • Rota GET|POST /database/designer
  • Outros resquícios do mesmo pin: phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-setup-validate · phpmyadmin-csrf-sql
  • CWE-89

Licença

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

Baixar ferramenta