Tank · Code Alliance Developers
Termux Arsenalby Tank · Code Alliance

Leitura técnica · use o conhecimento de forma ética e autorizada

← estudos
Banco de Dados12 min · intermediário · atualizado 2026-06-29

Bancos de dados: superfície de ataque e hardening

Como atacantes mapeiam, autenticam e exfiltram dados em Postgres, MySQL, Mongo e Redis — e o conjunto mínimo de controles para fechar a porta.

🎧 audiobook · nível 1

Bancos de dados: superfície de ataque e hardening

1/1
nível 1 · introdução acessívelnível 2 · em brevenível 3 · em breve

Por que bancos vazam

  • Exposição direta (porta 5432/3306/27017/6379 na internet).
  • Credenciais default ou hardcoded em repositório público.
  • SQL Injection clássica e blind, em código sem prepared statements.
  • Backups em S3 público ou snapshots compartilhados acidentalmente.
  • Replicação mal configurada (logical replication sem ACL).

Reconhecimento

# Descobrir bancos expostos no escopo autorizado
nmap -sV -p 1433,3306,5432,6379,27017,9200 --script="banner,*-info" alvo.tld

# Buscar credenciais em código público (autorizado / próprio)
trufflehog filesystem ./repo --only-verified

SQL Injection — o que sqlmap realmente faz

O sqlmap não 'mágica' — ele injeta marcadores, mede diferenças (booleano, tempo, erro, UNION) e infere o schema byte a byte. Saber isso ajuda a entender por que prepared statements eliminam a classe inteira.

# Teste assistido (escopo autorizado)
sqlmap -u "https://alvo.tld/item?id=1" --batch --risk=2 --level=3 \
       --technique=BEUST --dbs

Defesa que funciona

Prepared statements em 100% do código, ORM com binding, validação de tipo no DTO, WAF apenas como camada extra. Não confie em escaping manual.

Hardening por banco

PostgreSQL

  • listen_addresses='localhost' a não ser que precise de rede; pg_hba.conf com 'scram-sha-256'.
  • Roles por aplicação, REVOKE ALL em public schema, GRANT mínimo.
  • Row Level Security para multi-tenant.
  • Backups cifrados (pgbackrest + chave gerenciada).

MySQL / MariaDB

  • bind-address=127.0.0.1, validate_password, sql_mode estrito.
  • Usuários sem GRANT ALL; nunca usar 'root'@'%'.

MongoDB

  • authorization enabled (não é default em versões antigas).
  • TLS obrigatório, IP allowlist no Atlas, sem 0.0.0.0/0.

Redis

  • requirepass + protected-mode yes, rename-command FLUSHALL '', sem expor à internet.
  • Ataques de SSRF + Redis interno são clássicos — segmentar rede.

Ferramentas relacionadas

  • Sqlmapvalidar SQLi de forma controlada
  • Nmapdescoberta de portas de banco

Template OffSec · aplicar antes de rodar

Objetivo → Preparação → Execução → Evidência → Ética

→ guia do lab

Objetivo

Identificar exposição de bancos, permissões excessivas, injeção e caminhos de escalonamento — sem tocar em dado de produção.

Pré-requisitos

  • Instância de teste (MySQL/Postgres/Mongo em container) com dados sintéticos
  • sqlmap, mysql-client, psql instalados
  • Autorização explícita se o alvo não é seu

Passos

  1. Levantar banner e versão via nmap -sV -p 3306,5432,27017,1433
  2. Testar auth default e listar databases visíveis com usuário fraco
  3. Enumerar tabelas e privilégios do usuário atual
  4. Buscar injeção em endpoints da aplicação (sqlmap com --batch --risk=1)
  5. Correlacionar achado com logs do banco para validar não-falso-positivo

Evidências a coletar

  • Saída do sqlmap (--output-dir) versionada
  • Print do prompt do banco autenticado
  • Log do banco (general log) mostrando a query maliciosa

Regra prática: se você não guardou evidência reprodutível, o achado não existe.

Guia prático (lab autorizado)

alvo · DVWA (nível low→high) em Docker + MySQL local

docker run --rm -it -p 80:80 vulnerables/web-dvwa  # depois: sqlmap -u 'http://localhost/vulnerabilities/sqli/?id=1' --cookie='...' --batch

verificar · Ative general_log no MySQL e confirme a query injetada aparecendo. Sem log correspondente, é hipótese.

Checklist interativo

Checklist ético (marcar antes do primeiro comando)

Autorização, escopo, lab e proteção de dados. Sem 100%, não roda fora do lab.

0/5

Prática segura · Banco de Dados

→ guia do lab

Monte um ambiente isolado antes de qualquer teste — use Docker (DVWA/juice-shop), uma VM host-only ou um alvo autorizado (HTB, TryHackMe, PortSwigger Academy).

Nunca aponte para alvo em produção. Se estiver no celular, use proot-distro + Debian para não sujar o Termux principal.