NT-2026.10.03 DOSSIÊ

SQLMAP: INJEÇÃO SQL EM BUG BOUNTY E PENTEST WEB

SQLMap é a ferramenta padrão para SQL injection automatizada. Este artigo cobre payloads simples (--risk/--level), dump de bancos/tabelas/usuários/hashes, tampers (randomcase, space2comment, between) para bypass de WAF, e técnicas de UNION (--union-col, --union-char) para injeções complexas.

Capa editorial do SQLMap com o fluxo fundamentos, tampers para bypass de WAF e enumeração de colunas com UNION

Introdução

SQLMap é a ferramenta padrão para SQL injection automatizada, presente há anos no arsenal de pentesters e bug bounty hunters. Quando você testa websites para SQLi, frequentemente começa manualmente com payloads conhecidos e depois migra para ferramentas. Embora existam algumas alternativas, o SQLMap permanece a mais capaz.

A injeção SQL é considerada vulnerabilidade crítica, pois pode levar a RCE ou comprometimento total do website, dependendo do DBMS. Em um pentest real, um IP de admin whitelistado no MySQL também tinha SSH aberto, e reuso de credenciais permitiu acesso ao servidor. Um finding pode levar ao próximo.

Banner do artigo SQLMap mostrando título e imagem de destaque
Evidência técnica: Banner SQLMap — Web App Hacking Using SQLMap in Bug Bounty

OWASP Top 10 e Tipos de Injeção SQL

Embora as injeções tenham caído na lista do OWASP Top 10, ainda estão lá e muito exploráveis. Muitos sites governamentais são vulneráveis. Existem quatro tipos principais:

  • Time-based: lento, baseado em atrasos de resposta
  • Union-based: permite dump de bancos inteiros rápido e limpo
  • Error-based: comum e fácil de detectar via mensagens de erro
  • Boolean-based: inferência baseada em verdadeiro/falso

Não é sempre óbvio que um site é vulnerável. Pode parecer desatualizado e não dar nada, enquanto sites sólidos podem vazar tudo com um único payload.

Payload Simples — Risk e Level

Comece com o básico. Frequentemente não precisa exagerar — o SQLMap resolve a maior parte. Payloads simples funcionam; complexidade não aumenta chance de sucesso. Alterar –risk ou –level cedo demais pode fazer o payload falhar.

Exemplo com request POST interceptado do Burp (salvo em example.com.txt):

kali > sudo sqlmap -r example.com.txt --risk=3 --level=4 --batch --random-agent

Você pode brincar com levels e risks, mas cuidado: sites com WAF podem exigir valores baixos no início.

Para dumpar dados do banco billing, tabela users11, com enumeração de colunas:

kali > sudo sqlmap -r example.com.txt --risk=3 --level=4 --batch --random-agent --dump -D billing -T users11 --columns

Flags úteis:

  • --users: extrai usuários de gerenciamento do banco (IPs whitelistados, localhost)
  • --passwords: dumpa hashes de senha se disponíveis — abre novo vetor de ataque

Se alguém cracka hash de admin, causa dano real ao website.

Terminal executando sqlmap com request POST salvo do Burp
Evidência técnica: SQLMap payload simples com –risk=3 –level=4 –batch –random-agent
Resultado do dump mostrando dados extraídos da tabela users11
Evidência técnica: Dump de dados do banco billing, tabela users11
SQLMap listando usuários do DBMS e hashes de senha extraídos
Evidência técnica: Extração de usuários e hashes de senha do banco

Segundo Exemplo — Enumeração de Databases

Teste onde risk/level maiores funcionam bem. O asterisco (*) marca o parâmetro a testar; também use -p para isso.

kali > sudo sqlmap -u "https://example.com/product.php?id=*" --risk=3 --level=4 --random-agent --batch --dbs

Funcionou. Agora dump da tabela users com usernames e hashes. Nem todos hashes são crackeáveis pelo SQLMap — se falhar, exporte e use Hashcat ou John the Ripper.

Lista de databases enumerados pelo SQLMap
Evidência técnica: Enumeração de databases com –dbs
Hashes de senha dumpeados — nem todos crackeáveis pelo SQLMap
Evidência técnica: Hashes de senha extraídos da tabela users

Tampers — Bypass de WAF

Site protegido por WAF que filtra requests suspeitos. Payloads regulares falham. Usamos tampers — scripts que modificam payloads para bypass. randomcase randomiza casing do payload, ajudando a bypassar WAFs.

kali > sudo sqlmap -u "http://example.com/search?category?new&q=news" --batch --level=3 --risk=2 --dbms=mysql -p q --dbs --tamper=randomcase --no-cast

Flag --no-cast: diz ao SQLMap para não fazer cast de tipos de dados. Útil após achar injeção funcional; antes pode atrapalhar.

Existem muitos tamper scripts para diferentes firewalls. Se identificar o firewall, chance melhor de escolher o certo. Lista de tampers disponíveis no SQLMap:

kali > sqlmap --list-tampers
SQLMap executando com --tamper=randomcase bypassando WAF
Evidência técnica: Tamper randomcase para bypass de WAF
Lista completa de scripts tamper do SQLMap
Evidência técnica: Lista de tampers disponíveis no SQLMap para diferentes WAFs

Columns — Injeção UNION

Como o mecanismo de busca funciona e como dados são apresentados? Se resultados aparecem em tabela, você deve testar colunas. Precisa saber quantas colunas são retornadas. Se payload UNION usa número errado, não funciona.

Use --union-col=4 para definir 4 colunas:

kali > sudo sqlmap -u "https://example.com/afond/index.php?x=0&y=0&short_search=...&act=search" --level=5 --risk=3 --tamper=randomcase,between,space2comment --random-agent --batch --dbs --dbms=mysql -p short_search --union-col=4 --union-char="a" --no-cast

Caractere UNION (--union-char) aleatório ajuda estabilizar payload e evitar falsos positivos. Não esqueça tampers — pode empilhar, desde que não conflitam.

SQLMap explorando injeção UNION-based definindo 4 colunas
Evidência técnica: Injeção UNION com –union-col=4 e –union-char

Conclusão

Esta é a Parte 1 da série. Cobrimos a base do uso real do SQLMap e suas funções. Como mencionado, SQLi são vulnerabilidades críticas e sempre vale testá-las durante Web App Hacking ou Bug Bounty. Treinamentos específicos dão skills para encontrar primeiros bugs ou conseguir vaga de pentester — muitas empresas exigem essas competências.

Próxima parte: técnicas avançadas, tamper stacking otimizado, second-order SQLi, e casos reais de RCE via SQLi.