1. Trunque o conteúdo da consulta
Caso queira ignorar os scripts da consulta. Por exemplo, para o processamento abaixo, a consulta requer a condição active=1 mas podemos comentar (--, -- -, -+, #, /*, /**/, // , ;%00…) e ignore isto. Ao minerar, muitas vezes não sabemos o que o conteúdo restante da consulta faz, portanto, usar comentários nesse caso é muito eficaz.

Depois de comentar, nossa consulta se torna:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
2. Ignorar a filtragem de palavras-chave
a. Comentários embutidos
Comentários embutidos são usados de forma muito eficaz para contornar a filtragem de espaços em branco. Você pode usar os seguintes caracteres para ignorar a filtragem de espaços em branco: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Por exemplo:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Ou ignore a filtragem de palavras-chave (disponível com MySql). No exemplo abaixo, as palavras-chave união e senha estão na lista negra e foram bloqueadas. Podemos contornar isso:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
b. Substitua palavras-chave
Ao explorar a injeção de SQL, geralmente usamos palavras-chave como: union, select, information_schema... Em muitos casos, os programadores simplesmente substituem essas palavras-chave:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Podemos ver facilmente que falta o código de processamento acima. Se for simplesmente correspondência de padrões, o desvio é extremamente simples. Vamos aplicar a distinção entre maiúsculas e minúsculas, onde letras maiúsculas e minúsculas são interpretadas de forma diferente.
Agora, em vez de usar a palavra-chave:
select, union…
Nós vamos usar:
SeLEcT, UniOn…
A base desse desvio é que os sistemas de gerenciamento de banco de dados não fazem distinção entre palavras-chave case e case.
Em alguns casos, a aplicação web irá filtrar todas ou parte de determinadas palavras-chave (união, seleção...). Iremos contornar da seguinte forma:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Depois que union e select forem filtrados pela aplicação web, ficaremos com a consulta correta da seguinte forma:
id=1+union+SeLecT+1,2,3-- -
c. Codificação de caracteres
Podemos ignorar quando o WAF (Web Application Firewall) bloqueia palavras-chave codificando-as. Muitos aplicativos WAF decodificarão a consulta apenas uma vez e filtrarão as palavras-chave da lista negra. Então, vamos codificar a solicitação duas vezes para que ela possa ser ignorada neste caso.
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
3. Ignorar bloqueia aspas simples e duplas
- Vejamos um exemplo antes de aprender especificamente sobre esse bypass.
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Neste cenário, temos uma tabela no banco de dados chamada users. A próxima tarefa é saber o nome da coluna da tabela para obter suas informações. Como na consulta acima, usamos a condição: table_name='users'. Mas se aspas simples (') e aspas duplas (") forem bloqueadas pelo WAF, não poderemos mais usar 'usuários' ou "usuários". Então, como resolver esse problema? O sistema de banco de dados integrado nos fornece uma função que resolve muito bem esse problema, que é a função CHAR( ) (para Oracle é CHR()).Por exemplo, na consulta acima iremos contorná-la:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Os programadores PHP estão muito familiarizados com a função addlashes(). A função addlashes() tem o efeito de adicionar antes de caracteres especiais, como aspas simples ('), aspas duplas ("), barra invertida (\), caractere NUL (byte nulo) "\" para ajudar o sistema de gerenciamento de banco de dados. Existe nenhuma dificuldade e confusão ao lidar com strings contendo esses caracteres?Assim, quando queremos injetar na consulta de acordo com o script: name='someName' ou '1'='1'-- Os resultados não são mais o que esperávamos.
No entanto, existe uma técnica para ignorar a função addlashes() para injetar caracteres de aspas simples ('). Esta técnica já é pública há bastante tempo e a sua implementação é bastante difícil porque está ligada ao estilo de codificação aplicado ao site.
4. Ignore o erro "mistura ilegal de agrupamento para operação UNION"
Em alguns sistemas de gerenciamento (comumente encontrados no MySql), quando bancos de dados e tabelas foram configurados para agrupamento, ao usar a palavra-chave UNION, o erro "combinação ilegal de agrupamento para operação UNION" será relatado. A configuração do agrupamento pode ser devido à intenção do designer do banco de dados ou à configuração padrão do MySql. No caso de utilizar união, devemos garantir que a condição de seleção de valor em cada campo deve ter o tipo de código correspondente definido. Na minha opinião, esse erro é bastante comum, principalmente para CMSs rodando Apache MySql. As pessoas podem aprender mais em: http://bugs.mysql.com/bug.php?id=57926.
Neste caso, podemos usar formas de converter para o tipo de codificação apropriado.
Por exemplo no seguinte caso:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Na consulta acima, se a coluna1 tiver agrupamento definido como Unicode-UTF8 ou _latin1, por exemplo, então o que for selecionado na coluna2 terá que ser convertido para o código correspondente. Podemos forçar o estilo da seguinte forma:
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Vemos uma desvantagem neste método de bypass: precisamos saber que o código agrupado é _latin1. A melhor maneira de contornar isso, na minha opinião, é usar as funções de codificação e decodificação hexadecimal e não hexadecimal.
![Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem Web5: Injeção de SQL – Algumas técnicas para contornar mecanismos de filtragem]()
Existem muitas outras funções que podem ser usadas em vez de hexadecimal e não hexadecimal.