En esta pequeña guía vamos a ver cómo podemos crear un tamper personalizado para una de las herramientas más usadas en inyecciones de SQLi, SQLMap. En el ejemplo planteamos un escenario para “evadir” filtros de seguridad avanzados (WAF) que buscan patrones específicos en los payloads de inyección SQL, utilizando un payload de tipo SLEEP
. Este payload introduce un retraso temporal en la respuesta del servidor para identificar vulnerabilidades de inyección SQL ciega basadas en tiempo.
Índice
- Introducción
- Descripción del Escenario
- Creación del tamper
- Implementación y Uso
- Conclusión
- Referencias
Introducción
SQLMap es una de las herramientas más poderosas y usadas para automatizadar, detectar y explotar vulnerabilidades de inyección SQL en aplicativos web. Sin embargo, muchas aplicaciones modernas ahora utilizan filtros avanzados que buscan bloquear patrones específicos en los payloads usados para realizar inyección SQL, lo que puede dificultar o impedir que SQLMap avance durante la explotación de dicha vulnerabilidad.
Para tener una oportunidad de saltar o evadir estas barreras, se utilizan tampers, que son scripts personalizados que modifican los payloads antes de enviarlos al servidor el mismo SQLMap posee algunos. Es aqui donde nos vamos a enfocar, vamos crear un tamper que obfusque la palabra clave SLEEP
, utilizada en payloads de inyección SQL ciegas basadas en tiempo, para tratar de evadir los filtros que detectan y bloquean esta palabra clave.
Descripción del Escenario
Vamos a imaginar que estamos realizando una prueba en una aplicación web que tiene un parámetro vulnerable para inyección SQL. Para determinar si existe vulnerabilidad, decidimos utilizar un payload de tipo SLEEP
, el cual introduce un retraso en la respuesta del servidor, lo que te permite inferir si la inyección SQL es exitosa en el tiempo de respuesta del servidor.
Payload Estándar
Un payload estándar para este propósito podría ser:
|
|
El payload va intentar introducir un retraso de 5 segundos en la respuesta del servidor si la inyección SQL es exitosa.
Problema
El aplicativo web utiliza filtros de seguridad que detectan y bloquean payloads que contienen la palabra clave específica como SLEEP
. Lo que significaría que el payload anterior será bloqueado, impidiendo que SQLMap realice la prueba de inyección SQL.
Solución
Para tratar de evadir este filtro, tenemos que modificar el payload estándar de manera que la palabra clave SLEEP
no sea reconocida por el filtro, pero al mismo tiempo mantenga su funcionalidad en la inyección SQL. Esto lo podemos lograr mediante el uso de un tamper que ofusca la palabra clave utilizando técnicas como la codificación hexadecimal.
Creación del tamper
Vamos a desarrollar un tamper en Python que codifica la palabra clave SLEEP
usando una representación hexadecimal, para lograr evadir filtros de manera efectiva que buscan esta palabra clave específica durante la inyección SQL.
Paso 1: Configuración Inicial
-
Entorno de Trabajo: Nos aseguramos de que SQLMap este descargado y un entorno de desarrollo Python bien configurado.
-
Directorio del tamper: Vamos a crear un directorio dedicado para guardar tus tampers si aún no lo tienes. Por ejemplo:
1
mkdir -p ~/SQLMap/misTamper
-
Archivo
__init__.py
: Dentro del directorio, creamos un archivo vacío llamado__init__.py
, esto nos servirá para que Python reconozca el directorio como un paquete.1
touch ~~/SQLMap/misTamper__init__.py
Paso 2: Desarrollo del Script
Creamos un archivo llamado sleep_tamper.py
dentro del directorio de misTamper el cual lo creamos previamente, establecemos la prioridad del script en PRIORITY.NORMAL
. Esto es para no romper la lógica de ejecución de SQLMap, ya que la herramienta prioriza otras funciones.
|
|
Definimos la función hex_encode
, la cual toma una cadena de texto como entrada y devuelve su representación en código hexadecimal URL-encoded
.
|
|
Por último, definimos la función tamper
, donde va toda la lógica de nuestro script, ofuscando la palabra clave SLEEP
en una cadena (payload) usando la función hex_encode
.
|
|
Tomando toda la estructura de nuestro script, logramos ofuscar la palabra clave SLEEP
mediante la conversión a una representación hexadecimal para evadir filtros o detección. Mientras, la función hex_encode
convierte texto a su representación hexadecimal URL-encoded
, y la función tamper
utiliza expresiones regulares para buscar palabras clave en un texto y codificarlas en hexadecimal.
El tamper completo quedaría de la siguiente manera.
|
|
Implementación y Uso
Con nuestro nuevo tamper creado, ahora podemos utilizarlo en SQLMap para evadir el filtro que bloquea la palabra clave SLEEP
.
Ejecución de SQLMap con Nuestro Tamper
Ejecutamos el siguiente comando en la terminal, reemplazando https://ejemplo.com/?id=vuln
con la URL de tu objetivo y el id
con el parámetro vulnerable.
|
|
Desglose del Comando
-u
: Especifica la URL objetivo.-p
: Indica el parámetro vulnerable.--tamper
: Indica el tamper a utilizar (sleep_tamper.py
).--technique=T
: Especifica la técnica de inyección SQL ciega basada en tiempo.--time-sec=5
: Define el tiempo de espera en segundos para detectar retrasos.-v3
: Aumenta el nivel de verbosidad para monitorear los payloads enviados.
Verificación de la Evasión Parámetro v3
Para verificar que el tamper
está realizando su función correctamente, podemos aumentar el nivel de verbosidad (-v3
) y observar los payloads que SQLMap está enviando. Deberíamos poder observar que la palabra clave SLEEP
está siendo reemplazada por su versión codificada en hexadecimal %53%4C%45%45%50(5)
.
Ejemplo de Salida
|
|
En el ejemplo de salida el payload original AND SLEEP(5)
ha sido modificado a AND %53%4C%45%45%50(5)
, lo que indica que el tamper ha funcionado correctamente.
Prueba de Funcionamiento
Al ejecutar el comando, SQLMap intentará inyectar el payload ofuscado del tamper
creado. Si la inyección SQL es exitosa, deberíamos notar un retraso en la respuesta del servidor de aproximadamente 5 segundos.
Conclusión del Proceso
El desarrollo de tampers personalizados es una técnica efectiva cuando nos enfrentamos a entornos con mecanismos de seguridad que usan algún tipo de filtro.
Esta guía puede aplicarse a otras palabras clave y técnicas de ofuscación; esto depende de las necesidades específicas y de la prueba de penetración a la que nos estemos enfrentando. La comprensión y capacidad para personalizar tampers
de SQLMap nos ayudaria significativamente la efectividad y explotación de vulnerabilidades.