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-csrf-sql — phpMyAdmin 5.2.3 - Alta - Remoto - CSRF - remoção de token em /sql | Kitploit
Ferramentas/GitHubGitHub/abraxas/phpmyadmin-csrf-sql
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoLabs e Prática
GitHubabraxas/phpmyadmin-csrf-sql

phpmyadmin-csrf-sql

phpMyAdmin 5.2.3 - Alta - Remoto - CSRF - remoção de token em /sql

Ver Repositório
1há 8 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-csrf-sql

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

Write-up: https://abraxaslabs.tech/research/phpmyadmin-csrf-sql

phpmyadmin-csrf-sql

Classe: CSRF Alcance: Remoto

phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). Common.php constrói a requisição PSR-7 a partir das globais antes de checkTokenRequestParam. Em caso de incompatibilidade, Sanitize::removeRequestVars limpa $_POST e $_GET, mas não esse snapshot. Em seguida, $sql_query é copiado de $request->getParsedBodyParam('sql_query'). POSTs AJAX abortam em caso de incompatibilidade de token. POSTs não-AJAX continuam. SqlController prefere o $_POST['sql_query'] removido e, caso contrário, mantém a global.

Basta uma vítima com cookie de sessão do phpMyAdmin. Faça POST em index.php?route=/sql com sql_query e sem token válido, e sem ajax_request. O SELECT é executado como aquele usuário MySQL. O padrão CookieSameSite=Strict no 5.2.3 bloqueia muitos navegadores entre sites. Same-site, Lax, None ou autenticação HTTP ainda são afetados. De qualquer forma, trata-se de um controle CSRF quebrado.

IDainda sem CVE
ClasseCSRF
AlcanceRemoto. O padrão CookieSameSite=Strict bloqueia muitos navegadores entre sites. Same-site / Lax / None / autenticação HTTP permanecem.
CWECWE-352
CVSSAlto: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
ProdutophpMyAdmin
Afetado5.2.3 tag RELEASE_5_2_3 (962857e)
AutenticaçãoCookie de sessão do phpMyAdmin da vítima (ou autenticação HTTP). Sem token CSRF válido.
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1:19240

O que um atacante pode fazer

Qualquer pessoa que consiga fazer o navegador da vítima enviar um POST ao phpMyAdmin sem ajax_request pode executar SQL como aquele usuário MySQL.

PrivilégioMétodo / caminhoComprovado em lab ou inferido
Executar SQL do atacante como a conta MySQL da vítima (integridade + reconhecimento daquele servidor SQL)POST index.php?route=/sql sql_query=... db=... sem token, sem ajax_requestComprovado em lab. O corpo dos resultados continha PMA-CSRF-SQL-WITNESS. O log geral mostrou o SELECT como appuser
Abortar o mesmo handler em AJAXMesmo POST com ajax_request=1Comprovado em lab. Token mismatch. Linha marcadora do INSERT ausente. O log geral não executou aquele INSERT
Ignorar handlers que só leem o $_POST removidoPOST /database/structure/drop-table sem tokenComprovado em lab. keepme ainda presente
Mesma lacuna em export (SaveDir), DROP/TRUNCATE de partição, bloqueio de conta, /config/set, criação de pmadbQualquer handler que leia o corpo PSR-7 após a remoçãoInferido. Não exercitado

Fechado neste lab: PMA não autenticado (login por cookie necessário primeiro), rotas AJAX (elas encerram em caso de incompatibilidade), drop-table sem token, shell do SO. O padrão Strict SameSite significa que um formulário clássico entre sites muitas vezes não enviará o cookie; o que resta ainda é uma verificação CSRF falha em same-site e em implantações Lax/None.

Como encontrei

Oito buscas paralelas no código-fonte de RELEASE_5_2_3. Common.php cria $request = createFromGlobals() antes de checkTokenRequestParam(). Em caso de incompatibilidade, Sanitize::removeRequestVars() limpa apenas $_POST/$_GET. Não-AJAX continua. SqlController usa a global $sql_query se $_POST estiver vazio. Rota GET|POST /sql.

Erros de percurso: tratar o AJAX /sql como o resíduo (ele aborta com Token mismatch); tratar o drop-table como o resíduo (esse handler apenas lê $_POST filtrado); tratar o Strict SameSite padrão como "CSRF está fechado" (o controle continua quebrado; same-site / Lax / None permanecem).

Lab

python3 phpmyadmin-csrf-sql-Abraxas-Labs.py

ou

cd lab
./run.sh

Apenas loopback: http://127.0.0.1:19240. Imagens phpmyadmin:5.2.3 e mysql:8.0. Projeto Compose phpmyadmin-csrf-sql. O PoC é um POST loopback same-site (Strict SameSite ainda envia o cookie). Testemunha PMA-CSRF-SQL-WITNESS.

SUCCESS phpmyadmin-csrf-sql sql-ran=yes ajax-abort=yes drop-held=yes PMA-CSRF-SQL-WITNESS

A correção

Em caso de incompatibilidade, substitua a requisição por um corpo vazio, ou recuse todos os POSTs, não apenas AJAX. Não copie sql_query de uma requisição obsoleta. Falhe de forma segura como no logout.

Referências

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3 (962857e)
  • libraries/classes/Common.php snapshot da requisição antes da remoção do token
  • Sanitize::removeRequestVars limpa apenas $_POST/$_GET
  • SqlController global $sql_query
  • Restos do mesmo pin: phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-setup-validate
  • CWE-352

Licença

GNU Affero GPL v3.0. Consulte LICENSE. Apenas laboratório em loopback. Sem garantias.

Baixar ferramenta