Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Burp Suite, también llamada «la navaja suiza del pentester«, es una herramienta para realizar
auditorías de seguridad a aplicaciones Web. Integra diferentes componentes de pentesting y
funcionalidades para realizar las pruebas y permite combinar pruebas tanto automáticas como
manuales. La herramienta Burp Suite está desarrollada y mantenida por la
empresa PortSwigger, y cuenta con dos versiones: Burp Free (gratuita) y Burp Professional (de
pago). La versión gratuita se puede encontrar ya instalada en Kali Linux, la distribución de
Linux diseñada para auditorías y seguridad informática.
Herramientas de Burp Suite Professional
Entre las principales funcionalidades incluidas en esta herramienta encontramos:
Target: Permite fijar un objetivo y construir un SiteMap a partir de él. Esta herramienta está
disponible en Burp Free.
Proxy: Es la funcionalidad principal de Burp Suite. Se trata de un proxy entre el navegador e
Internet que permite interceptar las peticiones e inspeccionar el tráfico. Esta herramienta está
disponible en Burp Free.
Spider: Se trata de una “araña” que inspecciona las páginas web y recursos de la aplicación
de manera automatizada. Esta herramienta está disponible en Burp Free.
Scanner: Burp Suite cuenta con un escáner avanzado para aplicaciones web. Este escáner
nos permite detectar diferentes tipos de vulnerabilidades, tanto de forma pasiva como activa.
Esta herramienta está disponible solamente en Burp Professional.
Intruder: Esta herramienta nos permite automatizar procesos (fuzzing de la aplicación,
ataques de fuerza bruta o diccionario, ataques SQLi, XSS, enumeración de usuarios y
directorios, etc.). Aunque esta herramienta está disponible para Burp Free, está capada para
esta versión y ofrece mucho más potencial en Burp Professional.
Repeater: Con esta herramienta podremos manipular las peticiones interceptadas,
modificando parámetros y cabeceras de las peticiones para después replicarlas nuevamente.
Esta herramienta está disponible en Burp Free.
Secuencer: Nos permite analizar la aleatoriedad de los tokens de sesión. Muy útil para
obtener cookies y tokens CSRF por fuerza bruta. Esta herramienta está disponible en Burp Free.
Decoder: Esta herramienta nos permite codificar y decodificar parámetros, URLs, hashes,
etc. Esta herramienta está disponible en Burp Free.
Comparer: Para comparar los datos de peticiones y respuestas. Esta herramienta está
disponible en Burp Free.
Extender: Extender nos permite instalar innumerables extensiones para ampliar las
funcionalidades de Burp Suite. Por tanto, esta funcionalidad dota a Burp Suite de muchísima
potencia.
Entorno de pruebas
En mi caso, para todas las pruebas que realizaré para esta serie de tutoriales, usaré un entorno
de pruebas llamado Damn Vulnerable Web Application. Se trata de una aplicación web plagada
de vulnerabilidades de seguridad (con diferentes niveles de dificultad) para poder practicar
técnicas de hacking. Podéis desplegarla en un servidor local con Xampp, por ejemplo, o en
algún otro servidor al que tengáis acceso legal. De esta forma, podréis probar la herramienta y
seguir los pasos del tutorial de forma segura y sin molestar a nadie.
Herramientas necesarias
Para poder seguir este tutorial entrada a entrada necesitaremos tener instaladas las siguientes
herramientas:
Burp Suite (versión Free o Professional, ya sea la incluída en Kali Linux o la que instalemos
manualmente en el sistema operativo que usemos).
Mozilla Firefox (puedes usar cualquier otro explorador, pero entonces los pasos a seguir
variarán ligeramente de los del tutorial en algunos puntos).
Foxy Proxy (add-on de Mozilla Firefox, aunque también lo hay para Google Chrome).
Configuración del proxy en Burp Suite
La función principal de Burp Suite es la de un proxy. Burp Suite nos sirve como interceptor de la
comunicación entre nuestro navegador y el servidor que aloja a la aplicación web objeto de
nuestro estudio. Por lo tanto, lo primero que debemos hacer una vez abierto el programa es
configurar el proxy. En caso contrario, no podremos usar la herramienta. Para configurar el
proxy debemos acceder a la pestaña Proxy -> Options y nos aseguramos que la
opción Running esté marcada, tal y como se ve en la imagen.
Una vez en la pantalla de opciones de Foxy Proxy, para crear una configuración nueva hacemos
click en «Add».
Para el caso que nos ocupa crearemos una configuración para Burp Suite, dándole el nombre
que queramos, eligiendo un color para diferenciarla de las otras configuraciones, y escribiendo
la misma dirección IP y el mismo puerto que configuramos en el proxy de Burp Suite.
Una vez creada la configuración, para activarla en nuestro Mozilla Firefox solamente tenemos
que hacer click en el icono de Foxy Proxy de arriba a la derecha y seleccionar la configuración
que queremos activar.
Haciéndolo de esta forma, cada vez que quieras navegar sin utilizar el proxy de Burp Suite,
debes entrar de nuevo en el menú del navegador y deshabilitar el proxy.
Proxy
Como ya he mencionado otras veces, el proxy es el componente principal de Burp Suite. Es la
base de prácticamente todo lo que podemos hacer con esta herramienta. El proxy nos sirve
para interceptar el tráfico entre nuestro navegador y el servidor que aloja la aplicación web.
Una vez interceptada una petición a través del proxy de Burp Suite, podemos hacer con ella
infinidad de cosas. Desde estudiar el contenido de la petición (cabeceras, cuerpo del
mensaje…) hasta modificar dicho contenido antes de permitir que siga su camino hasta el
servidor o realizar peticiones recursivas cambiando ciertas variables automáticamente.
Intercept
Es la subpestaña encargada de interceptar y mostrar peticiones y respuestas que resultan de la
comunicación con la página. Cuenta con cuatro botones que son los encargados de controlar el
proxy de Burp Suite:
Si usáis Burp Suite con una sola pantalla, mi recomendación es dividirla de forma que podáis
ver al mismo tiempo el explorador de Internet y el panel de Burp Suite, tal y como se ve en las
capturas del tutorial. De esta forma, podréis ver lo que ocurre en el panel en todo momento al
tiempo que realizáis las acciones pertinentes en la aplicación web que estáis auditando.
Una vez tenemos activo el Intercept, el proxy comenzará a capturar peticiones. De hecho,
posiblemente ya tengáis alguna petición interceptada sin haber tocado nada en el explorador.
Esto puede ser por algún intento de comunicación subyacente del explorador, del que
normalmente no somos conscientes. Si ese fuera el caso, podéis desactivar de nuevo el
interceptor o pulsar en «Drop» o en «Forward» repetidamente hasta que la ventana con los
datos de la petición quede limpia de nuevo.
Con la ventana de datos de petición en blanco y el interceptor activo navegamos por la web a
auditar. Si ya la tenéis abierta, basta con actualizar la página y ver los resultados en el panel
de Burp Suite.
Al ser la petición interceptada, la aplicación quedará cargando hasta que hagáis click en
«Forward» y la dejéis continuar su camino hacia el servidor. Al hacerlo, veremos que la ventana
con los datos de la petición vuelve a quedar en blanco. Antes de darle a «Forward», cuando la
petición está aún capturada y la aplicación a la espera, es un buen momento para analizar los
datos de la petición y sacar algo de información sobre la aplicación que estamos auditando.
Aunque también podemos hacerlo más tarde. Accediendo a la petición desde la subpestaña
«HTTP history», que veremos más adelante, podemos ver todas las peticiones que se han
interceptado.
Puede que al navegar por la aplicación web que estéis auditando os salte un aviso de que la
página no es segura y os obligue a añadir la excepción cada dos por tres. Para evitarlo
debemos generar un certificado digital y exportarlo al explorador de Internet que estemos
usando. Para ello, debemos ir a la subpestaña «Options» de la pestaña «Proxy». Una vez ahí,
en la sección «Proxy Listeners» hacemos click en «Import/export CA certificate».
En la ventana que se nos abre, debemos marcar «Certificate in DER format» y hacemos click en
«Next».
Ahora debemos importarlo a nuestro explorador de Internet, para que lo reconozca y confíe en
él durante la navegación. Para eso, en Mozilla Firefox en mi caso, accedemos a «Preferences-
>Privacy & Security->View Certificates«.
En la ventana que se nos abre hacemos click en «Import». Ahora, buscamos el certificado que
hemos exportado de Burp Suite en la ruta en que lo hemos guardado. Puede que no nos
aparezca. Para solucionar este problema, debemos marcar que nos muestre todos los tipos de
archivos. Una vez lo hemos seleccionado y abierto, debemos marcar las dos casillas de la
ventana que nos aparece y hacer click en «OK».
Options
Esta subpestaña ya la conocemos de la entrega anterior, cuando configuramos el proxy,
aunque entonces solamente tocamos la sección llamada «Proxy Listeners». Sin embargo, aquí
podemos también generar certificados digitales (como hemos visto hace un momento) y otras
configuraciones adicionales. En mi opinión, las más interesantes son:
Un ejemplo en el que podría sernos útil esta opción del Proxy sería si quisiéramos observar el
comportamiento de la aplicación web en dispositivos móviles. Para hacerlo, deberíamos marcar
la casilla «Enabled» para el valor de «Replace» correspondiente a iOS y Android. En el listado
de la imagen de arriba sería la segunda y tercera línea, por ejemplo. Al hacerlo, el proxy
sustituiría el User-Agent de la cabecera de la petición por los que hemos marcado antes de
dejar que la petición continúe su camino hacia el servidor.
Response Modification
Otro ejemplo sería si quisiéramos modificar algunas de las restricciones que la aplicación web
tenga sobre los formularios de la página, como validaciones de formularios por JavaScript,
campos ocultos o desactivados, etc. Para ello, marcaríamos la opción deseada en la sección
«Response Modification».
Conociendo todo esto ya podemos empezar a sacarle el jugo a Burp Suite. Analizando las
cabeceras de las peticiones interceptadas podemos sacar mucha información, como por
ejemplo el tipo de servidor con el que nos estamos comunicando, la versión que usa,
información sobre las cookies… Y todo esto puede darnos, a su vez, información sobre
diferentes vulnerabilidades existentes y ya conocidas. Por ejemplo, si vemos que el servidor
usa una versión de PHP desactualizada, podríamos buscar vulnerabilidades conocidas de la
versión que el servidor que estamos auditando use y explotarlas en nuestro beneficio.
Target Scope
¿Qué es un site map?
Un site map es un fichero XML que contiene una lista del contenido del sitio y cierta
información adicional. Este fichero permite realizar una mejor indexación de un sitio web en los
principales buscadores. Por ejemplo, el site map de esta web podéis verlo en este enlace.
Construir un site map con Burp Suite
Conocido el concepto de site map, podemos continuar con nuestro aprendizaje de Burp Suite.
Para construir un site map con Burp Suite debemos ir a la pestaña «Target». Una vez ahí
debemos ir a la subpestaña «Site map«. Aquí se nos mostrará una lista con todos los dominios
a los que vayamos accediendo durante la auditoría.
Conforme vamos avanzando por el sitio web, la herramienta va construyendo el site map del
sitio. En esta subpestaña podremos obtener una visión detallada en forma de árbol de ficheros
de la estructura de la web que estamos auditando. De esta forma podremos localizar posibles
fugas de información en los recursos, dominios mal configurados o errores no controlados.
Dado que solo nos interesa analizar la web objeto de la auditoría, buscamos el dominio en la
lista de la subpestaña «Site map» y hacemos click derecho en él. En el cuadro de opciones que
se abre hacemos click en «Add to Scope».
Al hacerlo, nos aparecerá un cuadro emergente en el que nos pregunta si queremos que el
proxy de Burp Suite ignore el resto de dominios al interceptar y deje de enviarlos al historial de
peticiones interceptadas. Hacemos click en «Yes» para facilitarnos luego el acceso a la
información que realmente nos interesa quitando de en medio la basura que el explorador
pueda devolvernos.
Ya hemos configurado Burp Suite para que ignore las peticiones que no pertenezcan al dominio
que estamos auditando. El siguiente paso es limpiar el listado de dominios en la subpestaña
«Site map«. Para quedarnos solamente con el site map del dominio que estamos analizando,
hacemos click en «Filter: Hiding not found items…». Al hacerlo, se nos abre un nuevo cuadro en
el que podemos establecer un filtro para los elementos que aparecen en la lista de la
subpestaña «Site map«. Para limpiar la lista de elementos que no nos interesan debemos
marcar la casilla «Show only-in-scope-items».
Para cerrar el cuadro, volvemos a hacer clic en «Filter: Hiding not found items…».
En ese momento, ya podemos ver cómo el listado de dominios se ha reducido a únicamente el
que estamos auditando.
Al hacerlo, podremos ver cómo la lista de directorios y ficheros empieza a crecer de forma
automática. Mientras se va construyendo el site map de forma automática pueden aparecernos
de vez en cuando cuadros emergentes como el de la siguiente imagen:
La pestaña «Spider» cuenta además con la subpestaña «Options». En ella podemos configurar
el spider para personalizar un poco su trabajo. Esta subpestaña nos ofrece varias opciones de
configuración muy interesantes. Nos permite personalizar la cabecera que va a usar
el spider en sus peticiones a la web, indicar los datos a introducir en un posible formulario
(separadas por los posibles campos más típicos, como email, nombre, apellidos…) o cómo
actuar ante un formulario de inicio de sesión.
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:
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:
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.
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:
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:
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:
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.
Interceptar la petición
Como decía, el primer paso es interceptar una petición de inicio de sesión en la aplicación. Para
ello, lo primero que debemos hacer es navegar por la aplicación que va a ser objetivo de
nuestro ataque hasta llegar al formulario de login del que queremos capturar una petición.
Una vez estemos en la página correspondiente al formulario, y con Burp Suite ya abierto,
activamos el proxy.
En el momento que activemos el proxy Burp Suite comenzará a interceptar el tráfico. Sin
embargo, hasta que no interactuemos con la aplicación, probablemente no intercepte nada. Lo
que debemos hacer es provocar un intento de login. Podemos hacerlo dejando ambos campos
en blanco y dándole a enviar o escribiendo un usuario y una contraseña que se nos ocurra para
hacer una prueba.
Cuando lo hagamos veremos que Burp Suite intercepta el tráfico. Hacemos click en el botón
«Forward» hasta que el tráfico pare.
Entonces nos vamos a la pestaña «HTTP history», en la que encontraremos todas las peticiones
interceptadas. Aquí buscamos la petición que nos interesa. La localizaremos por la URL, que
debe ser la misma URL que la de la página en la que se encuentra el formulario.
Una vez localizada podremos analizarla un poco y observar la respuesta que devuelve. Esto
puede darnos pistas que nos pueden servir para mejorar o concretar la configuración de
nuestro ataque. Por ejemplo, en mi petición puedo encontrar fácilmente cómo envía la
aplicación los datos de usuario y contraseña. Estas serán las posiciones en las que colocaré los
dos payloads más adelante.
Además, analizando la respuesta tanto en la propia página web como en el panel de Burp Suite
puedo observar que cuando los datos de acceso introducidos no son correctos la aplicación
devuelve un mensaje muy concreto.
Ya tenemos claro que esta es la petición que nos servirá durante nuestro ataque como
vulnerabilidad a explotar y tenemos toda la información necesaria para llevar a cabo nuestro
ataque. Ya podemos pasar al siguiente paso.
Con esto ya podemos irnos a la pestaña «Intruder», donde la petición nos estará esperando.
Marcar la posición de los payloads
Ya en la pestaña «Intruder/Positions» podemos ver la petición que vamos a usar para ataque la
web. Es el momento de marcar la posición de los payloads Para ello seleccionamos el espacio
en el texto de la petición en la que debe ir el dato a sustituir y hacemos click en «Add $». En mi
caso, las posiciones son justo después del signo «=» tras «username» y «password». Al marcar
la posición el espacio se sustituye por dos símbolos parecidos al del $. Si en la petición hubiera
por defecto marcados más espacios con esos símbolos podemos quitarlos seleccionándolos y
haciendo click en el botón «Clear $» o simplemente borrándolos.
Elegir el tipo de ataque
Ha llegado el momento de elegir el tipo de ataque que vamos a realizar. Si repasas la entrada
anterior, podrás deducir fácilmente que la mejor opción es el tipo «Cluster bomb». El tipo de
ataque «Cluster bomb» prueba con todas las combinaciones posibles de los payloads que
configuremos, opción que nos viene muy bien para el caso en el que estamos, ya que vamos a
introducirle una serie de nombres de usuario y una serie de posibles contraseñas, y
necesitamos averiguar qué combinación de usuario-contraseña es la correcta. Para elegir la
opción simplemente tenemos que seleccionarla en el combo que hay junto al texto «Attack
type».
Configurar payloads
Una vez hemos marcado la posición de los payloads y hemos elegido el tipo de ataque, llega el
momento de configurar los payloads. Para ello nos vamos a la pestaña «Payloads» y elegimos
el payload 1 en el combo «Payload set». En este caso, el tipo de payload va a ser «Simple list»,
ya que nuestra intención es introducir una serie de posibles nombres de usuario en el cuadro
«Payload Options [Simple list]». Para hacerlo, yo he usado un fichero .txt con algunos nombres
de usuario comunes que he encontrado por Internet. Para agregar opciones al payload desde
un fichero de texto debemos hacer click en «Load» y elegir el fichero.
Al hacerlo verás que cada línea del fichero de texto es una línea del cuadro de
«Payload Options». También puedes introducirlos a mano escribiéndolos uno a uno en el cuadro
de texto que hay junto al botón «Add» y hacer click en ese mismo botón para agregarlo.
Para configurarlo, vaciamos el cuadro de «Grep – Match» haciendo click en el botón «Clear».
Y entonces añadimos nuestro mensaje de error en el cuadro de texto que hay junto al botón
«Add» y hacemos click en el botón.
El número de resultados de la tabla irá creciendo conforme avanza la barra que aparece
debajo. Sin embargo, conforme se desarrolla el ataque ya podemos ir analizando, si queremos,
los resultados que van apareciendo. De hecho, si os fijáis, en la tercera línea la bandera que
habíamos configurado ya aparece sin marcar. Eso quiere decir que el par usuario-contraseña
con valores «admin»-«password» es un par válido. Ahora solo nos queda esperar a que el
ataque termine para obtener todos los resultados.
Analizar los resultados
Cuando el ataque termine veremos la barra completa y un mensaje de «Finished» al lado.
Ahora podemos analizar todos los resultados. Si observamos las casillas de verificación
observamos que, al menos en mi caso, solamente una de ellas no está marcada. Así que voy a
analizar ese resultado.
Si nos movemos a la pestaña «Response» podemos ver la respuesta que lanzó la aplicación
para este par de valores de usuario-contraseña. Si la analizamos vemos que el mensaje es
diferente al que nos devolvía cuando hicimos la prueba de login con los campos en blanco o
con valores incorrectos.
Parece que hemos dado con un par de usuario-contraseña correcto. De hecho, si lo probamos
ahora en la aplicación vemos que nos devuelve el mismo mensaje de éxito. Recuerda
desactivar el proxy de nuevo para evitar que Burp Suite te intercepte.
Una curiosidad de la ventana de resultados es que puedes configurar las columnas para hacer
más fácil el análisis, añadiendo o quitando columnas según tus necesidades.
Por ejemplo, para este caso podríamos dejar activadas solamente las siguientes columnas, que
son las que nos pueden dar información útil como el usuario, la contraseña, el la fecha y hora a
la que se realizó cada intento y el aviso de error o éxito.
Con esto ya tenemos para jugar un buen rato. DVWA ofrece muchos retos que puedes intentar
superar con lo aprendido hasta ahora.
Bibliografia y enlaces
https://www.manusoft.es/hacking-y-seguridad/tutorial-burp-suite/tutorial-de-burp-suite-i/
https://www.briskinfosec.com/blogs/blogsdetail/SQL-Injection--Using-Burp-Suite
https://hackpuntes.com/tag/burp-suite/
http://antisec-security.blogspot.com/2012/11/burp-suite-professional-burp-suite-es.html
https://fwhibbit.es/burp-suite-i-la-navaja-suiza-del-pentester
https://www.blogueroinformatico.com/como-configurar-burp-suite/