Introducción
En las pruebas de penetración y el análisis de aplicaciones web, se utilizan herramientas como Burp Suite Intruder para enviar un gran número de solicitudes a un objetivo. Una característica clave en este proceso es "Grep - Match", que le permite marcar automáticamente las respuestas que contienen palabras clave específicas (por ejemplo, "Welcome", "Login successful", "admin_access_granted"). Esto le ayuda a examinar rápidamente miles de respuestas para encontrar las interesantes.
En este laboratorio, aprenderá a replicar esta potente funcionalidad "Grep - Match" utilizando herramientas estándar de la línea de comandos de Linux. Utilizará curl para realizar solicitudes HTTP, un bucle de shell para automatizar el proceso para una lista de payloads, y grep para buscar una palabra clave de éxito en las respuestas. Esta es una habilidad fundamental para cualquier persona interesada en la automatización de la seguridad y la scripting.
En Intruder > Opciones, Desplácese a la Sección 'Grep - Match'
En una herramienta GUI como Burp Suite, este es el paso donde navegaría al panel de opciones para configurar sus reglas de coincidencia. En nuestro entorno de línea de comandos, la acción equivalente es preparar nuestros componentes necesarios: la lista de payloads y la URL de destino.
El proceso de configuración ya ha creado un archivo llamado payloads.txt en su directorio ~/project. Este archivo contiene una lista de valores potenciales que queremos probar contra la aplicación web, sirviendo al mismo propósito que una lista de payloads de Intruder.
Veamos el contenido de este archivo.
cat ~/project/payloads.txt
Debería ver la siguiente salida:
orange
banana
apple
grape
mango
Nuestra aplicación de destino es un servidor web simple que se ejecuta en http://localhost:8000. Probaremos cada payload contra este destino.
Borrar las Reglas Predeterminadas
En Burp Suite, normalmente borraría cualquier regla preexistente o predeterminada para asegurarse de que solo está coincidiendo con lo que usted define explícitamente. Para nuestra simulación, esto significa establecer una línea base realizando una única solicitud con un payload "fallido" conocido. Esto nos ayuda a comprender cómo se ve una respuesta normal e infructuosa.
Usemos curl para realizar una solicitud al servidor con el payload orange, que sabemos que no es el correcto.
curl "http://localhost:8000/?item=orange"
El comando obtendrá la página web e imprimirá su código fuente HTML en la terminal. La salida debería verse así:
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<script>
const params = new URLSearchParams(window.location.search);
if (params.get("item") === "apple") {
document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
} else {
document.body.innerHTML = "<h1>Item not found.</h1>";
}
</script>
</body>
</html>
Observe la lógica de JavaScript y el texto resultante "Item not found". Esta es nuestra respuesta de "fallo" de línea base.
Añadir una Nueva Regla para Coincidir con una Palabra Clave de Éxito (por ejemplo, 'Welcome', 'Logged in')
Este es el núcleo de la técnica "Grep - Match". Necesitamos definir una cadena o patrón único que solo aparecerá en una respuesta "exitosa". Observando el HTML del paso anterior, podemos ver que una solicitud exitosa (donde item=apple) resultará en el texto "Welcome to the secret page!". La palabra clave "Welcome" es un candidato perfecto para nuestra regla.
Podemos usar el comando grep para filtrar la salida de curl y verificar la existencia de nuestra palabra clave. La bandera -s para curl se utiliza para ejecutarlo en modo silencioso, lo que oculta el medidor de progreso.
Primero, probemos esta regla contra un payload fallido. Este comando no debería producir ninguna salida, porque la palabra "Welcome" no está en la respuesta.
curl -s "http://localhost:8000/?item=orange" | grep "Welcome"
Ahora, probémoslo contra el payload exitoso conocido, apple.
curl -s "http://localhost:8000/?item=apple" | grep "Welcome"
Esta vez, grep encuentra una coincidencia e imprime la línea que contiene la palabra clave:
document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';
La tubería (|) y el comando grep "Welcome" juntos forman nuestra regla "Grep - Match". Hemos creado con éxito una forma de distinguir una respuesta exitosa de una fallida.
Ejecutar un Ataque Intruder
Un "ataque Intruder" es simplemente el proceso de automatizar nuestra solicitud para cada payload en nuestra lista. Podemos lograr esto con un simple bucle de shell. El bucle leerá cada línea de payloads.txt, ejecutará nuestro comando curl | grep para él y nos mostrará los resultados.
Para hacer la salida más limpia y similar a una tabla de resultados, crearemos un pequeño script de shell. Use el editor nano para crear un nuevo archivo llamado attack.sh.
nano attack.sh
Ahora, copie y pegue el siguiente script en el editor nano:
#!/bin/bash
echo "Payload,Found"
for payload in $(cat ~/project/payloads.txt); do
response=$(curl -s "http://localhost:8000/?item=$payload")
if echo "$response" | grep -q "Welcome"; then
echo "$payload,True"
else
echo "$payload,False"
fi
done
Este script primero imprime una cabecera (Payload,Found). Luego, itera a través de cada payload. Dentro del bucle, utiliza grep -q (modo silencioso) para buscar la palabra clave "Welcome". Si la encuentra, imprime el payload seguido de True; de lo contrario, imprime False.
Presione Ctrl+X, luego Y, y Enter para guardar el archivo y salir de nano.
A continuación, haga que el script sea ejecutable:
chmod +x attack.sh
Finalmente, ejecute el ataque:
./attack.sh
Observar la Nueva Columna en la Tabla de Resultados para su Coincidencia
Después de ejecutar el script en el paso anterior, verá una salida limpia y similar a una tabla en su terminal.
Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False
Esta salida es el equivalente en línea de comandos de la tabla de resultados en Burp Suite Intruder. La primera columna lista el payload que se probó, y la segunda columna, que nombramos "Found", actúa como nuestro indicador "Grep - Match".
Simplemente escaneando esta segunda columna en busca del valor True, puede identificar inmediatamente el payload exitoso. Como puede ver, la línea apple,True destaca claramente, indicándonos que el payload apple resultó en una respuesta que contenía nuestra palabra clave objetivo. Esto demuestra cuán efectiva es la técnica para encontrar agujas en un pajar de respuestas HTTP.
Resumen
En este laboratorio, simuló con éxito la función "Grep - Match", una piedra angular de muchas herramientas automatizadas de seguridad web. Aprendió a combinar varias herramientas fundamentales de la línea de comandos de Linux para lograr un resultado potente.
Practicó:
- Usar
curlpara realizar solicitudes web desde la terminal. - Usar
greppara buscar palabras clave específicas dentro de los datos de respuesta. - Escribir un bucle
forde shell para automatizar una tarea para una lista de entradas. - Combinar estas herramientas en un solo script para probar sistemáticamente payloads e identificar intentos exitosos.
Este enfoque de línea de comandos no solo es una excelente manera de comprender cómo funcionan las herramientas sofisticadas internamente, sino que también es una habilidad extremadamente flexible y potente para sus propias tareas de automatización y scripting de seguridad personalizadas.
