External Pentest
Última actualización
Última actualización
Un pentest external es cuando el cliente provee un conjunto de IPs o un conjunto de subdominios dependiendo el tipo (caja negra, blanca, gris) y nosotros atacamos desde fuera de su red.
Por lo general se nos da información del tipo caja gris/negra. En la mayoría de los casos, solo nos dan el dominio principal y que hagamos reconocimiento desde cero, pero esto va a depender del cliente, lo importante aquí es que las pruebas se hacen desde afuera de la red de cliente y sin tener una conexión a su infraestructura.
Dato de color: Al final de esta guía tienen un checklist que pueden seguir en un pentest external.
Algo importante a destacar es que, si nos asignan una Web App en modalidad black box, el enfoque será similar al de un pentest externo, pero más acotado. Es decir, nuestro objetivo principal será la web, aunque eso no significa que no podamos explorar vectores externos que nos permitan encadenar accesos hacia la aplicación principal. Por supuesto, en estos casos es fundamental comunicarle al cliente que, dado el enfoque black box y el alcance limitado, podría ser necesario realizar un reconocimiento más amplio, lo cual podría implicar revisar activos adicionales relacionados con la web.
La dividiremos en dos, enumeración pasiva y activa, en la pasiva intentamos buscar información por internet sin atacar a los servicios de nuestro objetivo. En la activa ya estamos haciendo contacto directo en la red de nuestro objetivo por lo que debemos ir con más precaución. Por lo general, podemos mezclar ambos conceptos ya que tenemos autorización del cliente para realizarlo, pero te recomendamos que empieces de izquierda a derecha, es decir, una enumeración pasiva y luego una activa.
MUY IMPORTANTE: NO SEAS "BOLU" Y EJECUTES HERRAMIENTAS DE FORMA AUTOMÁTICA SIN ESTABLECER LÍMITES EN TUS SOLICITUDES, RECORDÁ QUE HAY CLIENTES QUE UTILIZAN POR EJEMPLO SERVICIOS DE AUTOSCALING, Y SI HAY MUCHO TRÁFICO EN SU RED SE LES VA A IR LA FACTURA DE AWS/GCP/AZURE A LA NUBE LITERAL.
En esta parte buscamos obtener la mayor información posible sobre nuestro target, ampliar nuestros vectores de ataques lo máximo posible, pero ojo, hay ocasiones que el cliente solo quiere que se trabaje sobre el scope que se nos asigna asi que este paso se suele saltar.
En esta etapa nos centraremos a obtener subdominios, IPS, puertos abiertos, servicios corriendo en los puertos y las tecnologías que se utilizan. Para estos ejemplos, utilizaré el dominio de nasa.gov ya que pertenece a un VDP: , si no sabes que es un VDP es hora de googlear, sino te estoy dando todo en bandeja y no pones a prueba tu curiosidad, habilidad número 1 de un hacker.
En esta etapa buscamos profundizar más en nuestro objetivo. Utilizamos técnicas de OSINT para ampliar nuestros vectores de entradas.
Esta es una herramienta que provee búsqueda de forma automática seleccionando entre 18 tipos diferentes de búsquedas en google, me pareció un lindo atajo para ir más rápido.
Dato de color: Usar todos los motores de búsqueda posibles porque puede que encuentres información en uno que en otro esa misma información no esté porque la información se indexa de forma diferente, asi que es clave que busques en estos 3 sitios como mínimo.
En esta sección tenemos varios temas interesantes, uno es la búsqueda de información a través de dorks y también la podemos hacer más profunda analizando a la empresa en cuestión y los usuarios/programadores que hagan los commits en los proyectos.
Una vez que te descargues el .git empiezas a analizarlo con comandos de git, como por ejemplo git log, git show, etc.
User enumeration en commits:
Para este proceso tenemos que inspeccionar el hash de commit
Luego agregamos ".patch" al final para inspeccionar la información del mismo y aquí podemos obtener el correo de la persona que hizo el commit.
Para utilizar esta tool, van a tener que tener una cuenta y descargarse los repositorios que quieren inspeccionar, luego van a filtrar y desde ahí van a poder tener más a detalles los colaboradores.
Gitleaks es una herramienta para detectar secretos como contraseñas, claves API y tokens en repositorios git, archivos y cualquier otra cosa que quieras arrojarle a través de stdin.
Esta es una tool bastante rápida para buscar información en github.
Crt.sh permite buscar y visualizar información detallada sobre los certificados emitidos, como el nombre de dominio asociado, el emisor del certificado, los subdominios, la fecha de emisión y vencimiento, y otros datos relevantes.
Las vulnerabilidades que he reportado gracias a Postman no se dan idea, a través de esta página van a poder buscar información sobre colecciones de empresas en donde en muchas de estas colecciones siempre se dejan endpoints o api_keys para interactuar con dichas APIs.
Bastante similar a Postman.
Docker Hub es un registro de contenedores que muchas empresas la utilizan. De vez en cuando suben algunos contenedores que contienen información importante de cara a un atacante.
Scribd es como una biblioteca gigante de archivos, aquí te vas a encontrar de todo, es una herramienta muy útil y donde siempre se encuentran cositas.
Esta es una herramienta para buscar buckets públicos por internet.
Esta parte es muy divertida, vamos a utilizar tanto Vimeo como Youtube para buscar por ejemplo videos demostrativos "más conocidas como demos" de nuestro objetivo. Muchas veces los clientes dejan grabadas demos para presentar a sus clientes y aquí divulgan información como ser aplicaciones que no están en producción, usuarios válidos, posibles rutas interesantes, etc. Por ejemplo si tienes una demo donde muestran la sección de usuarios, te recolectas todos esos usuarios y vas a realizar un password spray sobre el panel mismo con credenciales débiles como por ejemplo: 12345678. CREEME QUE MÁS DE UNA VEZ ME FUNCIONÓ. También es importante para entender cómo funcionan sus aplicaciones y por dónde podríamos encontrar vulnerabilidades ya que acá muestran todo el flujo de la aplicación por lo general.
Hay muchas situaciones que nuestro scope es muy reducido y no tenemos tantos subdomnios o ips expuestas, por lo que nos tocará ir a por los empleados de la empresa para intentar acceder al mismo.
En este punto nos centramos a enumerar al cliente pero todo sobre la capa 8, el eslabón más débil de las empresas, nuestro objetivo es listar la mayor cantidad de usuarios de la empresa o los más importantes y encontrar su patrón de usuarios, correos y demás, una vez que hagamos hecho este procedimiento pasaremos a utilizar herramientas como dehashed para buscar leaks asociado a sus cuentas.
Durante la fase de reconocimiento, uno de los objetivos clave es identificar empleados que puedan representar un punto de entrada valioso para un atacante. Esto implica analizar no solo sus roles, sino también a qué tipo de información o sistemas podrían tener acceso.
Personas del área de People & Culture o Recursos Humanos pueden tener acceso a información sensible de los empleados, como documentos personales, contratos o sueldos.
Integrantes del equipo de IT suelen tener acceso a servidores, infraestructura interna, VPNs y otros sistemas críticos.
Personal de alta gerencia o ejecutivos manejan información estratégica, financiera y confidencial.
Roles como diseñadores, marketing o atención al cliente no deben ser descartados. Muchas veces las empresas asignan más permisos de los necesarios, por lo que alguien con bajo perfil puede tener privilegios excesivos.
Es importante analizar cada perfil preguntándonos: ¿qué ganaría un atacante si compromete esta cuenta?
LinkedIn Buscar empleados de la empresa para identificar nombres, roles y posibles patrones de nombre de usuario.
Hunter.io Permite obtener correos públicos asociados al dominio de la empresa. También puede dar una idea del formato general de los correos (por ejemplo: jperez@nasa.gov).
GitHub / GitLab Analizar quiénes participan en repositorios asociados a la empresa. Observar autores de commits, usuarios frecuentes, correos configurados en los repositorios, etc. Esto ya lo vimos más arriba ;)
Supongamos que encontramos a un empleado llamado Juan Pérez. En sus redes sociales utiliza el usuario “jperez” o “juanp”. Es probable que este mismo patrón se use en su correo corporativo.
Si el dominio de la empresa es nasa.gov, algunas variantes posibles serían:
Además, es común que ese mismo patrón se repita en correos personales como:
juan@gmail.com
jperez@outlook.com
El objetivo es identificar patrones repetidos en nombres de usuario y aplicarlos a la estructura de correo corporativo. Una vez definida una lista de posibles correos, se puede pasar a buscarlos en fuentes como Dehashed.
Con una lista de posibles víctimas y sus correos (o variantes), se pueden realizar búsquedas efectivas en Dehashed. Algunos criterios útiles son:
Nombres de usuario (como jperez)
IPs
Nombres y apellidos
El dominio completo de la empresa (nasa.gov)
En el caso que no obtengas contraseñas en texto plano, puedes intentar buscar los hashes de contraseña en algunas páginas como:
O optar por crackearlas offline:
Si quieres saber si un correo ha sido comprometido puedes usar:
En esta sección exploraremos algunas alternativas que tenemos ya en una enumeración más activa, es decir, ya vamos a estar haciendo uso de tools contra la víctima en particular, por ejemplo, muchas veces para enumerar subdominios tenemos que hacer fuerza bruta sobre la empresa víctima, por lo que quedarán registros en sus logs que nuestra ip estuvo realizando ese tipo de ataques, es por eso que para esta etapa ya se requiere autorización del cliente (también en la anterior, pero en la fase de enumeración pasiva solo recolectamos información en internet, no estamos atacando al cliente).
El proceso que realizamos parte desde enumerar subdominios, luego enumeramos puertos/servicios, y después ya empezamos a hacer un reconocimiento más específico por cada puerto y servicio, llegada a esta etapa ya tenemos que tener una lista de puertos y los servicios que corren en cada uno de estos para lanzar una serie de scripts de nmap, en el caso de puertos 443, 80 podemos apoyarnos de nuclei, burpsuite y como extra también podemos hacer uso de theHarvester, bbot, dnsenum para una mayor enumeración.
La clave está en tener todos los puertos y servicios que están expuestos en el cliente y buscar formas de entrar a sus servidores mediante vulnerabilidades o fallas en la configuración de los mismos.
SubdomainFinder es una herramienta automatizada diseñada para la recopilación y verificación de subdominios utilizando múltiples herramientas de reconocimiento. Ideal para evaluaciones de seguridad en aplicaciones web y análisis de estructuras de red.
Ejemplo de uso:
Resultados:
SubdomainFinder es una herramienta automatizada diseñada para la recopilación y verificación de subdominios utilizando múltiples herramientas de reconocimiento. Ideal para evaluaciones de seguridad en aplicaciones web y análisis de estructuras de red. Creada por un tal r4z0r con mucho amor.
Esta no la ejecuté porque me iba a dar una salida gigante, pero es una de mis tools favoritas a la hora de un escaneo rápido para obtener subdominios y URLs.
Host es una herramienta que nos permitirá identificar qué IPs están corriendo bajo ciertos dominios. A través del siguiente script le pasamos una lista de dominios y este filtra todos las IPs a las que resuelven esos dominios deja solo las únicas, es decir, quita las repetidas.
Oneliner:
Ejemplo:
Dig (Domain Information Groper) es una herramienta de línea de comandos de Linux que realiza búsquedas en los registros DNS, a través de los nombres de servidores, y te muestra el resultado:
Oneliner:
Ejemplo:
Nmap, bueno, no hace falta que explique Nmap si estás en este punto de tu carrera. Aquí los pasos importantes serán realizar un escaneo de puertos y servicios que nos permitan aumentar nuestros vectores de ataque y conocer todo lo que el cliente tenga expuesto sin afectar su red y evitando que nos baneen los ataques.
Some Ports:
Este script realiza un escaneo enfocado en una serie de puertos ampliamente utilizados en entornos corporativos. El objetivo es identificar rápidamente servicios expuestos que podrían representar vectores de ataque comunes.
Parámetros destacados:
--defeat-rst-ratelimit: Ayuda a evitar restricciones impuestas por los sistemas al recibir múltiples paquetes RST (reset). Esto puede mejorar la precisión en escaneos más lentos o sigilosos.
--max-retries 1: Limita los reintentos de envío de paquetes a 1, agilizando el escaneo y reduciendo la posibilidad de detección.
--max-hostgroup 4: Controla la cantidad de hosts escaneados simultáneamente. En este caso, se limitan a 4 para evitar sobrecargar la red o los sistemas objetivos.
-sT: Realiza un escaneo TCP con conexión completa (three-way handshake). Se usa cuando no se tienen privilegios de root.
-Pn: Omite la detección de hosts vivos. Nmap asume que todos los objetivos están activos, útil si bloquean pings o detección previa.
-T2: Define el nivel de agresividad del escaneo (timing). T2 es una opción moderada, adecuada para entornos donde se requiere precaución.
En la teoría se nos indica que el escaneo SYN es el más adecuado, pero se puede usar cualquiera, AUNQUE últimamente hay más IPS o incluso IDS que te detectan fácilmente SYN o te bloquean directamente. Entonces todo es cuestión de adaptarse al pentest que estás teniendo e ir probando, puedes empezar con un -sS y si ves que no va bien te pasas al -sT o viceversa.
Dependiendo del entorno y los requerimientos del cliente, el parámetro de timing puede modificarse. A continuación, se presentan recomendaciones para ajustar la opción TIMING:
A. Equipos críticos o sensibles Mantener -T2 o incluso usar -T1 si el cliente solicita un escaneo más cuidadoso.
B. Escenario estándar o sin restricciones especiales Eliminar -T2 para que Nmap utilice su configuración de timing predeterminada, adaptándose automáticamente al número de objetivos y al tiempo disponible.
C. Escaneo más rápido (previa autorización de tu líder) Sustituir -T2 por --scan-delay 150ms para reducir el tiempo entre envíos de paquetes, acelerando el proceso.
Este comando representa un escaneo TCP básico y controlado, nos da una visibilidad general de los puertos expuestos.
Este escaneo es alternativo a los demás, lo interesante es que podemos decirle a Nmap que nos escaneo puertos basado en porcentajes de ratio, es decir, qué tan frecuente es que salga ese puerto en un escaneo, para eso Nmap maneja una lista de probabilidades por puerto (un ratio), esto lo vemos en la siguiente imagen:
Como se aprecia, el puerto 22 tiene una probilidad del 18% de salir en un escaneo, el http 48%, el 443 un 20%, teniendo en cuenta esto, si utilizamos port-ratio 0.48 tomará solo los puertos que tengan ese porcentaje.
En el siguiente escaneo reemplazar $ports por la lista de puertos que ya se tenga descubierta. Esta lista contendrá todos los puertos abiertos encontrados en todos los targets. Habrán targets que tienen ciertos puertos abiertos y otros no.
Si no quieres andar copiando uno por uno los puertos puedes usar funciones como estas definidas en tu .zshrc o .bashrc:
Cuando la ejecutes vas a tener copiado todos los puertos del escaneo en tu clipboard.
Si el tiempo lo permite realizamos este escaneo:
Aquí escaneamos los 65535 puertos.
Iniciar con los scripts de NMAP :
Parámetros destacados:
--max-rate: Con esto evitamos enviar más de x solicitudes por segundo.
Esta herramienta es una de las mejores cuando ya tenemos un conjunto de urls en nuestro arsenal, por ejemplo, cuando ya tengamos muchas urls cargadas en nuestro sitemap de burp, podemos hacer un filtrado de urls y pasarselas a nuclei, donde este a través de templates intentará buscar vulnerabilidades, se recomienda realizarlo de forma que se ve en la siguiente imagen con el fin de no lograr provocar una denegación de servicio o alto consumo de recursos en el cliente ya que realiza muchas peticiones.
Nuclei Scan:
-l nucleiUrls Especifica el archivo que contiene la lista de URLs a escanear. En este caso, nucleiUrls.
-timeout 20 Define un timeout de 20 segundos para las solicitudes HTTP. Si un objetivo tarda más, se descarta.
-etags ddos,fuzz,bruteforce Excluye templates que tengan los tags ddos, fuzz o bruteforce. Esto evita escaneos agresivos o pesados, que podrían generar ruido o afectar la estabilidad del sistema objetivo.
-es info Excluye resultados con severidad info, dejando solo findings con mayor impacto (low, medium, high, critical).
-retries 3 Reintenta hasta 3 veces en caso de errores temporales o fallos de red.
-stats Muestra estadísticas del escaneo en tiempo real (por ejemplo, cuántos templates se han ejecutado, cuántos hosts quedan, etc.).
-o nucleiScan.txt Guarda todos los resultados en el archivo nucleiScan.txt.
SQLMap básico:
Parámetros destacados:
-r: La solicitud que guardé desde Burp Suite.
--delay: Delay de x segundos por cada solicitud.
--proxy: Para que el tráfico pase por nuestro proxy, ej: burpsuite.
--risk: Este parámetro define el nivel de agresividad de las pruebas que realiza sqlmap. Acepta valores entre 1 y 3, siendo:
1 (por defecto): Utiliza payloads básicos, considerados seguros para la mayoría de los puntos de inyección SQL.
2: Agrega técnicas más intensivas, como inyecciones basadas en tiempo (time-based blind), que pueden generar una mayor carga en el servidor.
3: Incluye además pruebas basadas en errores (error-based), como OR 1=1, lo que incrementa la posibilidad de detección pero también el riesgo de afectar el comportamiento de la aplicación.
--level: A mayor nivel, más parámetros serán testeados (por ejemplo, cookies, headers adicionales, rutas ocultas). Debemos obviarlo si le pasamos -p ya que ahí le decimos el parámetro donde realizará la prueba.
Para encontrar IDORs utilizo esta extensión de Burpsuite que me parece muy fácil de utilizarla y bastante poderosa, se llama Auth Analyzer.
Herramientas útiles:
Personalmente me gusta más xss0r porque la puedes configurar con notificaciones en Telegram, entonces vas metiendo tus payloads y si se triguerea te llega una notificación, pero aún lo podemos hacer más rápido a este proceso con lo siguiente...
Configurar de base.yml
Ubicación de base.yml: /Users/r4z0r/Library/Application Support/espanso/match/base.yml (Dependerá de tu SO)
Cada vez que escribas por ejemplo lo que está dentro de trigger se añadirá automáticamente el payload que configures.
Enumeración pasiva
Enumeración activa
Esta es mi metodología básica para encontrar vulnerabilidades, no existe una guía final ni definitiva, hay que ir adaptándonos y mejorando nuestro proceso paso a paso, pero hoy a fecha que hago este artículo este es todo mi arsenal que utilizo y me da muy buenos resultados. Usa cada una de estas técnicas con precaución y recuerda que si no tienes autorización y tu objetivo no forma parte de de un VDP puedes estar cometiendo un delito, asi que ojito, un gran poder conlleva una gran responsabilidad.
Cencys Dorks Cheatsheet:
Shodan Dorks Cheatsheet:
Extensión de chrome:
Google Dorks Cheatsheet: :
Bing Dorks Cheatsheet:
Duckduckgo Dorks Cheatsheet:
Github Dorks Cheatsheet:
Si encuentras un .git fuzzeando una aplicación, puedes usar opciones como
Para automatizar este proceso de recolección te recomiendo que utilices o
Gitlab Dorks Cheatsheet:
Correos electrónicos (por ejemplo, )
Repositorio:
Repositorio:
Esta sección de NMAP la aprendí con el Team de , asi que más que agreadecido por sus conocimientos.
Guía:
Guía SQLMap:
Guía:
-
Guía:
Instalar
Para el XSS necesitas una cuenta cuenta en