SQL Injection, sério?

' OR 1+1

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?

  1. Ele não se limita a um tipo de banco de dados. Suporta MySQL, Oracle, PostgreSQL, Microsoft SQL Server, SQLite, Firebird, e muitos outros.
  2. 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.
  3. 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çãoPropósitoExemplo de Uso
--level=5Aumenta o nível de testes e payloads (injecções) para até 5, testando em cookies, HTTP Headers, etc.sqlmap ... --level=5 --risk=3
--tamperUtiliza scripts para obfuscar (esconder/modificar) o payload da injeção, contornando WAFs (Web Application Firewalls).sqlmap ... --tamper=space2comment,apostrophemask
--os-shellSe 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:

  1. 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.
  2. 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.
  3. 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.

Subscribe to Hacker Fofo

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
[email protected]
Subscribe