En esta segunda parte (primera parte), ...mostraremos paso a paso un análisis de seguridad teniendo en cuenta una metodología básica:
- Realizar un reconocimiento pasivo del objetivo
- Pasar por un reconocimiento activo
- Identificar vulnerabilidades procedentes de un escaneado automático
- Explotar estas vulnerabilidades
- Conclusión con un informe ejecutivo
En cada uno de estos casos, trabajaremos en la automatización, ya que representan tareas repetitivas. Al automatizar, ganamos un tiempo valioso y nos centramos en lo importante.
Cuando se trabaja en un proyecto de consultoría ofensiva, existen tres enfoques diferentes con los que se puede trabajar:
BlackBox
El equipo dispone de información limitada sobre el objetivo. Por ejemplo, sólo cuentan con el dominio o el nombre de la empresa que están auditando.
GreyBox
En este caso, el equipo dispone de información parcial sobre el objetivo. Por ejemplo, pueden tener una lista de subdominios, información sobre la arquitectura o credenciales para auditar aplicaciones.
WhiteBox
Por último, en el tercer enfoque, el equipo tiene toda la información que necesita para empezar a auditar el objetivo, como rangos completos de infraestructura, acceso al código fuente de la aplicación, credenciales de la aplicación, etc.
Para este post nos centraremos en el primer enfoque, el de BlackBox. Y aplicaremos la metodología anteriormente mencionada. Repasaremos cada paso y veremos cómo puedes resolverlos utilizando Faraday.
Reconocimiento pasivo
En esta fase concreta, imaginaremos un escenario en el que sólo disponemos del dominio para empezar a trabajar: https://vulnweb.comMuchas herramientas permiten empezar a identificar los subdominios y ampliar la superficie de ataque con sólo proporcionar la información del dominio. Como por ejemplo:- Sudomía- Aquatone- Subbuscador- DNSGen- Sublista3rEn esta fase preliminar, elegiremos sudomy, una herramienta útil y sencilla. Si queremos automatizar esta herramienta, primero debemos entender lo que la herramienta tiene que ofrecer y la salida que proporciona. Con toda esta información podremos empezar a trabajar. Si no has oído hablar de esta herramienta, puedes ir a su GitHub y comprobar el proceso de instalación, independiente del SO, y utilizarla a través de Docker.
| ➜ ./sudomy -d vulnweb.com -rS -pS -takeover -gW |

