1. Truncar el contenido de la consulta.
En caso de que desee ignorar los scripts en la consulta. Por ejemplo, para el procesamiento siguiente, la consulta requiere la condición active=1 pero podemos comentar (--, -- -, -+, #, /*, /**/, // , ;%00…) y ignoralo. Al minar, a menudo no sabemos qué hace el contenido restante de la consulta, por lo que usar comentarios en este caso es muy efectivo.

Después de comentar, nuestra consulta se convierte en:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
2. Omitir el filtrado de palabras clave
a. Comentarios en línea
Los comentarios en línea se utilizan de forma muy eficaz para evitar el filtrado de espacios en blanco. Puede utilizar los siguientes caracteres para omitir el filtrado de espacios en blanco: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Por ejemplo:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
O omita el filtrado de palabras clave (disponible con MySql). En el siguiente ejemplo, las palabras clave unión y contraseña están en la lista negra, por lo que han sido bloqueadas. Podemos evitarlo de la siguiente manera:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
b. Reemplazar palabras clave
Cuando explotamos la inyección SQL, a menudo utilizamos palabras clave como: unión, selección, esquema_información... En muchos casos, los programadores simplemente reemplazan esas palabras clave:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
Podemos ver fácilmente que falta el código de procesamiento anterior. Si se trata simplemente de una coincidencia de patrones, el bypass es extremadamente simple. Apliquemos la distinción entre mayúsculas y minúsculas, donde las letras mayúsculas y minúsculas se interpretan de manera diferente.
Ahora, en lugar de utilizar la palabra clave:
select, union…
Usaremos:
SeLEcT, UniOn…
La base de esta omisión es que los sistemas de gestión de bases de datos no distinguen entre palabras clave de caso y caso.
En algunos casos, la aplicación web filtrará total o parcialmente determinadas palabras clave (unión, selección...). Pasaremos por alto de la siguiente manera:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Después de que la aplicación web filtre la unión y la selección, nos quedará la consulta correcta de la siguiente manera:
id=1+union+SeLecT+1,2,3-- -
C. Codificación de caracteres
Podemos evitar cuando WAF (Web Application Firewall) bloquea palabras clave codificándolas. Muchas aplicaciones WAF solo decodificarán la consulta una vez y filtrarán las palabras clave en la lista negra, luego codificaremos la solicitud dos veces para poder omitirla en este caso.
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
3. Evite los bloques de comillas simples y dobles
- Veamos un ejemplo antes de conocer específicamente este bypass.
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
En este escenario, tenemos una tabla en la base de datos llamada usuarios. El siguiente trabajo es conocer el nombre de la columna en la tabla para obtener su información. Como en la consulta anterior, utilizamos la condición: table_name='usuarios'. Pero si WAF bloquea las comillas simples (') y las comillas dobles ("), ya no podremos usar 'usuarios' o "usuarios". Entonces, ¿cómo resolver este problema? El sistema de base de datos incorporado nos brinda una función que Resuelve muy bien este problema, que es la función CHAR( ) (para Oracle es CHR()). Por ejemplo, en la consulta anterior la omitiremos mediante:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
Los programadores de PHP están muy familiarizados con la función addlashes(). La función addlashes() tiene el efecto de agregar antes caracteres especiales como comillas simples ('), comillas dobles ("), barra invertida (\), carácter NUL (byte nulo) "\" para ayudar al sistema de administración de bases de datos. ¿No hay dificultad ni confusión al manejar cadenas que contienen esos caracteres? Por lo tanto, cuando queremos inyectar en la consulta de acuerdo con el script: nombre='algúnNombre' o '1'='1'-- Los resultados ya no son los que esperábamos.
Sin embargo, existe una técnica para omitir la función addlashes() para inyectar caracteres de comillas simples ('). Esta técnica ha sido pública durante bastante tiempo e implementarla es bastante difícil porque está ligada al estilo de codificación aplicado al sitio web.
4. Omita el error "mezcla ilegal de intercalación para la operación UNION"
En algunos sistemas de gestión (comúnmente encontrados en MySql), cuando las bases de datos y tablas se han configurado para intercalación, al utilizar la palabra clave UNION, se informará el error "mezcla ilegal de intercalación para la operación UNION". La configuración de la intercalación puede deberse a la intención del diseñador de la base de datos o a la configuración predeterminada de MySql. En caso de utilizar unión, debemos asegurarnos de que la condición de selección de valor en cada campo debe tener definido el tipo de código correspondiente. En mi opinión, este error es bastante común, especialmente para los CMS que ejecutan Apache MySql. Las personas pueden obtener más información en: http://bugs.mysql.com/bug.php?id=57926.
En este caso podemos utilizar formas de convertir al tipo de codificación apropiado.
Por ejemplo en el siguiente caso:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
En la consulta anterior, si la columna 1 tiene la intercalación establecida en Unicode-UTF8 o _latin1, por ejemplo, lo que se seleccione de la columna 2 deberá convertirse al código correspondiente. Podemos forzar el estilo de la siguiente manera:
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
Vemos un inconveniente en este método de omisión: tenemos que saber que el código intercalado es _latin1. En mi opinión, una mejor manera de evitarlo es utilizar las funciones de codificación y decodificación hexadecimal y no hexadecimal.
![Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado Web5: Inyección SQL: algunas técnicas para evitar los mecanismos de filtrado]()
Hay muchas otras funciones que se pueden utilizar en lugar de hex y unhex.