80,443 - Pentesting Web Methodology
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Obtén la perspectiva de un hacker sobre tus aplicaciones web, red y nube
Encuentra y reporta vulnerabilidades críticas y explotables con un impacto real en el negocio. Usa nuestras más de 20 herramientas personalizadas para mapear la superficie de ataque, encontrar problemas de seguridad que te permitan escalar privilegios y usar exploits automatizados para recopilar evidencia esencial, convirtiendo tu arduo trabajo en informes persuasivos.
El servicio web es el más común y extenso y existen muchos tipos diferentes de vulnerabilidades.
Puerto por defecto: 80 (HTTP), 443(HTTPS)
En esta metodología vamos a suponer que vas a atacar un dominio (o subdominio) y solo eso. Por lo tanto, debes aplicar esta metodología a cada dominio, subdominio o IP descubierta con un servidor web indeterminado dentro del alcance.
Verifica si hay vulnerabilidades conocidas para la versión del servidor que se está ejecutando. Los encabezados HTTP y las cookies de la respuesta podrían ser muy útiles para identificar las tecnologías y/o versión que se están utilizando. Un escaneo de Nmap puede identificar la versión del servidor, pero también podrían ser útiles las herramientas whatweb, webtech o https://builtwith.com/:
Search for vulnerabilidades de la aplicación web versión
Algunos trucos para encontrar vulnerabilidades en diferentes tecnologías bien conocidas que se están utilizando:
Tenga en cuenta que el mismo dominio puede estar utilizando diferentes tecnologías en diferentes puertos, carpetas y subdominios. Si la aplicación web está utilizando alguna tecnología/plataforma bien conocida mencionada anteriormente o cualquiera otra, no olvide buscar en Internet nuevos trucos (¡y hágamelo saber!).
Si el código fuente de la aplicación está disponible en github, además de realizar por su cuenta una prueba de caja blanca de la aplicación, hay alguna información que podría ser útil para la actual prueba de caja negra:
¿Hay un Change-log o Readme o Version o algo con información de versión accesible a través de la web?
¿Cómo y dónde se guardan las credenciales? ¿Hay algún archivo (¿accesible?) con credenciales (nombres de usuario o contraseñas)?
¿Las contraseñas están en texto plano, encriptadas o qué algoritmo de hash se utiliza?
¿Se está utilizando alguna clave maestra para encriptar algo? ¿Qué algoritmo se utiliza?
¿Puedes acceder a alguno de estos archivos explotando alguna vulnerabilidad?
¿Hay alguna información interesante en el github (problemas resueltos y no resueltos)? ¿O en el historial de commits (quizás alguna contraseña introducida dentro de un antiguo commit)?
Si se utiliza un CMS, no olvides ejecutar un escáner, tal vez se encuentre algo jugoso:
Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish CMSScan: WordPress, Drupal, Joomla, vBulletin sitios web para problemas de seguridad. (GUI) VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart CMSMap: (W)ordpress, (J)oomla, (D)rupal o (M)oodle droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress
En este punto, ya deberías tener algo de información sobre el servidor web que está utilizando el cliente (si se proporciona algún dato) y algunos trucos a tener en cuenta durante la prueba. Si tienes suerte, incluso has encontrado un CMS y ejecutado algún escáner.
A partir de este punto, comenzaremos a interactuar con la aplicación web.
Páginas predeterminadas con información interesante:
/robots.txt
/sitemap.xml
/crossdomain.xml
/clientaccesspolicy.xml
/.well-known/
También revisa los comentarios en las páginas principales y secundarias.
Forzando errores
Los servidores web pueden comportarse de manera inesperada cuando se les envían datos extraños. Esto puede abrir vulnerabilidades o divulgar información sensible.
Accede a páginas falsas como /whatever_fake.php (.aspx,.html,.etc)
Agrega "[]", "]]" y "[[" en los valores de cookie y valores de parámetro para crear errores
Genera un error dando entrada como /~randomthing/%s
al final de la URL
Prueba diferentes verbos HTTP como PATCH, DEBUG o incorrectos como FAKE
Si descubres que WebDav está habilitado pero no tienes suficientes permisos para subir archivos en la carpeta raíz, intenta:
Fuerza Bruta de credenciales
Sube archivos a través de WebDav al resto de las carpetas encontradas dentro de la página web. Puede que tengas permisos para subir archivos en otras carpetas.
Si la aplicación no está forzando al usuario a usar HTTPS en ninguna parte, entonces es vulnerable a MitM
Si la aplicación está enviando datos sensibles (contraseñas) usando HTTP. Entonces es una alta vulnerabilidad.
Usa testssl.sh para verificar vulnerabilidades (En programas de Bug Bounty, probablemente este tipo de vulnerabilidades no serán aceptadas) y usa a2sv para volver a verificar las vulnerabilidades:
Información sobre vulnerabilidades de SSL/TLS:
Lanza algún tipo de spider dentro de la web. El objetivo del spider es encontrar la mayor cantidad de rutas posible desde la aplicación probada. Por lo tanto, se deben utilizar rastreo web y fuentes externas para encontrar la mayor cantidad de rutas válidas posible.
gospider (go): Spider HTML, LinkFinder en archivos JS y fuentes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
hakrawler (go): Spider HML, con LinkFinder para archivos JS y Archive.org como fuente externa.
dirhunt (python): Spider HTML, también indica "archivos jugosos".
evine (go): Spider HTML interactivo CLI. También busca en Archive.org.
meg (go): Esta herramienta no es un spider, pero puede ser útil. Solo puedes indicar un archivo con hosts y un archivo con rutas y meg obtendrá cada ruta en cada host y guardará la respuesta.
urlgrab (go): Spider HTML con capacidades de renderizado JS. Sin embargo, parece que no está mantenido, la versión precompilada es antigua y el código actual no compila.
gau (go): Spider HTML que utiliza proveedores externos (wayback, otx, commoncrawl).
ParamSpider: Este script encontrará URLs con parámetros y las listará.
galer (go): Spider HTML con capacidades de renderizado JS.
LinkFinder (python): Spider HTML, con capacidades de embellecimiento JS capaz de buscar nuevas rutas en archivos JS. También podría valer la pena echar un vistazo a JSScanner, que es un envoltorio de LinkFinder.
goLinkFinder (go): Para extraer endpoints tanto en el código fuente HTML como en archivos javascript incrustados. Útil para cazadores de bugs, equipos rojos, ninjas de infosec.
JSParser (python2.7): Un script de python 2.7 que utiliza Tornado y JSBeautifier para analizar URLs relativas de archivos JavaScript. Útil para descubrir fácilmente solicitudes AJAX. Parece que no está mantenido.
relative-url-extractor (ruby): Dado un archivo (HTML) extraerá URLs de él utilizando expresiones regulares ingeniosas para encontrar y extraer las URLs relativas de archivos feos (minificados).
JSFScan (bash, varias herramientas): Reúne información interesante de archivos JS utilizando varias herramientas.
subjs (go): Encuentra archivos JS.
page-fetch (go): Carga una página en un navegador sin cabeza e imprime todas las URLs cargadas para cargar la página.
Feroxbuster (rust): Herramienta de descubrimiento de contenido que mezcla varias opciones de las herramientas anteriores.
Javascript Parsing: Una extensión de Burp para encontrar rutas y parámetros en archivos JS.
Sourcemapper: Una herramienta que dado el URL .js.map te proporcionará el código JS embellecido.
xnLinkFinder: Esta es una herramienta utilizada para descubrir endpoints para un objetivo dado.
waymore: Descubre enlaces de la máquina Wayback (también descargando las respuestas en Wayback y buscando más enlaces).
HTTPLoot (go): Rastrea (incluso llenando formularios) y también encuentra información sensible utilizando expresiones regulares específicas.
SpiderSuite: Spider Suite es un rastreador/spider de seguridad web GUI avanzado con múltiples funciones diseñado para profesionales de ciberseguridad.
jsluice (go): Es un paquete de Go y herramienta de línea de comandos para extraer URLs, rutas, secretos y otros datos interesantes del código fuente de JavaScript.
ParaForge: ParaForge es una simple extensión de Burp Suite para extraer los parámetros y endpoints de la solicitud para crear listas de palabras personalizadas para fuzzing y enumeración.
katana (go): Herramienta impresionante para esto.
Crawley (go): Imprime cada enlace que puede encontrar.
Comienza fuerza bruta desde la carpeta raíz y asegúrate de hacer fuerza bruta a todos los directorios encontrados utilizando este método y todos los directorios descubiertos por el Spidering (puedes hacer esta fuerza bruta recursivamente y agregando al principio de la lista de palabras utilizada los nombres de los directorios encontrados). Herramientas:
Dirb / Dirbuster - Incluido en Kali, antiguo (y lento) pero funcional. Permite certificados auto-firmados y búsqueda recursiva. Demasiado lento en comparación con las otras opciones.
Dirsearch (python): No permite certificados auto-firmados pero permite búsqueda recursiva.
Gobuster (go): Permite certificados auto-firmados, no tiene búsqueda recursiva.
Feroxbuster - Rápido, soporta búsqueda recursiva.
wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
ffuf - Rápido: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
uro (python): Esta no es un spider, sino una herramienta que dado el listado de URLs encontradas eliminará URLs "duplicadas".
Scavenger: Extensión de Burp para crear una lista de directorios a partir del historial de burp de diferentes páginas.
TrashCompactor: Elimina URLs con funcionalidades duplicadas (basado en importaciones de js).
Chamaleon: Utiliza wapalyzer para detectar tecnologías utilizadas y seleccionar las listas de palabras a usar.
Diccionarios recomendados:
raft-large-directories-lowercase.txt
directory-list-2.3-medium.txt
RobotsDisallowed/top10000.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirb/big.txt
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Ten en cuenta que cada vez que se descubra un nuevo directorio durante la fuerza bruta o el spidering, debe ser Fuerza Bruta.
Broken link checker: Encuentra enlaces rotos dentro de HTML que pueden ser propensos a tomas de control.
Copias de seguridad de archivos: Una vez que hayas encontrado todos los archivos, busca copias de seguridad de todos los archivos ejecutables (".php", ".aspx"...). Variaciones comunes para nombrar una copia de seguridad son: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp y file.old. También puedes usar la herramienta bfac o backup-gen.
Descubrir nuevos parámetros: Puedes usar herramientas como Arjun, parameth, x8 y Param Miner para descubrir parámetros ocultos. Si puedes, podrías intentar buscar parámetros ocultos en cada archivo web ejecutable.
Arjun todas las listas de palabras predeterminadas: https://github.com/s0md3v/Arjun/tree/master/arjun/db
Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
Comentarios: Revisa los comentarios de todos los archivos, puedes encontrar credenciales o funcionalidad oculta.
Si estás jugando CTF, un truco "común" es ocultar información dentro de comentarios a la derecha de la página (usando cientos de espacios para que no veas los datos si abres el código fuente con el navegador). Otra posibilidad es usar varias nuevas líneas y ocultar información en un comentario en la parte inferior de la página web.
Claves API: Si encuentras alguna clave API hay una guía que indica cómo usar claves API de diferentes plataformas: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird.
Claves API de Google: Si encuentras alguna clave API que se parezca a AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik puedes usar el proyecto gmapapiscanner para verificar a qué APIs puede acceder la clave.
S3 Buckets: Mientras haces spidering, verifica si algún subdominio o algún enlace está relacionado con algún S3 bucket. En ese caso, verifica los permisos del bucket.
Mientras realizas el spidering y fuerza bruta podrías encontrar cosas interesantes que debes notar.
Archivos interesantes
Busca enlaces a otros archivos dentro de los archivos CSS.
Si encuentras un .env se puede encontrar información como claves API, contraseñas de bases de datos y otra información.
Si encuentras endpoints API también deberías probarlos. Estos no son archivos, pero probablemente "parecerán" como ellos.
Archivos JS: En la sección de spidering se mencionaron varias herramientas que pueden extraer rutas de archivos JS. Además, sería interesante monitorear cada archivo JS encontrado, ya que en algunas ocasiones, un cambio puede indicar que se introdujo una vulnerabilidad potencial en el código. Podrías usar por ejemplo JSMon.
Desofuscador y desempaquetador de Javascript: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator.
Beautificador de Javascript: http://jsbeautifier.org/, http://jsnice.org/.
Desofuscación de JsFuck (javascript con caracteres:"[]!+" https://enkhee-osiris.github.io/Decoder-JSFuck/).
TrainFuck: +72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
En varias ocasiones, necesitarás entender las expresiones regulares utilizadas. Esto será útil: https://regex101.com/ o https://pythonium.net/regex.
También podrías monitorear los archivos donde se detectaron formularios, ya que un cambio en el parámetro o la aparición de un nuevo formulario puede indicar una nueva funcionalidad potencialmente vulnerable.
403 Prohibido/Autenticación básica/401 No autorizado (bypass)
403 & 401 Bypasses502 Error de Proxy
Si alguna página responde con ese código, probablemente sea un proxy mal configurado. Si envías una solicitud HTTP como: GET https://google.com HTTP/1.1
(con el encabezado de host y otros encabezados comunes), el proxy intentará acceder a google.com y habrás encontrado un SSRF.
Autenticación NTLM - Divulgación de información
Si el servidor en ejecución que solicita autenticación es Windows o encuentras un inicio de sesión que pide tus credenciales (y solicita el nombre de dominio), puedes provocar una divulgación de información.
Envía el encabezado: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”
y debido a cómo funciona la autenticación NTLM, el servidor responderá con información interna (versión de IIS, versión de Windows...) dentro del encabezado "WWW-Authenticate".
Puedes automatizar esto utilizando el plugin de nmap "http-ntlm-info.nse".
Redirección HTTP (CTF)
Es posible poner contenido dentro de una Redirección. Este contenido no se mostrará al usuario (ya que el navegador ejecutará la redirección) pero algo podría estar oculto allí.
Ahora que se ha realizado una enumeración completa de la aplicación web, es hora de verificar muchas posibles vulnerabilidades. Puedes encontrar la lista de verificación aquí:
Web Vulnerabilities MethodologyEncuentra más información sobre vulnerabilidades web en:
Puedes usar herramientas como https://github.com/dgtlmoon/changedetection.io para monitorear páginas por modificaciones que podrían insertar vulnerabilidades.
Obtén la perspectiva de un hacker sobre tus aplicaciones web, red y nube
Encuentra e informa vulnerabilidades críticas y explotables con un impacto real en el negocio. Utiliza nuestras más de 20 herramientas personalizadas para mapear la superficie de ataque, encontrar problemas de seguridad que te permitan escalar privilegios y usar exploits automatizados para recopilar evidencia esencial, convirtiendo tu arduo trabajo en informes persuasivos.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)