SQL Injection, sério?

Se você já tem alguma experiência ou já mexe com bancos de dados há algum tempo, deve estar se perguntando: ‘SQL Injection em pleno 2025?’
Bem, parece piada. Mas não é. Por incrível que pareça, ainda existem sistemas vulneráveis a SQL Injection. Felizmente está mais difícil de encontrar, mas não é impossível.
Sites legados, sites abandonados e sistemas que só rodam localmente, entre outros, ainda são bastante vulneráveis a ataques de SQL Injection. Mas não vá pensando que bastará jogar um ' OR 1+1 num input para dar certo. Não é tão óbvio assim. Você pode até testar, mas algo tão simplório provavelmente não resultará em algo muito útil.
Mas então: como realizar testes de SQL Injection de forma eficiente e executar ataques mais sofisticados?
Excelente pergunta. Ela tem nome, tem data de lançamento, atualizações constantes e uma equipe de mantenedores bastante competente.
O Sqlmap!
Para quem está entrando no mundo de Web Application Security ou Ethical Hacking, o Sqlmap é a primeira e, em muitos casos, a única ferramenta que você vai precisar para testar, explorar e identificar vulnerabilidades de SQL Injection. Não se trata apenas de uma ferramenta de linha de comando; é um framework completo, escrito em Python.
Por Que Usar o Sqlmap?
- Ele não se limita a um tipo de banco de dados. Suporta MySQL, Oracle, PostgreSQL, Microsoft SQL Server, SQLite, Firebird, e muitos outros.
- Esqueça o
' OR 1=1 --. O Sqlmap é inteligente. Ele consegue identificar e explorar vulnerabilidades usando uma variedade de técnicas sofisticadas, detectando qual delas funciona melhor contra o alvo:- Boolean-based blind: Pergunta por pergunta, inferindo dados pela resposta (True/False) da aplicação.
- Time-based blind: Usando o tempo de resposta do servidor (ex:
IF(1=1, SLEEP(5), 0)). - Error-based: Forçando erros para extrair dados dentro da mensagem de erro.
- UNION query: O clássico, otimizado para unir resultados de diferentes tabelas.
- Stacked queries, out-of-band, e mais.
- Você define o alvo, e ele automatiza o fingerprint (descobrir qual SGBD é), a enumeração (listar bancos, tabelas, colunas) e a extração de dados.
Hands-On
Vamos usar um laboratório privado, sqli-lab.hackerfofo.com, para demonstrar o fluxo do Sqlmap.
Premissa: Digamos que identificamos um parâmetro de ID vulnerável na página de perfil: http://sqli-lab.hackerfofo.com/profile.php?id=10.
Passo 1: Teste e Enumeração Básica
O primeiro passo é testar a vulnerabilidade e descobrir quais bancos de dados existem no sistema. Usamos a opção -u para a URL e --dbs para listar os bancos (databases).
sqlmap -u "http://sqli-lab.hackerfofo.com/profile.php?id=10" --dbs
Se a vulnerabilidade for confirmada, o Sqlmap exibirá uma lista de bancos de dados. Vamos supor que ele retorne: information_schema, mysql e hackerfofo_users.
Passo 2: Listando Tabelas
Com o nome do banco de dados principal em mãos (hackerfofo_users), vamos listar as tabelas dentro dele. Usamos -D (Database) e --tables.
sqlmap -u "http://sqli-lab.hackerfofo.com/profile.php?id=10" -D hackerfofo_users --tables
Resultado: O Sqlmap pode retornar tabelas como: auth, products, user_credentials. A tabela user_credentials parece promissora.
Passo 3: Listando Colunas
Agora, para ver as colunas (campos) da tabela que nos interessa (user_credentials). Usamos -T (Table) e --columns.
sqlmap -u "http://sqli-lab.hackerfofo.com/profile.php?id=10" -D hackerfofo_users -T user_credentials --columns
Resultado: Podemos encontrar colunas cruciais: user_id, username, password_hash, email.
Passo 4: Despejando os Dados (Dump)
Finalmente, a extração dos dados propriamente dita. Usamos a opção --dump para extrair todas as entradas da tabela e -C (Columns) para especificar exatamente quais colunas queremos.
sqlmap -u "http://sqli-lab.hackerfofo.com/profile.php?id=10" -D hackerfofo_users -T user_credentials -C "username,password_hash,email" --dump
Em poucos minutos (ou até segundos, dependendo da velocidade e da técnica usada), o Sqlmap irá despejar todos os nomes de usuário, hashes de senha e e-mails da tabela na sua tela. Missão cumprida.
O Diferencial: Opções Avançadas
A real força do Sqlmap está nas opções que tratam cenários do “mundo real” que o ' OR 1=1 não resolve:
| Opção | Propósito | Exemplo de Uso |
--level=5 | Aumenta o nível de testes e payloads (injecções) para até 5, testando em cookies, HTTP Headers, etc. | sqlmap ... --level=5 --risk=3 |
--tamper | Utiliza scripts para obfuscar (esconder/modificar) o payload da injeção, contornando WAFs (Web Application Firewalls). | sqlmap ... --tamper=space2comment,apostrophemask |
--os-shell | Se o SGBD estiver configurado incorretamente, permite o acesso ao sistema operacional subjacente. Ataque devastador. | Usado após a enumeração |
-p "param" | Força o teste apenas em um parâmetro específico, útil para performance. | sqlmap ... -p "id" |
O Recado Mais Importante
Se o Sqlmap consegue automatizar uma exploração em minutos, significa que a porta está escancarada.
A prevenção é sempre a melhor técnica:
- Prepared Statements: Use sempre Prepared Statements (queries parametrizadas) em sua aplicação. Esta é a defesa n.º 1 e que anula 99% dos ataques de SQL Injection.
- Princípio do Mínimo Privilégio: Sua aplicação nunca deve se conectar ao banco de dados usando o usuário root (administrador). Use um usuário com o mínimo de permissões necessárias.
- WAFs: Configure um Web Application Firewall (WAF) para tentar filtrar payloads maliciosos como as time-based injections.
O Sqlmap é a prova viva de que, sim, SQL Injection em 2025 é uma realidade, e dominar a ferramenta é essencial tanto para o ataque quanto para a defesa.