Sudomy creará los resultados en los subdominios identificados dentro del directorio de salida. Incluso si utiliza otros parámetros, como httprobe o nmap, la información estará disponible de todos modos.
En esta fase, sólo tenemos que recopilar subdominios y centrarnos en el nuevo archivo subdominio.txt.
antivirus1.vulnweb.com
autoconfig.demo.vulnweb.com
blogger.com.vulnweb.com
httptestaspnet.vulnweb.com
live2.vulnweb.com
mailer2.vulnweb.com
odincovo.vulnweb.com
impresora2.vulnweb.com
remus.vulnweb.com
resto.vulnweb.com
restasp.vulnweb.com
tera.vulnweb.com
prueba.php.vulnweb.com
test.vulnweb.com
testap.vulnweb.com
testaps.vulnweb.com
testapsnet.vulnweb.com
testasp.vulnweb.com
testaspnet.vulnweb.com
testaspx.vulnweb.com
testhtml5.vulnweb.com
testphp.vulnweb.com
tetphp.vulnweb.com
virus.vulnweb.com
viruswall.vulnweb.com
vulnweb.com
web5340.vulnweb.com
www.dealer.vulnweb.com
www.test.php.vulnweb.com
www.testasp.vulnweb.com
www.testphp.vulnweb.com
www.virus.vulnweb.com
Con este primer resultado, ya nos damos cuenta de que la superficie de ataque es mayor de lo que pensábamos, ¿verdad? Ahora que tenemos este tipo de información, podemos empezar a trabajar con Faraday en las siguientes tareas:
- Organizar los resultados de múltiples herramientas
- Disponer de una visualización mejor y más directa de la información
- Comprender todos los activos que vamos a auditar
Faraday se encargará de todo lo que necesito. Puedo cargar todos estos subdominios de sudomy y también otras entradas de múltiples herramientas y tenerlo todo organizado en un solo lugar.
Faraday le permite cargar los resultados de diferentes herramientas. Puedes subir informes, archivos XML o cualquier otro formato que prefieras. Pero en lugar de hacerlo manualmente vamos a automatizarlo con faraday-cli, facilitando todo el proceso.
faraday-cli es el cliente oficial de Faraday para automatizar tareas de reconocimiento, análisis de vulneraciones, flujos de trabajo, etc. En este caso, ya tenemos la herramienta que queremos automatizar, lo que pretendemos hacer y la salida. Así que lo que tenemos que hacer es
- Leer los subdominios de la salida de sudomy.
- Repasar la lista
- Cargar los activos en Faraday
Instalación de Faraday-cli en su terminal
En primer lugar, debemos instalar faraday-cli en el ordenador y autenticarnos con la plataforma de Faraday. https://github.com/infobyte/faraday-cli- Instalación desde pip:- pip install faraday-cli- Instalación desde la fuente:- git clone https://github.com/infobyte/faraday-cli.git
- cd faraday-cli
- pip install .
| ➜ faraday-cli auth
URL de Faraday [https://myworkspace.faraday.com]: https://myworkspace.faraday.com Validar certificado SSL para [https://myworkspace.faraday.com] (Y, N) [Y]: Usuario: faraday Contraseña: ******* Guardar configuración ✔ Autentificado con Faraday: https://myworkspace.faraday.com |
Cargar los primeros resultados
Como hemos mencionado antes, primero debemos identificar los resultados, organizar esa información y cargarla en Faraday.
| ➜ cat subdominio.txt
antivirus1.vulnweb.com autoconfig.demo.vulnweb.com blogger.com.vulnweb.com httptestaspnet.vulnweb.com live2.vulnweb.com [...] |
En segundo lugar, tenemos que leer ese archivo automáticamente y, para cada uno, cargar el host identificado en Faraday:
| ➜ for host in $(cat subdominio.txt); echo ‘[{“ip”: “‘$host'”, “descripción”: “‘$host'”}]’ | faraday-cli host create -stdin -w demo_faraday -resolve
Host creado { “description”: “antivirus1.vulnweb.com”, “vulns”: 0, “tipo”: “Host”, “propietario”: “faraday”, “versiones”: [], “ip”: “antivirus1.vulnweb.com”, “default_gateway”: “”, “credenciales”: 0, “importancia”: 0, “propiedad”: falso, “name”: “antivirus1.vulnweb.com”, “severity_counts”: { “crítico”: null, “host_id”: 74100, [...] |
Lo que queremos conseguir con el para una es iterar sobre la lista de subdominios y luego ejecutar faraday-cli para cargar cada uno de ellos. El resultado final debería parecerse bastante a esta imagen:
Reconocimiento activo
El objetivo principal de estas tareas es ampliar la superficie de ataque que estamos analizando. Nuestro punto de partida era un dominio concreto; ahora trabajamos con una lista más amplia de la infraestructura. En esta fase, pretendemos identificar qué puertos y servicios de las aplicaciones identificadas están expuestos. Para ello, utilizaremos nmap. Puede descargarlo aquí
Para automatizar esta segunda fase, tenemos que:
- Descarga las listas de IPs/dominios que cargamos en Faraday.
- Cárguelos como argumentos en nmap y escanee sus puertos/servicios.
- Vuelve a cargar los resultados en Faraday.
Esto también se puede automatizar desde nuestro terminal así:
| ➜ faraday-cli host list -ip -w demo_faraday | nmap -iL - -oX /tmp/nmap_results.xml && faraday-cli tool report /tmp/nmap_results.xml
Iniciando Nmap ( https://nmap.org ) Estadísticas: 0:00:36 transcurridas; 0 hosts completados (31 levantados), 31 en proceso de escaneo de conexión. Tiempo de escaneo de conexión: Alrededor de 0.18% hecho Descubierto puerto abierto 80/tcp en 44.238.29.244 Descubierto puerto abierto 80/tcp en 44.228.249.3 [...] Procesamiento del informe Nmap ⬆ Envío de datos al espacio de trabajo: demo_faraday ✔ Hecho |
Nmap identificará las IPs de cada subdominio que analicemos. Así que ahora tendremos esa información disponible para cualquier prueba:
Análisis de vulnerabilidad
Para concluir esta primera fase de automatización, escanearemos un subdominio que nos parezca interesante:
Para ello, registraremos un agente en la instancia de Faraday. Un agente es un conector que nos permite añadir una o varias herramientas a la plataforma Faraday y poder interactuar con ella dentro de nuestro terminal.
Faraday proporciona soporte nativo para una amplia gama de herramientas. Ahora centraremos nuestra atención en BurpSuite y utilizaremos su plugin (para esta acción, necesitamos utilizar la Licencia Profesional de BurpSuite, ya que expone la API necesaria para el plugin).
La rueda pequeña nos permitirá configurar parámetros para la API Burp:
- BURP HOST: Nuestro servidor Burpsuite.
- BURP API KEY: la APIKEY para consumir el Burpsuite.
- INTERVALO PULL: el intervalo que aplicaremos para refrescar la información.
Todas estas configuraciones se incluyen en la sección de configuración de Burpsuite: Configuración -> Suite -> API REST
Una vez registrado el agente, debemos instalar faraday-dispatcher en nuestro PC para poder interactuar con él:
| $ pip3 install faraday_agent_dispatcher |
Por último, tenemos que conectar el agente desde nuestra consola
| faraday-dispatcher run -token=360503 |
Con toda nuestra configuración lista, deberíamos poder activar nuestro agente desde la línea de comandos:
| $ faraday-cli agent run -a 1 -e burp -p ”{“NAMED_CONFIGURATION”: ”Rastreo y Auditoría - Rápido”, ”TARGET_URL”: ”http://testphp.vulnweb.com”}” -w demo_faraday |
A continuación encontrará la explicación de cada parámetro para que pueda entender cada parte del comando:
- agente en ejecución: desde faraday-cli para activar el agente.
- -a: el ID del agente. Para reconocer todos los agentes implantados puede aplicar lista de agentes faraday-cli.
- -e: Nombre del ejecutor
- -pen formato JSON, el parámetro de configuración de los agentes
- NAMED_CONFIGURATION: la configuración de la política Burpsuite. En este enlace encontrará información sobre cada uno de ellos.
- TARGET_URL: la URL a auditar.
- -w: el nombre del espacio de trabajo.
| ➜ faraday-cli agent run -a 1 -e burp -p ”{“NAMED_CONFIGURATION”: ”Rastreo y auditoría - Rápido”, ”TARGET_URL”: ”http://testphp.vulnweb.com”}” -w demo_faraday
Ejecutor en ejecución: burpsuite/burp Parámetros: {“NAMED_CONFIGURATION”: ”Rastreo y auditoría - Rápido”, ”TARGET_URL”: ”http://testphp.vulnweb.com”} Comando generado: [2613] |
Esto ejecutará automáticamente el agente Burpsuite:
| - faraday_agent_dispatcher - INFO {Hilo principal} [dispatcher.py:264 - run_once()] Analizando datos: {“execution_ids”: [26], “agent_id”: 1, “workspaces”: [“demo_faraday”], “action”: “RUN”, “executor”: “burp”, “args”: {“NAMED_CONFIGURATION”: “Rastreo y auditoría - Rápido”, “TARGET_URL”: “http://testphp.vulnweb.com“}
[...] [dispatcher.py:416 - run_once()] Ejecutar el eructo |
Una vez que el agente finalice, los resultados se cargarán en Faraday automáticamente.
Dado que estamos ejecutando un agente a través de un dominio, el proceso es relativamente sencillo. ¿Pero qué pasa si queremos hacer este mismo proceso contra múltiples dominios con, por ejemplo, el puerto 80 abierto? Faraday-cli no nos permite buscar subdominios, pero se nos ocurrió un one-liner que es super fácil de entender, incluso cuando parece complejo.
| $ faraday-cli host list -port 80 -w demo_faraday -j | jq ‘.[2].value.hostnames’ | sed ‘s/[“,]//g’ | sed ‘1d;$d’ | tr -d ‘ |
Esta es la explicación de cada comando:
- En primer lugar, pide a faraday-cli la lista de hosts con el puerto 80 abierto, y la salida en formato JSON (-j)
- Con jq obtendremos los valores de los nombres de host asociados a esas IPs, en formato de lista.
- La primera sed borrará las comillas y las comas de la lista.
- El segundo sed borrará la primera y la última línea (los valores entre [ y ])
- La tr borrará los espacios en blanco.
| testapsnet.vulnweb.com
tetphp.vulnweb.com ec2-44-228-249-3.us-west-2.compute.amazonaws.com tera.vulnweb.com www.test.php.vulnweb.com remus.vulnweb.com restasp.vulnweb.com testap.vulnweb.com blogger.com.vulnweb.com testaspx.vulnweb.com autoconfig.demo.vulnweb.com odincovo.vulnweb.com [...] |
Sólo queda una cosa por hacer, ejecutar el agente para cada dominio y esperar los resultados en la plataforma Faraday. Podemos vincular esto al comando anterior para que se ejecute al mismo tiempo, así:
| ➜ faraday-cli host list -port 80 -w demo_faraday -j | jq ‘.[2].value.hostnames’ | sed ‘s/[“,]//g’ | sed ‘1d;$d’ | tr -d ‘ ‘ > /tmp/analyze.txt && for subdominio in $(cat /tmp/analyze.txt); echo ‘{“NAMED_CONFIGURATION”: “Crawl and Audit - Fast”, “TARGET_URL”: “‘$subdominio'”}’ | faraday-cli agent run -a 7 -e burp -stdin -w demo_faraday
Ejecutor en ejecución: burpsuite/burp Parámetros: {“NAMED_CONFIGURATION”: “Crawl and Audit - Fast”, “TARGET_URL”: “testapsnet.vulnweb.com”} Comando generado: [2616] Ejecutor en ejecución: burpsuite/burp Parámetros: {“NAMED_CONFIGURATION”: “Crawl and Audit - Fast”, “TARGET_URL”: “tetphp.vulnweb.com”} Comando generado: [2617] |
Esto puede parecer complicado pero espera a la tercera parte. Lo llevaremos al siguiente nivel con un lenguaje superior (¡Python! por supuesto) y cómo añadir una fase de explotación e informe.
Otros enlaces de interés:

