Hoy estudiando un poquito me tope con lo que el amigo pregunto, aqui dejo un extracto de un libro que lei, me parecio interesante y recordaba este tema.
Cita: 6.3. IDS Evasion
Todo este proceso de inyectar sentencias en los parámetros vulnerables no es
especialmente sigiloso, por lo que la implementación de un sistema que de-
tecte los parámetros y los evite (IDS, IPS) es relativamente sencilla. Estos siste-
mas normalmente están basados en firmas que en cuanto encuentran partes
sospechosas en las peticiones de URL, como las resultantes de utilizar senten-
cias SQL en los valores de los parámetros, detienen la conexión. También estas
sentencias son fácilmente detectables al consultar los
logs
del sistema.
Las técnicas de evasión tratan de “ocultar” lo que están realizando realmente
las sentencias que lanza el atacante. Al estar los sistemas de detección basados
en firmas, se trata de intentar ejecutar acciones maliciosas modificando la sin-
taxis habitual para que no coincidan con dichas firmas. Para ello, lo mejor es
usar distintas codificaciones. Normalmente los IDS no recodifican las senten-
cias para poder aplicar la comprobación de firmas por una cuestión de eficien-
cia, lo que se puede aprovechar para evitarlos. Existen varias codificaciones
que se pueden utilizar como UTF-8, URL-encoding, codificación hexadecimal,
etc. Todas estas codificaciones suele entenderlas la base de datos a la que llega
la consulta final, pero puede que no el IDS.
Por ejemplo, supongamos que un IDS corte cualquier conexión que contenga
el literal “unión”, de modo que la siguiente inyección no sería efectiva:
idlibro = 1' union @@version -
Un primer intento de evitar el IDS sería cambiando la codificación:
URL-encoding32: 117 110 105 111 110 32 64 64 118 101 114 115 105 111 110 32 45 45
Base 64: encodingIHVuaW9uIEBAdmVyc2lvbiAtLQ==
Hex-encoding20: 75 6e 69 6f 6e 20 40 40 76 65 72 73 69 6f 6e 20 2d 2d
Esta codificación hay que adaptarla para enviarla mediante la herramienta con
la que se realiza la inyección (puede ser un simple navegador). Por ejemplo,
con URL
encoding
hay que introducir el carácter % delante de cada código nu-
mérico, en Hex
encoding
hay que introducir 0x antes de cada valor hexadeci-
mal, etc.
Por otra parte, hay una serie de sentencias que se utilizan habitualmente, como
las que se ven en la parte de inyección ciega, como pueden ser “or 1=1” o
similares. En estos casos, es recomendable utilizar sentencias equivalentes pero
distintas, como puede ser
“or 84847=84847”
supongo (por que no lo he probado) yo que introduciendo imaginemos OR 1=1 en su correspondiente binario este podria ser codificado por la base de datos en la consulta final, a eso es a lo que se refiere la pregunta verdad? yo estuve creando un modulo de seguridad que detecta ataques sql injection y la verdad tengo la lista negra de comandos la tengo hasta en binario por si las moscas , en utf-8 , base64 , hex , urlencode , etc.....