En esta habitación, vamos a ver lo fundamental de Burp Suite, herramienta imprescindible cuando se trata de probar la seguridad de aplicaciones y páginas web.

¿Qué es Burp Suite?

Una aplicación escrita en Java que es el referente para test de penetración de aplicaciones web.

También se usa para aplicaciones móviles, ya que permiten probar las API’s (Application Programming Interface) que hay tras dichas aplicaciones y les otorgan sus funcionalidades.

Hay varias ediciones de Burp Suite, aquí nos vamos a ocupar de la Community, que es la gratuita para uso no comercial.

Vamos con las primeras preguntas de la habitación.

¿Qué edición de Burp Suite usaremos?

Burp Suite Community

¿Qué edición corre en servidor y provee de escaneos constantes para aplicaciones web objetivo?

Burp Suite Enterprise

Burp Suite se usa para atacar aplicaciones web y aplicaciones…

Mobile

Prestaciones de Burp Suite Community

Burp tiene varios módulos o herramientas fundamentales:

  • Proxy: El aspecto más conocido de Burp. Permite interceptar y modificar peticiones/respuestas cuando interactuamos con aplicaciones web.
  • Repeater: Lo segundo más conocido. Nos permite capturar, modificar y reenviar la misma petición numerosas veces. Es muy valiosa, especialmente cuando tenemos que crear un payload a través de ensayo y error.
  • Intruder: Aunque está muy limitado en la edición COmmunity, nos permite lanzar un montón de peticiones a un endpoint. A menudo, esto se usa para atques de fuerza bruta o fuzzing.
  • Decoder: Provee un servicio útil a la hora de codificar, decodificar información capturada o un payload antes de enviarlo al objetivo.
  • Comparer: Permite comparar dos pedazos de datos a nivel palabras o bytes. Como Decoder, nos ahorra tiempo, aunque podamos hacer esto con otras herramientas t ambién.
  • Sequencer: Usado normalmente cuando queremos evaluar la aleatoriedad de tokens como una cookie de sesión u otros datos generados aleatoriamente. Si el algoritmo no general valores aleatorios seguros, puede dar lugar a devastadores ataques.

Además, también permite escribir extensiones en Java, Python o Ruby. El módulo Extender permite cargarlas rápida y fácilmente.

¿Qué prestación de Burp Suite nos permite interceptar peticiones entre nosotros y nuestro objetivo?

Proxy

¿Qué herramienta usaríamos si queremos hacer fuerza bruta a un formulario de autenticación?

Intruder

Instalación de Burp Suite

No tiene mucha ciencia, descargamos Burp Suite desde la web y ejecutamos el script sh con sudo si estamos en Linux.

El panel de control / Dashboard

El panel de control puede ser un poco apabullante, pero no hay que temerlo. Está dividido en 4 cuadrantes.

Los cuadrantes del panel de control de BurpSuite

  1. El menú de tareas (arriba a la izquierda, en rojo) nos permite definir las tareas que correrán mientras usamos la aplicación.
  2. El registro de eventos (abajo izquierda, amarillo) nos dice lo que está haciendo BurpSuite y nos da información sobre las conexiones que hacemos a través de Burp.
  3. El cuadrante superior derecha (Issue Activity) solo es para la versión Pro, nos lista las vulnerabilidades que ha encontrado automáticamente por gravedad, pero en la versión Community nos podemos ir olvidando.
  4. La sección Advisory nos da más información sobre las vulnerabilidades encontradas, así como referencias y remedios sugeridos, que pueden ser exportados a un informe. Si hacemos clic en una de las vulnerabilidades, nos hacemos una idea de cómo es.

Vulnerabilidades en BurpSuite

También encontraremos iconos de ayuda por todo Burp (interrogaciones dentro de un círculo).

Se realiza mediante las barras de menú superior.

Menú de BurpSuite

Esto nos permite cambiar entre módulos. Muchos módulos tienen un submenú con sus principales opciones.

Si preferimos ver las pestañas de los menús por separado, podemos desanclarlas haciendo clic en el menú «Menú» y eligiendo la opción «Detach» de la pestaña deseada.

