Tutorial de Burp Suite V – Burp Suite Intruder
Ahora que ya sabemos qué es Burp Suite, cómo configurarlo, sabemos interceptar peticiones con el proxy y también somos capaces de construir el site map de la web que estamos auditando, ya casi estamos listos para llevar a cabo nuestro primer ataque. En esta entrada del tutorial de Burp Suite vamos a ver el componente llamado «Intruder». Esta herramienta está disponible en la versión gratuita de Burp Suite, aunque un poco limitada en recursos y en funcionalidad con respecto a la versión Burp Suite Professional.
Índice de contenidos
- 1 Burp Suite Intruder
- 2 Target
- 3 Positions
- 4 Payloads
- 4.1 Payload Sets
- 4.1.1 Simple List
- 4.1.2 Runtime file
- 4.1.3 Custom Iterator
- 4.1.4 Character substitution
- 4.1.5 Case modification
- 4.1.6 Recursive grep
- 4.1.7 Illegal Unicode
- 4.1.8 Character blocks
- 4.1.9 Numbers
- 4.1.10 Dates
- 4.1.11 Brute forcer
- 4.1.12 Null payloads
- 4.1.13 Character frobber
- 4.1.14 Bit flipper
- 4.1.15 Username generator
- 4.1.16 ECB block shuffler
- 4.2 Payload processing
- 4.3 Payload encoding
- 4.1 Payload Sets
- 5 Options
Burp Suite Intruder
Burp Suite Intruder es una herramienta para automatizar ataques personalizados contra aplicaciones web. Es extremadamente potente y configurable, y se puede utilizar para realizar una amplia variedad de tareas. Con Burp Suite Intruder podemos realizar desde ataques para identificar directorios web o formularios de login hasta explotación activa de vulnerabilidades de inyección SQL.
Burp Suite Intruder funciona a partir de una petición HTTP interceptada. El Intruder modifica la petición automáticamente, envía la versión modificada al servidor y analiza las respuestas de la aplicación para identificar características interesantes. Este proceso lo hace varias veces por segundo de forma automática, por lo que convierte a este componente en una herramienta muy potente para ataques de fuerza bruta.
Por cada ataque se debe especificar uno o más payloads. Un payload es un conjunto de datos a transmitir o de datos «útiles». En el ejemplo que veremos en la siguiente entrada de este tutorial usaremos dos payloads. Uno será el conjunto de posibles nombres de usuario y el otro será el conjunto de posibles contraseñas. En Burp Suite Intruder, además de indicar los payloads, se debe indicar también en qué posición se va a insertar cada uno de ellos.
El panel de Burp Suite Intruder permite configurar múltiples ataques al mismo tiempo. Cada uno en su propia pestaña numerada. Si accedemos a la pestaña «Intruder» en Burp Suite por primera vez, veremos una subpestaña numerada con un «1». Esta subpestaña contiene a su vez cuatro pestañas más, que definimos a continuación.
Target
Aquí se configuran los detalles del servidor que será objetivo del ataque, como el host (ya sea un dominio o IP), el puerto y si se requiere usar HTTPS o no. Para nuestro ejemplo esta pestaña no nos será útil.
Positions
En esta vista encontramos el contenido de la petición que va a ser modificada y reenviada. Aquí es donde definiremos el lugar de la petición en el que se insertarán los payloads. En el ejemplo veremos cómo indicar a Burp Suite Intruder dónde insertar datos del payload.
Además, aquí elegiremos el tipo de ataque que se va a llevar a cabo. Los tipos de ataque son:
Sniper
El tipo de ataque «sniper» usa un solo payload. En el caso de que se esté haciendo un ataque por fuerza bruta usando este método para, por ejemplo, intentar averiguar IDs de usuario válidos enviando posibles IDs en una consulta por URL, Burp Suite Intruder usaría solamente un posible número de ID por cada petición. En el caso en que se hayan indicado varias posiciones en las que introducir datos del payload en el contenido de la petición, se aplicará cada una de las posibilidades del conjunto de datos del payload primero a una de las posiciones y luego a la otra, pero no se insertarán en las dos posiciones a la vez. Por lo tanto, el número de solicitudes que Burp Suite Intruder hará al servidor objetivo será el producto del número de datos del payload y el número de posiciones indicadas en el cuerpo de la petición.
Battering ram
Este tipo de ataque, al igual que el «sniper», usa un solo payload. Sin embargo, a diferencia del «sniper», éste sí coloca el dato a insertar en todas las posiciones a la vez. Este ataque es útil, por lo tanto, cuando se requiere que se inserte la misma entrada en varios lugares dentro de la petición. El número de peticiones que hará Burp Suite Intruder en este caso será, por tanto, igual al número de datos del payload.
Pitchfork
«Pitchfork» usa varios payloads. En este tipo de ataque hay un payload específico (hasta un máximo de 20) para cada posición indicada en el cuerpo de la petición. El ataque itera a través de todos los payloads a la vez y coloca el dato de esa posición en la posición correspondiente del cuerpo de la petición. Es decir, primero coloca el primer dato del payload 1 en la posición 1 de la petición, el primer dato del payload 2 en la posición 2 de la petición, el primer dato del payload 3 en la posición 3 de la petición… Luego el segundo dato del payload 1 en la posición 1 de la petición, el segundo dato del payload 2 en la posición 2 de la petición, el segundo dato del payload 3 en la posición 3 de la petición… Y así sucesivamente. Este tipo de ataque es útil cuando requiere rellenar datos diferentes en entradas diferentes pero relacionadas entre sí. Por ejemplo, un nombre de usuario en un campo y un número de ID conocido correspondiente a ese nombre de usuario en otro campo diferente. El número de peticiones que hará Burp Suite Intruder en este caso será el número de posibilidades que ofrece el payload más pequeño.
Cluster bomb
Este tipo de ataque, al igual que «pitchfork», usa varios payloads. En este tipo de ataque también hay un payload específico (hasta un máximo de 20) para cada posición indicada en el cuerpo de la petición. Sin embargo, a diferencia del anterior, este tipo de ataque prueba todas las posibles combinaciones de payloads. Por ejemplo, en el caso de que se hubieran indicado dos posiciones en el cuerpo de la petición, Burp Suite Intruder primero coloca el primer dato del payload 1 en la posición 1 de la petición, y manteniendo este dato siempre en esta posición, itera el payload 2 por completo colocando cada posible dato en la posición 2 del cuerpo de la petición. Esto genera tantas peticiones como datos posibles tenga el payload 2, pero la posición 1 del cuerpo de la petición siempre tendrá el primer dato del payload 1. Cuando se llegue al final del payload 2, Burp Suite Intruder coloca el segundo dato del payload 1 en la posición 1 del cuerpo, y vuelve a iterar todo el payload 2 hasta llegar al final. Y así sucesivamente hasta llegar al final del payload 1. Este ataque es útil cuando requiere datos diferentes en campos diferentes sin relación conocida entre ellos. Por ejemplo, para averiguar mediante un ataque con diccionarios un usuario y su contraseña. El número total de solicitudes generadas en el ataque es el producto de la cantidad de datos de todos los payloads, lo que puede ser extremadamente grande.
Payloads
Esta pestaña se usa para configurar uno o más payloads. La cantidad de payloads permitidos depende del tipo de ataque seleccionado en la pestaña «Positions». Esta pestaña tiene varias secciones:
Payload Sets
En esta sección se selecciona el payload que se va a configurar (numerado desde el 1 hasta, como máximo, el 20, en función de las posiciones indicadas en el cuerpo del mensaje) y el tipo de payload. Hay 16 tipos de payloads.
Simple List
Es el tipo de payload más simple. Consiste en una simple lista de palabras o cadenas de caracteres. Estas cadenas se van agregando al payload escribiéndolas en el cuadro de texto de la sección «Payload Options» y haciendo clic en «Add». En la versión Professional de Burp Suite se pueden seleccionar listas de cadenas ya preparadas del listado desplegable que hay debajo del cuadro de texto.
Runtime file
Este tipo de payload permite cargar un archivo desde el cual Burp Suite Intruder irá leyendo las cadenas de caracteres al tiempo que se va ejecutando el ataque. De esta forma, si tenemos una lista muy larga de posibles datos para el payload, no es necesario mantener toda la lista en memoria. El archivo a usar se indica en la sección «Payload Options».
Custom Iterator
Este payload permite configurar múltiples listas de elementos para generar datos del payload utilizando todas las permutaciones posibles de los elementos de las listas. Por ejemplo, supongamos el caso en el que sabemos que el dato a introducir en una de las posiciones del cuerpo de la petición es del tipo «AB/12», en el que «AB» son dos letras, que pueden ser iguales o no, y «12» son dos cifras, que pueden ser iguales o no, y que siempre van separadas por una «/». Entonces podríamos configurar este payload con una lista que tenga las letras desde la «A» hasta la «Z» y otra lista que vaya desde el «0» hasta el «9».
Con el tipo «Custom Iterator» indicaríamos a Burp Suite Intruder que en las posiciones 1 y 2 del campo (que no del cuerpo de la petición) debe ir una de las posibles letras de la lista que va de la «A» a la «Z», que en la posición 3 del campo va una «/» como separador, y que en las posiciones 4 y 5 debe ir una de las posibles cifras de la lista que va del «0» al «9». En esta caso, Burp Suite Intruder introduciría en la posición del cuerpo de la petición correspondiente a este payload primero AA/00, luego AA/01, AA/02…AB/00, AB/01… Hasta llegar a ZZ/99.
Igual que en los tipos de payload anteriores, éste se configura en la sección «Payload Options», en la que puedes elegir la posición dentro del campo en la que insertar los elementos de la lista y el separador entre las listas.
Character substitution
Este payload permite configurar una lista de cadenas y aplicar varias sustituciones de caracteres a cada elemento. Por ejemplo, con las reglas de sustitución predeterminadas (que incluyen e>3 yt>7), la cadena «peter» generará las siguientes combinaciones: peter, p3ter, pe7er, p37er, pet3r, p3t3r, pe73r y p373r. Puede ser útil en los ataques de adivinación de contraseñas, para generar variaciones comunes en las palabras del diccionario.
Case modification
Este payload permite configurar una lista de cadenas y aplicar varias reglas de modificación a cada una de ellas. Igual que el payload anterior, este payload puede ser útil en los ataques de adivinación de contraseñas, para generar variaciones comunes en las palabras del diccionario. Se pueden seleccionar las siguientes reglas de modificación:
- No change: La cadena se usa sin modificaciones.
- To lower case: Todas las letras de la cadena se convierten a minúsculas.
- To upper case: Todas las letras de la cadena se convierten a mayúsculas.
- To Propername: La primera letra de la cadena se convierte a mayúscula y las letras siguientes se convierten en minúsculas.
- To ProperName: La primera letra de la cadena se convierte a mayúscula y las letras siguientes no cambian
Recursive grep
Este payload permite extraer cada payload de la respuesta anterior del ataque. Es útil en algunas situaciones en las que se necesita trabajar recursivamente para extraer datos útiles o producir un exploit. Este payload funciona junto con la función extract grep, que se usa para extraer parte de una respuesta que contiene información interesante. El texto extraído de la respuesta anterior en el ataque se usa como dato del payload para la petición actual. Esto puede ser usado para varias tareas. Por ejemplo, es posible extraer los contenidos de una base de datos mediante inyección de SQL mediante la inyección recursiva de consultas del formulario:
UNION SELECT name FROM sysobjects WHERE name > 'a'
El mensaje de error del servidor revela el nombre del primer objeto de base de datos:
Syntax error converting the varchar value 'accounts' to a column of data type int
La consulta se repite utilizando «accounts» para identificar el siguiente objeto. Esta tarea se puede automatizar fácilmente utilizando el payload «Recursive grep» para enumerar rápidamente todos los objetos de la base de datos.
Illegal Unicode
Este payload se puede usar para generar representaciones de caracteres Unicode ilegales. A veces es efectivo eludir filtros diseñados para bloquear ciertos caracteres, por ejemplo, defensas contra ataques de rutas de archivos que coinciden con las codificaciones esperadas de las secuencias ../ y ..\. Illegal Unicode opera en una lista de elementos, y genera una cantidad de payloads de cada elemento reemplazando un carácter especificado dentro de cada elemento con codificaciones Unicode ilegales de otro carácter. Las opciones disponibles se describen a continuación:
- Overlong UTF-8 encodings: El esquema de codificación Unicode permite utilizar hasta 6 bytes para representar un solo carácter. Los caracteres ASCII básicos (0x00 – 0x7F) se representan correctamente utilizando un solo byte. Sin embargo, es posible representarlos en el esquema Unicode usando más de un byte (codificación «overlong» o «muy larga»). Esta opción se usa para especificar si se debe usar una codificación más larga y, de ser así, para establecer el tamaño máximo que se debe usar.
- Illegal UTF-8 continuation bytes: Estas opciones están disponibles si se selecciona una longitud UTF-8 máxima de 2 bytes o más:
- Do ilegal UTF-8 continuation bytes: Cuando un carácter está codificado con más de un byte, los bytes que siguen al primero deben tomar la forma binaria 10xxxxxx, para designar que son bytes de continuación. Sin embargo, los bits más significativos del primer byte también identifican cuántos bytes de continuación seguirán, por lo que las rutinas de decodificación Unicode pueden ignorar sin problemas los primeros 2 bits de los bytes de continuación. Esto significa que son posibles tres variantes ilegales de cada byte de continuación, con las formas binarias 00xxxxxx, 01xxxxxx y 11xxxxxx. Si se selecciona esta opción, se generarán 3 codificaciones adicionales para cada byte de continuación.
- Maximize permutations in multi-byte encodings: Esta opción está disponible si se selecciona una longitud máxima de UTF-8 de 3 bytes o más, y se selecciona «Do UTF-8 ilegal». Si la opción «Maximize permutations in multi-byte encodings» no está seleccionada, Burp Suite trabajará en un byte de continuación cada vez cuando genere variantes ilegales. Para cada byte de de continuación, se generarán las tres variantes ilegales y los otros bytes de continuación se mantendrán sin cambios. Sin embargo, si se selecciona, Burp Suite generará todas las pemutaciones de variantes ilegales para bytes de continuación, es decir, se modificará simultáneamente más de un byte de continuación. Esta característica puede ser útil para intentar eludir los controls avanzados de coincidencia de patrones, al generar un número mucho mayor de diferentes codificaciones ilegales.
- Do ilegal UTF-8 continuation bytes: Cuando un carácter está codificado con más de un byte, los bytes que siguen al primero deben tomar la forma binaria 10xxxxxx, para designar que son bytes de continuación. Sin embargo, los bits más significativos del primer byte también identifican cuántos bytes de continuación seguirán, por lo que las rutinas de decodificación Unicode pueden ignorar sin problemas los primeros 2 bits de los bytes de continuación. Esto significa que son posibles tres variantes ilegales de cada byte de continuación, con las formas binarias 00xxxxxx, 01xxxxxx y 11xxxxxx. Si se selecciona esta opción, se generarán 3 codificaciones adicionales para cada byte de continuación.
- Illegal hex characters: Estas opciones controlan cómo se representan las secuencias de bytes generadas usando notación hexadecimal:
- Do ilegal hex: Cuando la lista de elementos codificados ilegalmente se ha generado utilizando overlong encoding y variantes ilegales de bytes de continuación, es posible modificar la codificación hexadecimal de las secuencias de bytes resultantes para confundir ciertos controles de coincidencia de patrones. La codificación hexadecimal utiliza los caracteres A – F para representar los valores decimales 10 – 15. Sin embargo, algunos decodificadores hexadecimales interpretan G como decimal 16, H como decimal 17, etc. Así que 0x1G puede interpretarse como decimal 32. Además, si los caracteres hexadecimales son ilegales se utilizan en la primera posición de un código hexadecimal de dos dígitos, luego la decodificación resultante desborda el valor máximo de un solo byte y, en esta situación, algunos decodificadores hexadecimales solo usan los 8 bits menos significativos del número resultante. Así que 0xG1 se puede decodificar como decimal 257, que luego se interpreta como decimal 1. Cada código hexadecimal legal de dos dígitos tiene entre 4 y 6 representaciones hexadecimales ilegales correspondientes que se interpretan como el mismo código hexadecimal si se decodifican como se ha descrito unas líneas más arriba. Si se selecciona la opción «Do ilegal hex», Burp Suite generará todas las codificaciones hexadecimales ilegales posibles de cada byte en la lista de elementos codificados ilegalmente.
- Maximize permutations in multi-byte encodings: Esta opción está disponible si se selecciona una longitud máxima de UTF-8 de 2 bytes o más, y se selecciona «Do ilegal hex». Si la opción «Maximize permutations in multi-byte encodings» no está seleccionada, entonces Burp Suite trabajará en un byte de continuación cada vez cuando genere hexadecimales ilegales. Para cada byte, se generarán entre 4 y 6 codificaciones hexadecimales ilegales y los otros bytes se mantendrán sin cambios. Sin embargo, si se selecciona la opción «maximizar las permutaciones», Burp Suite generará todas las permutaciones de hexadecimales ilegales para todos los bytes, es decir, más de un byte se modificará simultáneamente. Esta característica puede ser útil para intentar eludir los controles avanzados de coincidencia de patrones, al generar un número mucho mayor de diferentes codificaciones ilegales.
- Do ilegal hex: Cuando la lista de elementos codificados ilegalmente se ha generado utilizando overlong encoding y variantes ilegales de bytes de continuación, es posible modificar la codificación hexadecimal de las secuencias de bytes resultantes para confundir ciertos controles de coincidencia de patrones. La codificación hexadecimal utiliza los caracteres A – F para representar los valores decimales 10 – 15. Sin embargo, algunos decodificadores hexadecimales interpretan G como decimal 16, H como decimal 17, etc. Así que 0x1G puede interpretarse como decimal 32. Además, si los caracteres hexadecimales son ilegales se utilizan en la primera posición de un código hexadecimal de dos dígitos, luego la decodificación resultante desborda el valor máximo de un solo byte y, en esta situación, algunos decodificadores hexadecimales solo usan los 8 bits menos significativos del número resultante. Así que 0xG1 se puede decodificar como decimal 257, que luego se interpreta como decimal 1. Cada código hexadecimal legal de dos dígitos tiene entre 4 y 6 representaciones hexadecimales ilegales correspondientes que se interpretan como el mismo código hexadecimal si se decodifican como se ha descrito unas líneas más arriba. Si se selecciona la opción «Do ilegal hex», Burp Suite generará todas las codificaciones hexadecimales ilegales posibles de cada byte en la lista de elementos codificados ilegalmente.
- Hex formatting: Estas opciones controlan el aspecto de los payloads con codificaciones hexadecimal.
- Use lower case alpha characters: Esta opción determina si los caracteres del alfabeto en minúsculas o mayúsculas se utilizarán en los códigos hexadecimales.
- Add % prefix before each byte: Si se selecciona esta opción, entonces se insertará el carácter % antes de cada código hexadecimal de dos dígitos, para codificar efectivamente los payloads generados mediante URL.
- Use lower case alpha characters: Esta opción determina si los caracteres del alfabeto en minúsculas o mayúsculas se utilizarán en los códigos hexadecimales.
- Total encodings: Esta opción muestra una mejor estimación del número de codificaciones, en función del resto de la configuración, y también te permite especificar un límite máximo en el número de codificaciones ilegales que se generarán. Esto puede ser útil si se utilizan grandes overlong encondings o si se han seleccionado permutaciones máximas, ya que estas opciones pueden generar un gran número de codificaciones ilegales.
- Match / replace in list items: Estas opciones controlan el reemplazo de caracteres dentro de los elementos de la lista:
- Match character: Este es el carácter que se reemplazará dentro de cada elemento de la lista. Debes usar un carácter ficticio como * en los elementos de tu lista, para indicar dónde deben ocurrir los reemplazos.
- Replace with encodings of: Este es el carácter para el cual se derivarán las codificaciones ilegales, para reemplazar el carácter de coincidencia original dentro de cada elemento de la lista. Esta opción se puede especificar utilizando el propio carácter ASCII o el código hexadecimal de dos dígitos para el carácter. Es útil para especificar caracteres ASCII no imprimibles, como nulo.
- Match character: Este es el carácter que se reemplazará dentro de cada elemento de la lista. Debes usar un carácter ficticio como * en los elementos de tu lista, para indicar dónde deben ocurrir los reemplazos.
Character blocks
Este tipo de payload genera payloads basados en bloques de un carácter o cadenas de caracteres específicos. Puede ser útil para detectar desbordamientos de búfer (overflow) y otras vulnerabilidades de condiciones de contorno en software que se ejecuta en un contexto nativo. También se puede utilizar para explotar algunos errores lógicos donde las entradas con una longitud particular pasa los filtros de entrada o desencadena una ruta de código inesperada. Este tipo de payload tiene las siguientes opciones disponibles:
- Base string: esta es la cadena de entrada a partir de la cual se generarán los bloques de caracteres.
- Min length: es el tamaño del bloque más pequeño que se generará.
- Max length: es el tamaño del bloque más grande que se puede generar.
- Step: es el incremento en la longitud de cada bloque de caracteres.
Numbers
Este tipo de payload genera payloads numéricos dentro de un rango determinado y en un formato específico. Cuenta con las siguientes opciones:
- Number range:
- Type: Esta opción especifica si los números deben generarse en una secuencia definida o al azar.
- From: Si los números se generan secuencialmente, este es el valor del primer número que se generará. De lo contrario, es el número más pequeño posible que puede generarse aleatoriamente.
- To: Si los números se generan secuencialmente, este es el valor del último número que se generará (o el valor más cercano tras aplicar el incremento por última vez). De lo contrario, es el número más alto posible que puede generarse aleatoriamente.
- Step: Esta opción está disponible cuando los números se generan de forma secuencial y especifica el incremento entre números sucesivos. El valor puede ser negativo, en cuyo caso los números generados se reducirán.
- How many: Esta opción está disponible cuando los números se generan aleatoriamente y especifica la cantidad de valores que se generarán. Ten en cuenta que se pueden generar valores duplicados.
- Number format:
- Base: Esta opción especifica si los números deben generarse en forma decimal o hexadecimal.
- Min integer digits: Este es el número mínimo de dígitos enteros que tendrá cada número. Los números con menos dígitos enteros se rellenarán con ceros en el lado izquierdo.
- Max integer digits: Este es el número máximo de dígitos enteros que tendrá cada número. Los números con más dígitos enteros se truncarán, perdiendo sus dígitos enteros más significativos.
- Min fraction digits: Este es el número mínimo de dígitos de fracción que tendrá cada número. Los números con menos dígitos de fracciones se rellenarán con ceros en el lado derecho. Esta opción no está disponible cuando se generan números hexadecimales.
- Max fraction digits: Este es el número máximo de dígitos de fracción que tendrá cada número. Los números con más dígitos de fracciones se truncarán, perdiendo sus dígitos de fracción menos significativos. Esta opción no está disponible cuando se generan números hexadecimales.
Dates
Este tipo de payload genera payloads de fecha dentro de un rango determinado y en un formato específico. Este tipo de payload puede ser útil durante la extracción de datos (por ejemplo, rastrear un libro de pedidos para entradas colocadas en días diferentes) o para fuerza bruta (por ejemplo, adivinar la fecha de nacimiento de las credenciales de un usuario). Para este payload están diponibles las siguientes opciones:
- From: Es la primer fecha (y la más antigua) que se generará.
- To: Es el valor de la última (y la más adelantada en el tiempo) fecha que se generará (o la más cercana a la fecha resultante de aplicar el incremento la última vez de forma que, si se aplicara una vez más, superase a la fecha indicada en este campo).
- Step: Es el incremento entre fechas sucesivas, en días, semanas, meses o años. Debe ser un valor positivo.
- Format: Es el formato en el que se deben representar las fechas. Se pueden seleccionar varios formatos de fecha predefinidos, o se puede ingresar un formato de fecha personalizado en el campo de texto.
Brute forcer
Este tipo genera payloads de longitudes especificadas que contienen todas las permutaciones de un conjunto de caracteres especificado. Para este tipo están disponibles las siguientes opciones:
- Character set: El conjunto de caracteres que se utilizará en el payload. Ten en cuenta que el número total de payloads aumenta exponencialmente con el tamaño de este conjunto.
- Min length: La longitud del payload más corto.
- Max length: La longitud del payload más largo.
Null payloads
Este tipo genera cargas cuyo valor es una cadena vacía. Este tipo de payload es útil cuando un ataque requiere que se realice la misma solicitud repetidamente, sin ninguna modificación a la plantilla básica. Esto se puede usar para una variedad de ataques, por ejemplo, recolección de cookies para el análisis de secuencia, ataques de denegación de servicio o mantener vivo un token de sesión que está siendo utilizado para otras pruebas intermitentes.
Character frobber
Este tipo toma una cadena de caracteres como entrada y modifica el valor de cada posición de la cadena dada por cada iteración incrementando en uno el código ASCII de cada carácter. Este tipo de payload es útil cuando se prueban qué valores de parámetros, o partes de valores, tienen un efecto en la respuesta de la aplicación. En particular, puede ser útil cuando se prueban qué partes de un token de sesión compleja se están utilizando para rastrear el estado de la sesión. Si la modificación del valor de un carácter individual dentro del token de la sesión todavía hace que su solicitud se procese dentro de su sesión, es probable que este carácter en el token no se esté utilizando para rastrear su sesión.
Bit flipper
Este tipo opera en una entrada y modifica el valor del bit en una posición cada vez invirtiéndolo. Esto puede ser útil en situaciones similares al tipo Character frobber, pero donde necesita un control más preciso. Por ejemplo, si los tokens de sesión y otros valores de parámetros contienen datos significativos cifrados con un cifrado de bloque en el modo CBC, puede ser posible cambiar partes de los datos descifrados sistemáticamente modificando los bits dentro del bloque de cifrado anterior. En esta situación, puede usar este tipo para determinar los efectos de modificar bits individuales dentro del valor cifrado, y comprender si la aplicación puede ser vulnerable. Este tipo de payload tiene disponibles las siguientes opciones:
- Operate on: Esta opción permite especificar si deseas operar en el valor base de la posición del payload, o en otra cadena.
- Format of original data: Esta opción permite especificar si el generador debe operar con el valor literal de los datos originales, o debe tratarlo como un código hexadecimal ASCII.
- Select bits to flip: Esta opción le permite especificar qué bits de cada byte se deben invertir, desde el bit menos significativo hasta el bit más significativo.
Username generator
Este tipo de payload permite configurar una lista de nombres o direcciones de correo electrónico, y devuelve nombres de usuarios potenciales a partir de estos utilizando varios esquemas comunes. Por ejemplo, al proporcionar el nombre «peter weiner» da como resultado hasta 115 nombres de usuario posibles, entre los que podemos encontrar peterweiner, peter.weiner, weinerpeter, weiner.peter, peter, weiner, peterw, peter.w, wpeter, w.peter, etc. Los elementos de la lista se pueden editar de la misma manera que se describe en el tipo Simple List. También se puede configurar un número máximo de resultados a generar.
ECB block shuffler
Este tipo se puede utilizar para mezclar bloques de texto cifrado en datos cifrados con ECB, a fin de modificar de manera significativa el texto claro descifrado y potencialmente interferir en la lógica de la aplicación. Debido a que los cifrados de ECB cifran cada bloque de texto sin formato independientemente de otros, los bloques idénticos de texto sin formato se cifran en bloques de texto cifrado idénticos (siempre que se use la misma clave), y viceversa. Por lo tanto, es posible mezclar bloques dentro de una gran porción de texto cifrado con el efecto de mezclar los bloques correspondientes de texto plano cifrado. En algunos datos (como un token de sesión estructurado con campos para nombre de usuario, ID de usuario, rol y una marca de tiempo) puede ser posible alterar significativamente el contenido de los datos desencriptados para interferir con el procesamiento de la aplicación y llevar a cabo acciones no autorizadas. Este tipo tiene disponibles las siguientes opciones:
- Encrypted data to shuffle: Esta opción permite especificar si se desea operar en el valor base de la posición o en otra cadena.
- Format of original data: Esta opción permite especificar si el generador debe funcionar con el valor literal de los datos originales, o debe ser tratado como un ASCII hexadecimal.
- Block size: Aquí se puede indicar el tamaño en bytes de los bloques cifrados. En la mayoría de los casos, los bloques tienen un tamaño de 8 o 16 bytes. Si no está seguro, debe ejecutar el ataque varias veces utilizando cada tamaño de bloque que pueda estar en uso.
- Additional encrypted strings: Esta lista permite proporcionar opcionalmente una lista de cadenas cifradas que utilizan el mismo cifrado y la clave, para proporcionar bloques adicionales para barajar en los datos cifrados. Debido a que los ataques exitosos de este tipo a menudo requieren un grado considerable de suerte, en términos de encontrar un bloque con un valor de texto plano adecuado que se pueda barajar en el punto correcto en la estructura, las probabilidades de éxito se mejoran frecuentemente obteniendo una muestra grande de cadenas que han sido cifradas por la misma función de aplicación. Por ejemplo, si está atacando un token de sesión usando este tipo de payload, sería beneficioso recolectar una gran cantidad de otros tokens de sesión de la aplicación, para proporcionar bloques adicionales de texto cifrado.
Payload processing
Los payloads generados pueden manipularse aún más utilizando varias reglas de procesamiento y codificación. En esta sección podemos definir reglas para realizar varias tareas de procesamiento en cada payload antes de que se utilice. Las reglas definidas se ejecutan secuencialmente, y pueden activarse o desactivarse para ayudar a depurar cualquier problema con la configuración. Las reglas de procesamiento son útiles en muchos tipos de situaciones en las que necesitamos generar payloads inusuales, o necesitamos ajustar los payloads dentro de una estructura más amplia o un esquema de codificación antes de usarlo.
Tenemos disponibles los siguientes tipos:
- Add prefix: Para agregar un prefijo literal antes del payload.
- Add sufix: Para agregar un sufijo literal después del payload.
- Match / replace: Reemplaza cualquier parte del payload que coincida con una expresión regular dada, con una cadena literal.
- Substring: Extrae una parte parcial del payload, comenzando desde un desplazamiento especificado y hasta una longitud específica.
- Reverse substring: Funciona como la regla anterior, pero el desplazamiento final se especifica contando hacia atrás desde el final del payload, y la longitud se cuenta hacia atrás desde el desplazamiento final.
- Modify case: Modifica el caso del payload, si corresponde.
- Encode: Codifica el payload utilizando varios esquemas: URL, HTML, Base64, ASCII hexadecimal o cadenas construidas para varias plataformas.
- Decode: Decodifica el payload utilizando varios esquemas: UTL, HTML, Base64 o ASCII hexadecimal.
- Hash: Lleva a cabo una operación de hash en el payload.
- Add raw payload: Agrega el valor del payload sin procesar antes o después del valor procesado actual.
- Skip if matches regex: Verifica si el valor procesado actual coincide con una expresión regular especificada y, si es así, omite la carga útil y pasa a la siguiente. Esto puede ser útil, por ejemplo, si sabemos que un valor de parámetro debe tener una longitud mínima y deseamos omitir cualquier valor en una lista que sea más corto que esa longitud.
- Invoke Burp extension: Invoca una extensión de Burp Suite para procesar los payloads.
Payload encoding
Aquí podemos configurar qué caracteres dentro del payload deben estar codificados en URL para una transmisión segura dentro de las solicitudes HTTP. Cualquier codificación de URL configurada se aplica en último lugar, después de que se hayan ejecutado todas las reglase de procesamiento.
Options
La última pestaña de la herramienta Burp Suite Intruder es la pestaña Options. En esta vista podremos configurar algunas opciones del ataque que vamos a realizar. La mayoría de estas opciones también pueden modificarse desde la ventana de ataque cuando el ataque ya se está ejecutando.
Request Headers
Estas configuraciones controlan si Burp Suite Intruder actualiza las cabeceras de la solicitud configuradas durante el ataque. Cuenta con las siguientes opciones disponibles:
- Update Content-Length header: Esta opción hace que Burp Suite Intruder agregue o actualice el encabezado «Content-Length» en cada solicitud, con el valor correcto para la longitud del cuerpo HTTP de esa solicitud en particular. Esta característica suele ser esencial para los ataques que insertan payloads de longitud variable en el cuerpo de la solicitud HTTP. Si no se especifica el valor correcto, entonces el servidor de destino puede devolver un error, puede responder a una solicitud incompleta o puede esperar indefinidamente a que se reciban más datos en la solicitud. Esta opción está marcada por defecto en Burp Suite Intruder, y en nuestro ejemplo la vamos a dejar así.
- Set Connection close: Esta opción hace que Burp Suite Intruder agregue o actualice el encabezado de conexión con el valor «close». En algunos casos (cuando el servidor no devuelve un Content-Length válido o una cabecera Transfer-Enconding), esta opción puede permitir que los ataques se realicen más rápidamente.
Request Engine
Estas configuraciones controlan el motor utilizado para realizar solicitudes HTTP en el ataque. Están disponibles las siguientes opciones:
- Number of threads: Esta opción, que solo está disponible para la versión Professional, permite controlar el número de solicitudes simultáneas que el ataque puede realizar.
- Number of retries on network failure: Si se produce un error de conexión u otro problema de red, Burp Suite volverá a intentar la solicitud el número de veces especificado aquí antes de renunciar y seguir adelante. Los errores de red intermitentes son comunes cuando se realizan pruebas, por lo que es mejor volver a intentar la solicitud varias veces cuando se produce un error.
- Pause before retry: Al reintentar una solicitud fallida, Burp Suite esperará un tiempo especificado (en milisegundos) después del error antes de volver a intentarlo. Si el servidor se está colapsando con el tráfico, o si ocurre un problema intermitente, es mejor esperar un poco antes de volver a intentarlo.
- Throttle: En la versión Professional Burp Suite nos permite configurar un tiempo en milisegundos durante el que Burp Suite esperará antes de cada solicitud. Esta opción es útil para evitar la sobrecarga de la aplicación o para ser más sigilosos. También podemos configurar un retraso variable (con un valor inicial y un incremento). Esta opción puede ser útil para probar el intervalo de tiempo que dura una sesión en una aplicación.
- Start time: Esta opción nos permite configurar el ataque para que se inicie inmediatamente, o después de un retraso específico, o para que comience en un estado de pausa. Estas alternativas pueden ser útiles si se quiere configurar un ataque que se ejecute en algún momento futuro o para guardarlo para un uso futuro.
Attack Results
Estas configuraciones controlan qué información se captura en los resultados del ataque. Las opciones disponibles son:
- Store requests/responses: Estas opciones determinan si el ataque guardará el contenido de peticiones y respuestas individuales. Guardarlas consume espacio en disco en el directorio temporal, pero nos permite verlas en su totalidad durante un ataque, repetir peticiones individuales si fuera necesario y enviarlas a otras herramientas de Burp Suite.
- Make unmodified baseline request: Si se selecciona esta opción, además de las peticiones de ataque configuradas, Burp Suite emitirá la petición base con todas las posiciones de los payloads con sus valores originales. Esta solicitud se mostrará como #0 en la tabla de resultados. El uso de esta opción es útil para proporcionar una respuesta básica contra la cual comparar las respuestas del ataque.
- Use denial-of-service mode (no results): Si se selecciona esta opción, entonces el ataque emitirá las peticiones normalmente, pero no esperará para procesar las respuestas recibidas del servidor. Tan pronto como se emita cada petición, la conexión TCP se cerrará. Esta función se puede usar para realizar ataques de denegación de servicio en el nivel de aplicación contra aplicaciones vulnerables, enviando repetidamente peticiones que inician tareas de alta carga de trabajo en el servidor, mientras evita el bloqueo de recursos locales al mantener los sockets abiertos esperando que el servidor responda.
- Store full payloads: Si se selecciona esta opción, Burp Suite almacenará los valores de los payloads completos para cada resultado. Esta opción consume memoria adicional, pero puede ser necesaria si desea realizar ciertas acciones en tiempo de ejecución, como modificar la configuración de «Grep – Payloads» o volver a emitir solicitudes con una petición modificada.
Grep – Match
Aquí podemos marcar elementos de resultados que contienen expresiones específicas en la respuesta. Para cada elemento configurado en la lista, Burp Suite agregará una nueva columna de resultados que contiene una casilla de verificación que indica si el elemento se encontró en cada respuesta. Luego, puede ordenar las columnas para agrupar los resultados coincidentes. El uso de esta opción puede ser muy útil para ayudar a analizar grandes conjuntos de resultados e identificar rápidamente elementos interesantes. En nuestro ejemplo lo usaremos para identificar aquellos casos en los que el par de usuario-contraseña devuelva una respuesta exitosa. Además de la lista de expresiones, las siguientes opciones están disponibles en esta sección:
- Match type: Aquí especificamos si las expresiones son cadenas simples o expresiones regulares.
- Case sensitive match: Aquí especificamos si la verificación de la expresión debe distinguir entre mayúsculas y minúsculas.
- Exclude HTTP headers: Aquí determinamos si las cabeceras HTTP de las respuestas deben excluirse de la verificación.
Grep – Extract
Esta sección se puede usar para extraer información útil de las respuestas en la tabla de resultados del ataque. Para cada elemento configurado en la lista, Burp Suite agregará una nueva columna de resultados que contiene el texto que se extrajo para ese elemento. Luego podemos ordenar en esta columna para ordenar los datos extraídos. Esta opción es útil para extraer datos de la aplicación y puede admitir una amplia gama de ataques. Por ejemplo, si estamos recorriendo un rango de IDs de documentos, podemos extraer el título de la página de cada documento en busca de elementos interesantes. Si hubiéramos encontrado una función que devuelve detalles de otros usuarios de la aplicación, podríamos iterar a través de las IDs de usuario y recuperar campos relevantes sobre usuarios para buscar cuentas de administración o incluso contraseñas. Opcionalmente podemos configurar también una longitud máxima que Burp Suite debe capturar para cada elemento.
Grep – Payloads
Podemos usarlo para marcar elementos de resultados similares a los payloads enviados. Si la opción está habilitada, Burp suite agregará, por cada payload, una nueva columna de resultados que contiene una casilla de verificación que indica si se encontró el valor de la carga útil actual en cada respuesta. Esta función puede ser útil para detectar secuencias de comandos entre sitios (cross-site scriptings) y otras vulnerabilidades de inyección de respuesta, que pueden surgir cuando la entrada del usuario se inserta dinámicamente en la respuesta de la aplicación. Esta sección tiene las siguientes opciones disponibles:
- Case sensitive match: Si lo marcamos indicaremos a Burp Suite que distinga mayúsculas y minúsculas en la verificación.
- Exclude HTTP headers: Para especificar que las cabeceras HTTP de las respuestas deben excluirse de la verificación.
- Match against pre-URL-encoded payloads: Es normal configurar Burp Suite Intruder para codificar los payloads de la URL dentro de las solicitudes. Sin embargo, normalmente son decodificados por la aplicación y se hacen eco en su forma original. Podemos usar esta opción para hacer que Burp Suite verifique las respuestas en su forma precodificada.
Redirections
En esta sección controlamos cómo Burp Suite maneja las redirecciones cuando realiza ataques. A menudo es necesario seguir las redirecciones para lograr los objetivos de nuestro ataque. Por ejemplo, en un ataque de adivinación de contraseña, el resultado de cada intento solo puede mostrarse siguiendo una redirección.Burp Suite seguirá hasta 10 redirecciones encadenadas si es necesario. Una columna en la tabla de resultados indicará si se siguió un redireccionamiento para cada resultado individual, y las solicitudes y respuestas completas en la cadena de redireccionamiento se almacenan con cada elemento del resultado. La opciones disponibles son:
- Follow redirections: Esta configuración controla los destinos de las redirecciones que se siguen.
- Process cookies in redirections: Si se selecciona esta opción, todas las cookies configuradas en la respuesta de la redirección se volverán a enviar cuando se siga el objetivo de la redirección. Por ejemplo, esta opción puede ser necesaria si estamos atacando una página de inicio de sesión por fuerza bruta que siempre devuelve una redirección a otra página que indica el resultado del inicio de sesión, y se crea una nueva sesión en respuesta a cada intento de inicio de sesión.
Y con esto hemos repasado y analizado toda la herramienta Burp Suite Intruder. Con esto ya estamos listos para llevar a cabo nuestro primer ataque, que explicaré detalladamente en la siguiente entrada de este tutorial de Burp Suite.
Como siempre, cualquier sugerencia o consulta podéis hacérmela llegar enviando un correo electrónico a sugerencias@manusoft.es o dejando un comentario en la entrada. ¡Muchas gracias por visitar ManuSoft.es!
La mayor parte de esta entrada está sacada de la web oficial de PORTSWIGGER, empresa al cargo del desarrollo de Burp Suite. En concreto de la sección de la web correspondiente a la documentación de Burp Suite y de la descripción de los tipos de payloads. Puedes acceder a la documentación haciendo click aquí.