Agora que você entende SQL Injection na mão — por que os payloads funcionam, como extrair dados, como a injeção cega infere informação —, você ganhou o direito de automatizá-la. O SQLmap é a ferramenta que faz tudo isso em escala industrial: detecta a vulnerabilidade, identifica o tipo de banco, extrai a estrutura e os dados, tudo automaticamente. Esta aula ensina a usá-lo — e reforça por que fazer a SQLi manual primeiro foi essencial, porque quem só conhece o SQLmap é refém dele. Pratique no DVWA e na Metasploitable.

O processo manual, automatizado

O SQLmap automatiza o processo metódico que você faria à mão: ele injeta payloads de teste para detectar se um parâmetro é vulnerável, identifica qual tipo de SQLi funciona (UNION-based, boolean-based, time-based), determina o SGBD (MySQL, PostgreSQL, MSSQL...), e então extrai o que você pedir. O uso básico aponta para um parâmetro suspeito:

# testa um parâmetro GET
sqlmap -u "http://alvo.com/produto?id=1"

# uma vez confirmada a vulnerabilidade, extrai informação progressivamente:
sqlmap -u "http://alvo.com/produto?id=1" --dbs          # lista os bancos de dados
sqlmap -u "http://alvo.com/produto?id=1" -D loja --tables # tabelas do banco "loja"
sqlmap -u "http://alvo.com/produto?id=1" -D loja -T usuarios --dump  # despeja a tabela

Bancos, tabelas e o dump

Repare que a lógica espelha exatamente o processo manual: descobrir os bancos, depois as tabelas, depois despejar os dados — só que o SQLmap faz cada passo automaticamente, testando dezenas de técnicas e adaptando-se ao banco. Para requisições mais complexas (POST, com cookies de sessão, com cabeçalhos específicos), você fornece a requisição inteira, tipicamente capturada com o Burp Suite (aula Burp Suite: a bancada de trabalho do pentester web):

sqlmap -r requisicao.txt          # usa uma requisição HTTP salva (com POST, cookies, etc.)
sqlmap -u "..." --cookie="session=abc123"    # fornece o cookie de sessão
sqlmap -r requisicao.txt --dump-all           # despeja tudo (use com responsabilidade!)

os-shell, arquivos e evasão de WAF

O SQLmap tem recursos avançados que refletem a profundidade da SQLi: ele pode tentar obter um shell no banco ou no sistema operacional (--os-shell, quando as permissões do banco permitem — conectando SQLi com comprometimento do servidor), ler/escrever arquivos, e usar técnicas de evasão de WAF (com "tamper scripts" que ofuscam os payloads). Essa potência é o que torna o SQLmap uma ferramenta poderosíssima — e é exatamente por isso que ela exige responsabilidade: um --dump-all extrai bancos inteiros de dados (potencialmente dados pessoais protegidos por LGPD, aula A lei que separa a carreira do processo criminal), e o --os-shell compromete o servidor. Você usa esses recursos apenas dentro do escopo autorizado e com a consciência do impacto — extrair mais dados do que o necessário, mesmo num teste autorizado, tem implicações de privacidade.

Por que aprender na mão antes

Agora, o ponto pedagógico central desta aula, que justifica toda a estrutura do curso: por que aprender SQLi na mão antes do SQLmap? Três razões concretas. Primeiro, o SQLmap falha e você precisa saber por quê: ele nem sempre detecta ou explora uma SQLi que existe (filtros customizados, contextos incomuns, WAFs), e quando ele falha, só quem entende SQLi consegue explorar manualmente o que a ferramenta não pegou. Muitas SQLi de bug bounty são encontradas manualmente justamente onde o SQLmap desistiu. Segundo, você precisa interpretar e ajustar: o SQLmap tem dezenas de opções (nível de teste, risco, técnicas, tampers) que só fazem sentido se você entende o que está acontecendo por baixo — o iniciante roda com as opções padrão e conclui erradamente "não é vulnerável". Terceiro, entender evita erros graves: rodar o SQLmap cegamente com opções agressivas pode causar impacto (queries pesadas que sobrecarregam o banco, dados extraídos em excesso). Quem entende usa a ferramenta com precisão cirúrgica; quem não entende, com um machado.

Multiplicador para quem domina o fundamento