Pueden volver a acoplarse de la misma manera.

Además, existen atajos de teclado que permiten navegar las pestañas. Por defecto son:

Atajo Qué hace
Ctrl + Shift + D Cambiar a Dashboard
Ctrl + Shift + T Cambiar a pestaña Target
Ctrl + Shift + P Cambiar a pestaña Proxy
Ctrl + Shift + I Cambiar a pestaña Intruder
Ctrl + Shift + R Cambiar a pestaña Repeater

Opciones

Veamos algunas opciones para configurar Burp.

  • La configuración global se puede encontrar en la pestaña «User options» en el menú superior.
  • La configuración de proyectos específicos en la pestaña «Project options».

Las primeras se aplicación cada vez que abramos Burp, las segundas solo al proyecto actual. Como no podemos guardar un proyecto en la versión Community, esto significa que las opciones se reinician cada vez que cerramos Burp.

Empecemos por la pestaña User Options.

User options en Burp

Las opciones se aplican globalmente, es decir que controlan todo Burp, no solo el proyecto, aunque muchas opciones pueden ser sobreescritas por la configuración del proyecto.

Hay cuatro subsecciones principales de la pestaña User options.

  • Las opciones en la subpestaña Connections nos permiten controla cómo realiza Burp las conexiones a los objetivos. Por ejemplo, podemos configurar un proxy para conectar a través del él. Esto es útil si queremos usar Burp a través de un pivote de red.
  • La subpestaña TLS sub-tab nos permite habilitar y deshabilitar varias opciones TLS (Transport Layer Security), así como proporcionarnos un lugar al que subir certificados de cliente, si es que una aplicación web requiere el uso de uno para conexiones.
  • Display nos permite cambiar el aspecto de Burp Suite. Fuenet, escala, modo oscuro y opciones varias que tienen que ver con el motor de renderizado de Repeater.
  • Misc contiene una amplia variedad de configuraciones, incluyendo atajos de teclado.

Veamos las 5 subpestañas de las opciones de proyecto.

  • Connections tiene muchas de las mismas opciones de la pestaña equivalente de las opciones de usuario y sirven para anular la configuración general. Por ejemplo, poniendo un proxy solo para el proyecto con el que estamos. Hay algunas diferencias sin embargo. Por ejemplo, la opción «Hostname resolution», que permite mapear dominios a una IP directamente dentro de Burp Suite, puede ser muy útil, igual que la configuración «Out-of-scope Requests», que habilita determinar dónde enviará Burp las peticiones a cualquier cosa que no estés apuntando explícitamente como objetivo.
  • HTTP define cómo gestiona Burp varios aspectos del protoclo HTTP. Por ejemplo, si sigue redirecciones o cómo gestionar códigos de respuesta inusuales.
  • TLS permite anular opciones TLS de la aplicación, así como mostrarnos una lista de certificados de servidores públicos que hayamos visitado.
  • Sessions ns provee con opciones para gestionar sesiones. Nos permite definir cómo Burp obtiene, guarda y usa cookies de sesión que recibe de sitios objetivo. También nos permite definir macros que podemos usar para automatizar cosas como identificarnos en aplicaciones web, dándonos una sesión autenticada instantánea, asumiendo que tenemos credenciales válidas.
  • Hay menos opciones en la subpestaña Misc que en su equivalente de la sección «User Options». Muchas, solo disponibles si tienes la versión Pro.

Vamos con las preguntas, lo primero es activar modo oscuro en User Options > Display > Theme.

¿En qué subpestaña de «Project Options» puedes encontrar una referencia a «Cooki jar»?

Sessions

¿En qué subpestaña de «User options» puedes cambiar el comportamiento de actualizaciones de Burp?

Misc

¿Cuál es el nombre de la sección, dentro de «User Options > Misc» que permite cambiar los atajos de teclado de Burp?

Hotkeys

Si hemos subido certificados TLS de la parte de cliente en la pestaña «User Options», ¿Podemos anularlos en un proyecto? (Aye/Nay).

Aye

Introducción al proxy de Burp

El proxy de Burp es la herramienta más importante de la Suite. Nos permite capturar peticiones y respuestas entre nosotros y nuestro objetivo. Estas pueden ser manipuladas o encviadas a otras herramientas para ser procesadas antes de que se les permita continuar hacia su destino.

Por ejemplo, si hacemos una petición a tryhackme.com a través del proxy de Burp, nuestra petición será capturada y no se le permitirá continuar hacia los servidores de tryhackme.com hasta que lo especifiquemos explícitamente.

Podemos elegir hacer lo mismo con la respuesta desde el servidor, aunque esto no está activo por defecto.

Esta habilidad de interceptar peticiones significa que podemos tomar el control completo de nuestro tráfico web, una habilidad de valor incalculable cuando probemos aplicaciones web.

Hay unas cuantas configuraciones que necesitamos hacer antes de que podamos usar el proxy, pero empecemos por el interfaz.

Capturando peticion

Con el proxy activado, hemos hecho una petición a la web de Tryhackme. En este punto, el navegador se va a «colgar» y la petición aparecerá en la pestaña Proxy, dándonos algo como la imagen de arriba.

Podemos hacer varias cosas aquí, como enviar la petición a uno de los módulos de Burp, copiarla como comando cURL, guardarla en un archivo y muchas otras cosas.

Cuando hayamos finalizado de trabajar con el proxy, podemos hacer clic en el botón «Intercept is on» para deshabilitar esa intercepción, lo que permitirá a las peticiones atravesar el proxy sin ser detenidas.

Burp registrará por defecto dichas peticiones cuando interceptar esté apagado. Esto puede ser muy útil para volver atrás y analizar peticiones anteriores, incluso si no las capturamos específicamente cuando las hicimos.

Burp también capturará y registrará la comunicación Websocket, lo que, de nuevo, puede ser muy útil cuando analizamos una aplicación web.

Los registros pueden verse en las subpestañas «HTTP history» y «WebSockets history»:

Subpestañas registro de Burp

Es importante notar que cualquier petición capturada aquí puede enviarse a otras herramientas de la aplicación haciendo clic derecho y eligiendo «Enviar a…». Por ejemplo, podríamos tomar una petición HTTP previa que ya ha sido pasada por el proxy de camino al objetivo y enviarla a Repeater.

Finalmente, hay también opciones específicas del proxy, que se pueden ver en la subpestaña «Opciones». Estas nos dan mucho control sobre cómo opera el proxy, por lo que conviene familiarizarse con ellas.

Por ejemplo, el proxy no interceptará respuestas del servidor por defecto a menos que lo pidamos explícitamente para cada petición. Podemos anular la opción por defecto seleccionado la casilla «Intercept responses based on the following rules» y eligiedo una o más reglas.

La regla «Or Request Was intercepted» es buena para capturar respuestas a todas las peticiones que fueron interceptadas por el proxy.

Opciones de intercepción de respuestas

La regla «And URL Is in target scope» es otra muy útil que veremos más adelante.

Puedes crear tus propias reglas para la mayoría de opciones del Proxy, así que esta es una sección que conviene mirar y con la que experimentar.

Otra sección útil de esta subpestaña es la de «Match and Replace». Permite realizar regexes (expresiones regulares) en peticiones entrantes y salientes.

Por ejemplo, puedes cambiar automáticamente el user-agent para emular diferentes navegadores en peticiones salientes o borrar todas las cookies puestas en peticiones entrantes. De nuevo, somos libres de crear nuestras propias reglas aquí.

Vamos con las preguntas.

¿Qué botón elegiríamos para enviar una petición interceptada al objetivo en el proxy Burp?

Forward

¿Cuál es el atajo de teclado para esto? (Suponiendo que usamos Linux).

Ctrl+f

Conectando Burp a través de Foxy Proxy

La siguiente parte está dedicada a conectar Burp fácilmente a través de la extensión Foxy Proxy.

Ese tema no es difícil y ya lo traté en Instalar, configurar y certificar Burp para labores de pentesting, así que, cualquier duda, mejor ahí, que está explicado de manera más clara.