Esse é o princípio "manual antes da ferramenta" em sua forma mais clara, e ele vale para todo o restante do bloco web e do curso: as ferramentas (SQLmap, Burp, Nikto, e todas as outras) são multiplicadores de eficiência para quem domina o fundamento, e muletas enganosas para quem não o domina. O profissional usa o SQLmap para velocidade depois de confirmar e entender a vulnerabilidade; o amador o usa como substituto do entendimento e trava assim que a ferramenta não resolve sozinha. Certificações sérias (OSCP, OSWE) inclusive restringem ou proíbem o SQLmap justamente para verificar se você entende SQLi de verdade.

Validar as prepared statements

Do lado defensivo, o SQLmap é também uma ferramenta de teste que o Blue Team e os desenvolvedores usam para validar suas defesas: rodar o SQLmap contra a própria aplicação (em ambiente de teste) confirma se as prepared statements (aula SQL Injection na mão: conversando com o banco de dados) realmente fecharam a SQLi. Se o SQLmap não consegue explorar, é um bom sinal de que a parametrização está correta. E, como toda ferramenta ofensiva conhecida, o SQLmap tem assinaturas que WAFs e IDS detectam — reconhecer um scan de SQLmap nos logs (payloads característicos, volume de requisições) é habilidade defensiva. A defesa de fundo continua a mesma: prepared statements tornam a aplicação imune, e nenhuma ferramenta de exploração — por mais poderosa — quebra o que foi corretamente parametrizado. Da injeção no banco o caminho segue para a injeção no navegador da vítima: o Cross-Site Scripting (XSS).

Fontes e leituras recomendadas

  • sqlmap.org — documentação oficial, opções e técnicas
  • PortSwigger Academy — para praticar SQLi manual antes/junto do SQLmap
  • OWASP — SQL Injection Prevention Cheat Sheet (validação defensiva)
  • HackTricks — seção de SQL Injection (manual e com sqlmap)

Exercícios

  1. Como o fluxo de comandos do SQLmap (--dbs, --tables, --dump) espelha o processo manual?

    ✓ Resposta:

    Espelha porque segue os mesmos passos metódicos: primeiro descobre os bancos (--dbs), depois as tabelas de um banco (--tables), depois despeja o conteúdo (--dump) — exatamente a sequência "mapear a estrutura, depois saquear os dados" do processo manual, só que automatizada e testando muitas técnicas.

  2. Que recursos avançados do SQLmap conectam a SQLi com o comprometimento do próprio servidor, e por que exigem responsabilidade?

    ✓ Resposta:

    O --os-shell (obter shell no sistema quando as permissões do banco permitem) e a leitura/escrita de arquivos conectam a SQLi ao comprometimento do servidor. Exigem responsabilidade porque comprometem o servidor e podem extrair dados sensíveis (protegidos por LGPD); usam-se apenas no escopo autorizado e com consciência do impacto.

  3. Explique as três razões pelas quais aprender SQLi na mão antes do SQLmap é essencial.

    ✓ Resposta:

    (1) O SQLmap falha em casos que existem (filtros, WAFs, contextos incomuns), e só quem entende SQLi explora manualmente o que ele não pega; (2) suas dezenas de opções só fazem sentido para quem entende o que ocorre por baixo, evitando falsos negativos por rodar só o padrão; (3) entender evita erros graves, como impacto por opções agressivas ou extração excessiva de dados.

  4. Por que rodar o SQLmap "cegamente" pode levar tanto a falsos negativos quanto a impacto indesejado?

    ✓ Resposta:

    Falsos negativos: com opções padrão, o SQLmap pode não detectar uma SQLi que exigiria nível/risco maior ou tampers, levando a concluir erradamente "não é vulnerável". Impacto: opções agressivas geram queries pesadas que sobrecarregam o banco e extraem dados em excesso, causando problemas mesmo num teste autorizado.

  5. Como o SQLmap pode ser usado defensivamente, e por que ele não consegue explorar uma aplicação corretamente parametrizada?

    ✓ Resposta:

    Defensivamente, rodar o SQLmap contra a própria aplicação (em teste) valida se as defesas (prepared statements) fecharam a SQLi — se ele não explora, a parametrização está correta. Ele não consegue explorar uma aplicação corretamente parametrizada porque a entrada nunca é interpretada como comando; não há estrutura de consulta para quebrar, independentemente do payload.