Vamos con las preguntas. Tenemos que leer las opciones cuando hacemos clic derecho y hay una particularmente útil que permite interceptar y modificar la respuesta a nuestra petición.

¿Cuál es esa opción?

Response to this request

Usando proxy con HTTPS

Podemos interceptar tráfico HTTP, pero si vamos a un sitio con TLS habilitado, como https://google.com, ocurre este error.

error HTTPS

En concreto, nos dice que Portswigger Certificate Authority no está autorizada para asegurar la conexión.

Por suerte, Burp ofrece una solución, necesitamos que Firefox confíe en conexiones aseguradas por certificados de Portswigger.

Así que añadimos manualmente el certificado CA a nuestra lista de certificados de autoridades en las que confiamos.

Primero, con el proxy activado, nos vamos a http://burp/cert, eso descarga un archivo cacert.der y los guardamos.

Después, escribimos about:preferences en la barra de búsqueda de Firefox y encontramos la opción «Ver certificados» («View Certificates»).

Ver certificados en Firefox

Haciendo clic, vemos todos los que hay y podemos registrar uno nuevo pulsando en «Import» y seleccionando el archivo que acabamos de descargar.

En el menú que aflora, seleccionamos «Trust this CA to identify websites» y pulsamos Ok.

Añadiendo un nuevo certificado

Ya podremos visitar sitios con HTTPS.

El navegador de Burp Suite

Además de modificar nuestro navegador habitual, Burp incluye uno propio basado en Chromium.

Podemos usarlos desde la opción «Open Browser» de la pestaña Proxy.

Navegador propio de Burp

En Linux, si estamos como usuario root, será incapaz de crear una sandbox y nos dará error.

Error de sandbox

Hay dos soluciones, crear un nuevo usuario de menos privilegios y usarlo.

Ir a Project options -> Misc -> Embedded Browser y marcar la opción Allow the embedded browser to run without a sandbox.

Ojo porque esto es más fácil, pero más peligroso, si quedamos comprometidos usando el navegador, un adversario tendrá acceso a toda nuestra máquina.

Ámbito de trabajo (scope) y Objetivos

Llegamos a lo más importante en Burp, el scope. Puede ser muy tedioso hacer que Burp capture todo nuestro tráfico. Cuando registra todo (incluyendo tráfico a sitios que no son el objetivo), nos embarra los registros que a lo mejor queremos enviar luego a los clientes.

La solución: scoping.

Configurando un ámbito de trabajo definiremos lo que pasa a través del proxy y queda registrado. Podemos restringir Burp solamente a la aplicación web que queremos probar, por ejemplo.

La manera más fácil es irnos a la pestaña «Objetivo», hacer clic derecho en nuestro objetivo que aparece en la lista de la izquierda y elegir «Add to Scope».

Burp nos preguntará si queremos dejar de registrar todo lo que no esté dentro de ese ámbito y muchas veces querremos responder que sí.

Estableciendo un ámbito

Podemos chequear el ámbito de trabajo con la subpestaña «Scope», que nos permite controlar nuestro objetivo incluyendo y excluyendo dominios /IP’s. Esta es una sección muy poderosa, así que el tiempo que empleemos en acostumbrarnos a ella compensará.

Hemos elegido deshabilitar nuestro tráfico dentro del ámbito, pero el proxy seguirá interceptando todo. Para apagar eso, necesitamos ir a la subpestaña «Proxy Options» y elegir: «And URL Is in target scope» de la sección «Intercept Client Requests».

Interceptar peticiones del cliente

Con esta opción seleccionada, el proxy ignorará completamente cualquier cosa fuera del ámbito marcado, limpiando mucho el tráfico que llega a través de Burp.

Mapa del sitio y definiciones de problemas (Issue Definitions)

El control del ámbito de trabajo puede ser el aspecto más útil de la pestaña «Target», pero para nada es el único uso de esta sección de Burp.

Hay 3 subpestañas bajo «Target»:

  • Site map nos permite hacer un mapa con forma de árbol de las aplicaciones objetivo. Cada página que visitemos aparecerá aquí, permitiéndonos generar automáticamente un mapa del sitio para el objetivo simplemente dando una vuelta por la web. Burp Pro nos permite lanzar una araña a los objeticos autoáticamente (es decir, ir por cada página y sus enlaces, para hacer un mapa completo del sitio). Con Burp Community, podemos usar esto para recoger datos mientras realizamos los pasos iniciales de enumeración. Esto es especialmente útil cuando queremos un mapa de una API, ya que cuando visitemos una página, cualquier endpoint de la API que recupere datos aparecerá aquí.
  • Scope: Ya lo hemos visto, permite definir el ámbito de trabajo.
  • Issue Definitions: Aunque no tenemos aceso al escáner de vulnerabilidades en Burp Community, sí lo tenemos a una lista de esas vulnerabilidades que busca. Esta sección nos da una gran lista de vulnerabilidades (con descripción y referencias) que podemos citar en caso de informe o descripción de una vulnerabilidad.

Iniciamos la máquina de la habitación y la de ataque. Visitamos cada página enlazada desde la principal y luego echamos un vistazo al mapa del sitio. Hay un endpoint que debería destacar como inusual.

Lo visitamos en el navegador (o usamos la sección «Response» del mapa del sitio para ese endpoint).

¿Qué bandera obtenemos?

Lanzamos Firefox en la máquina de ataque, conectamos el proxy de Burp con la extensión Foxyproxy, pero quitamos la intercepción para poder navegar tranquilamente.

Vamos página por página y en la pestaña Target > Site Map nos va creando ese mapa. Aparece algo raro, un recurso con nombre: 5yjR2GLcoGoij2ZK. Podemos visitar /5yjR2GLcoGoij2ZK en el navegador o hacer clic en el mapa y ver la respuesta, donde aparece la bandera.

THM{NmNlZTliNGE1MWU1ZTQzMzgzNmFiNWVk}

Ahora miramos la lista de «Issue Definitions», ¿Cuál es la severidad típica de una Vulnerabilidad de Dependencia Javascript?

low

Ejemplo de ataque

Vamos con un ataque típico del mundo real, aunque muy simplificado.

En la web objetivo de esta habitación, nos vamos a la sección de soporte: http://IP_Objetivo/ticket

Sección de soporte a atacar

En un test de penetración real de una aplicación, probaríamos varias cosas, una de las cuales sería XSS o Cross-site Scripting.

Se trata de insertar un script por la parte del cliente, normalmente en Javascript, dentro de una página web, de manera que lo ejecuta.

Hay varias clases de XSS, el que vamos a usar se llama reflejado, ya que solo afecta a la persona haciendo la petición.

Comencemos tratando de escribir:

<script>alert("Succ3ssful XSS")</script>

Dentro del campo «Contact Email». Deberías encontrarte con que hay un filtro por la parte del cliente que previene que añadas caracteres especiales que no están permitidos en un email.

Filtro de parte del cliente

Por suerte para nosotros, los filtros en la parte del cliente son muy fáciles de superar. Hay diversas maneras de deshabilitar el script, como por ejemplo, evitando que cargue.

Asegurémonos que el proxy de Burp está activo y la intercepción conectada.

Ahora, introducimos algún dato legítimo en el formulario, por ejemplo, pentester@example.thm como dirección y «Test attack» como petición.

Enviamos dicha petición y debería ser atrapada por el proxy.

Con la petición capturada en el proxy, podemos cambiar el campo de email para poner nuestro payload:

<script>alert("Succ3ssful XSS")</script>

Después de pegar el payload, necesitamos seleccionarlo y codificarlo en URL con el atajo Ctrl+U para enviarlo de manera segura.

Observemos el proceso aquí abajo.

Insertando Payload desde Burp

Finalmente, pulsamos «Forward» (varias veces) para enviar la petición alterada y nos debería aparecer que hemos ejecutado con éxito el ataque XSS:

Éxito en el XSS

Nunca va a ser tan fácil en la vida real, pero nos hacemos una idea de en qué situaciones nos puede ser útil Burp.

Con esto, terminamos lo básico sobre Burp.