hacktricks/network-services-pentesting/pentesting-web
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00
..
buckets f 2023-06-05 20:33:24 +02:00
php-tricks-esp f 2023-06-05 20:33:24 +02:00
tomcat f 2023-06-05 20:33:24 +02:00
xss-to-rce-electron-desktop-apps f 2023-06-05 20:33:24 +02:00
403-and-401-bypasses.md f 2023-06-05 20:33:24 +02:00
aem-adobe-experience-cloud.md f 2023-06-05 20:33:24 +02:00
apache.md f 2023-06-05 20:33:24 +02:00
artifactory-hacking-guide.md f 2023-06-05 20:33:24 +02:00
bolt-cms.md f 2023-06-05 20:33:24 +02:00
cgi.md f 2023-06-05 20:33:24 +02:00
code-review-tools.md f 2023-06-05 20:33:24 +02:00
dotnetnuke-dnn.md f 2023-06-05 20:33:24 +02:00
drupal.md f 2023-06-05 20:33:24 +02:00
flask.md f 2023-06-05 20:33:24 +02:00
git.md f 2023-06-05 20:33:24 +02:00
golang.md f 2023-06-05 20:33:24 +02:00
grafana.md f 2023-06-05 20:33:24 +02:00
graphql.md f 2023-06-05 20:33:24 +02:00
h2-java-sql-database.md f 2023-06-05 20:33:24 +02:00
iis-internet-information-services.md f 2023-06-05 20:33:24 +02:00
imagemagick-security.md f 2023-06-05 20:33:24 +02:00
jboss.md f 2023-06-05 20:33:24 +02:00
jira.md f 2023-06-05 20:33:24 +02:00
joomla.md f 2023-06-05 20:33:24 +02:00
jsp.md f 2023-06-05 20:33:24 +02:00
laravel.md f 2023-06-05 20:33:24 +02:00
moodle.md f 2023-06-05 20:33:24 +02:00
nginx.md f 2023-06-05 20:33:24 +02:00
nodejs-express.md f 2023-06-05 20:33:24 +02:00
put-method-webdav.md f 2023-06-05 20:33:24 +02:00
python.md f 2023-06-05 20:33:24 +02:00
README.md f 2023-06-05 20:33:24 +02:00
rocket-chat.md f 2023-06-05 20:33:24 +02:00
special-http-headers.md f 2023-06-05 20:33:24 +02:00
spring-actuators.md f 2023-06-05 20:33:24 +02:00
symphony.md f 2023-06-05 20:33:24 +02:00
tomcat.md f 2023-06-05 20:33:24 +02:00
uncovering-cloudflare.md f 2023-06-05 20:33:24 +02:00
vmware-esx-vcenter....md f 2023-06-05 20:33:24 +02:00
waf-bypass.md f 2023-06-05 20:33:24 +02:00
web-api-pentesting.md f 2023-06-05 20:33:24 +02:00
werkzeug.md f 2023-06-05 20:33:24 +02:00
wordpress.md f 2023-06-05 20:33:24 +02:00

80,443 - Metodología de Pentesting Web

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Consejo de bug bounty: regístrate en Intigriti, una plataforma premium de bug bounty creada por hackers, para hackers. ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy mismo y comienza a ganar recompensas de hasta $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Información Básica

El servicio web es el servicio más común y extenso y existen muchos tipos diferentes de vulnerabilidades.

Puerto predeterminado: 80 (HTTP), 443 (HTTPS)

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Guía de API web

{% content-ref url="web-api-pentesting.md" %} web-api-pentesting.md {% endcontent-ref %}

Resumen de la metodología

En esta metodología suponemos 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 descubierto con un servidor web indeterminado dentro del alcance.

  • Comienza por identificar las tecnologías utilizadas por el servidor web. Busca trucos para tener en cuenta durante el resto de la prueba si puedes identificar con éxito la tecnología.
    • ¿Hay alguna vulnerabilidad conocida de la versión de la tecnología?
    • ¿Usando alguna tecnología bien conocida? ¿Algún truco útil para extraer más información?
    • ¿Algún escáner especializado para ejecutar (como wpscan)?
  • Ejecuta escáneres de propósito general. Nunca se sabe si van a encontrar algo o si van a encontrar alguna información interesante.
  • Comienza con las comprobaciones iniciales: robots, sitemap, error 404 y escaneo SSL/TLS (si es HTTPS).
  • Comienza a rastrear la página web: es hora de encontrar todos los posibles archivos, carpetas y parámetros que se están utilizando. Además, busca hallazgos especiales.
    • Ten en cuenta que cada vez que se descubre un nuevo directorio durante la fuerza bruta o el rastreo, se debe rastrear.
  • Fuerza bruta de directorios: Intenta forzar la fuerza bruta de todas las carpetas descubiertas buscando nuevos archivos y directorios.
    • Ten en cuenta que cada vez que se descubre un nuevo directorio durante la fuerza bruta o el rastreo, se debe forzar la fuerza bruta.
  • Comprobación de copias de seguridad: Prueba si puedes encontrar copias de seguridad de los archivos descubiertos agregando extensiones de copia de seguridad comunes.
  • Fuerza bruta de parámetros: Intenta encontrar parámetros ocultos.
  • Una vez que hayas identificado todos los posibles puntos finales que aceptan entrada de usuario, comprueba todo tipo de vulnerabilidades relacionadas con ello.

Versión del servidor (¿Vulnerable?)

Identificar

Comprueba si hay vulnerabilidades conocidas para la versión del servidor que se está ejecutando.
Los encabezados HTTP y las cookies de la respuesta pueden ser muy útiles para identificar las tecnologías y/o versiones que se están utilizando. El escaneo Nmap puede identificar la versión del servidor, pero también pueden ser útiles las herramientas whatweb, webtech o https://builtwith.com/:

whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

Buscar vulnerabilidades de la versión de la aplicación web.

Comprobar si hay algún WAF

Trucos de tecnología web

Algunos trucos para encontrar vulnerabilidades en diferentes tecnologías 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 conocida o cualquier otra, no olvide buscar en Internet nuevos trucos (¡y hágamelo saber!).

Revisión del código fuente

Si el código fuente de la aplicación está disponible en github, además de realizar una prueba de caja blanca de la aplicación por su cuenta, hay alguna información que podría ser útil para la actual prueba de caja negra:

  • ¿Hay un archivo de registro de cambios o Readme o Versión o cualquier cosa 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 hashing se utiliza?
  • ¿Está utilizando alguna clave maestra para cifrar algo? ¿Qué algoritmo se utiliza?
  • ¿Puede acceder a alguno de estos archivos explotando alguna vulnerabilidad?
  • ¿Hay alguna información interesante en github (resuelta y no resuelta) issues? ¿O en historial de confirmaciones (tal vez alguna contraseña introducida dentro de una confirmación antigua)?

{% content-ref url="code-review-tools.md" %} code-review-tools.md {% endcontent-ref %}

Escáneres automáticos

Escáneres automáticos de propósito general

nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>

Escáneres de CMS

Si se utiliza un CMS, no olvides ejecutar un escáner, quizás encuentres algo interesante:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: sitios web de WordPress, Drupal, Joomla, vBulletin 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

cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

En este punto, ya deberías tener alguna información sobre el servidor web utilizado por 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.

Descubrimiento de aplicaciones web paso a paso

A partir de este punto, vamos a empezar a interactuar con la aplicación web.

Comprobaciones iniciales

Páginas predeterminadas con información interesante:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • También comprueba los comentarios en las páginas principales y secundarias.

Forzar 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)
  • Añade "[]", "]]", y "[[" en los valores de cookies y valores de parámetros para crear errores
  • Genera errores dando entrada como /~randomthing/%s al final de la URL
  • Prueba diferentes verbos HTTP como PATCH, DEBUG o incorrectos como FAKE

Comprueba si puedes subir archivos (verbo PUT, WebDav)

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. Es posible que tengas permisos para subir archivos en otras carpetas.

Vulnerabilidades SSL/TLS

  • Si la aplicación no obliga 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 vulnerabilidad alta.

Usa testssl.sh para comprobar vulnerabilidades (en programas de Bug Bounty, probablemente este tipo de vulnerabilidades no serán aceptadas) y usa a2sv para volver a comprobar las vulnerabilidades:

./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also

# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>

Información sobre vulnerabilidades SSL/TLS:

Spidering

Lanza algún tipo de spider dentro de la web. El objetivo del spider es encontrar tantas rutas como sea posible desde la aplicación probada. Por lo tanto, se deben utilizar el rastreo web y fuentes externas para encontrar tantas rutas válidas como sea posible.

  • gospider (go): spider HTML, LinkFinder en archivos JS y fuentes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): spider HTML, con LinkFider 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 tienes que indicar un archivo con hosts y un archivo con rutas y meg buscará cada ruta en cada host y guardará la respuesta.
  • urlgrab (go): spider HTML con capacidades de renderizado de JS. Sin embargo, parece que no se mantiene, la versión precompilada es antigua y el código actual no se 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 de JS.
  • LinkFinder (python): spider HTML, con capacidades de embellecimiento de 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 puntos finales tanto en la fuente HTML como en los archivos javascript incrustados. Útil para cazadores de errores, equipos rojos, ninjas de la seguridad de la información.
  • 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 se mantiene.
  • relative-url-extractor (ruby): Dado un archivo (HTML), extraerá URLs de él utilizando una astuta expresión regular para encontrar y extraer las URLs relativas de archivos feos (minify).
  • 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 URL 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, dada la URL .js.map, te proporcionará el código JS beatificado.
  • xnLinkFinder: Esta es una herramienta utilizada para descubrir puntos finales 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 rellenando formularios) y también encuentra información sensible utilizando expresiones regulares específicas.
  • SpiderSuite: Spider Suite es un avanzado Crawler/Spider de seguridad web GUI multi-característica diseñado para profesionales de la seguridad cibernética.

Fuerza bruta de directorios y archivos

Comienza la fuerza bruta desde la carpeta raíz y asegúrate de hacer la fuerza bruta de todos los directorios encontrados utilizando este método y todos los directorios descubiertos por el Spidering (puedes hacer esta fuerza bruta de forma recursiva y añadir al principio de la lista de palabras utilizadas 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, admite 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): Esto no es un spider sino una herramienta que, dada la lista de URLs encontradas, eliminará las URLs "duplicadas".
  • Scavenger: Extensión de Burp para crear una lista de directorios del historial de burp de diferentes páginas.
  • TrashCompactor: Elimina URLs con funcionalidades duplicadas (basado en importaciones de js).
  • Chamaleon: Utiliza wapalyzer para detectar las tecnologías utilizadas y seleccionar las listas de palabras a utilizar.

Diccionarios recomendados:

Qué verificar en cada archivo encontrado

  • Comprobador de enlaces rotos: Encuentra enlaces rotos dentro de HTML que pueden ser propensos a ser tomados.
  • Copias de seguridad de archivos: Una vez que haya encontrado todos los archivos, busque copias de seguridad de todos los archivos ejecutables (".php", ".aspx"...). Las 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 puede utilizar la herramienta bfac.
  • Descubrir nuevos parámetros: Puede utilizar herramientas como Arjun, parameth, x8 y Param Miner para descubrir parámetros ocultos. Si puede, podría intentar buscar parámetros ocultos en cada archivo web ejecutable.
  • Comentarios: Verifique los comentarios de todos los archivos, puede encontrar credenciales o funcionalidades ocultas.
    • Si está jugando CTF, un truco "común" es ocultar información dentro de comentarios en el lado derecho de la página (usando cientos de espacios para que no vea los datos si abre el código fuente con el navegador). Otra posibilidad es usar varias líneas nuevas y ocultar información en un comentario en la parte inferior de la página web.
  • Claves de API: Si encuentra alguna clave de API hay una guía que indica cómo utilizar las claves de API de diferentes plataformas: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
    • Claves de API de Google: Si encuentra alguna clave de API que se parezca a AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, puede utilizar el proyecto gmapapiscanner para comprobar a qué APIs puede acceder la clave.
  • Buckets de S3: Mientras se realiza el spidering, busque si algún subdominio o algún enlace está relacionado con algún bucket de S3. En ese caso, verifique los permisos del bucket.

Hallazgos especiales

Mientras se realiza el spidering y la fuerza bruta, se pueden encontrar cosas interesantes que se deben notar.

Archivos interesantes

  • Busque enlaces a otros archivos dentro de los archivos CSS.
  • Si encuentra un archivo .git se puede extraer información
  • Si encuentra un archivo .env se puede encontrar información como claves de API, contraseñas de bases de datos y otra información.
  • Si encuentra puntos finales de API, también debería probarlos. Estos no son archivos, pero probablemente "se parecerán" a ellos.
  • Archivos JS: En la sección de spidering se mencionaron varias herramientas que pueden extraer la ruta de los archivos JS. También sería interesante monitorizar cada archivo JS encontrado, ya que en algunas ocasiones, un cambio puede indicar que se introdujo una posible vulnerabilidad en el código. Puede utilizar, por ejemplo, JSMon.
  • También podría monitorizar 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 vulnerable potencial.

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

{% content-ref url="403-and-401-bypasses.md" %} 403-and-401-bypasses.md {% endcontent-ref %}

502 Proxy Error

Si alguna página responde con ese código, probablemente sea un proxy mal configurado. Si envía una solicitud HTTP como: GET https://google.com HTTP/1.1 (con el encabezado del host y otros encabezados comunes), el proxy intentará acceder a google.com y habrá encontrado un SSRF.

Autenticación NTLM - Divulgación de información

Si el servidor en ejecución que solicita la autenticación es Windows o encuentra un inicio de sesión que solicita sus credenciales (y que solicita el nombre de dominio), puede provocar una divulgación de información.
Envíe 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".
Puede automatizar esto utilizando el plugin de

Monitorizar páginas para cambios

Puedes utilizar herramientas como https://github.com/dgtlmoon/changedetection.io para monitorizar páginas en busca de modificaciones que puedan introducir vulnerabilidades.

Comandos Automáticos de HackTricks

Protocol_Name: Web    #Protocol Abbreviation if there is one.
Port_Number:  80,443     #Comma separated if there is more than one.
Protocol_Description: Web         #Protocol Abbreviation Spelled out

Entry_1:
  Name: Notes
  Description: Notes for Web
  Note: |
    https://book.hacktricks.xyz/pentesting/pentesting-web

Entry_2:
  Name: Quick Web Scan
  Description: Nikto and GoBuster
  Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_3:
  Name: Nikto
  Description: Basic Site Info via Nikto
  Command: nikto -host {Web_Proto}://{IP}:{Web_Port}

Entry_4:
  Name: WhatWeb
  Description: General purpose auto scanner
  Command: whatweb -a 4 {IP}

Entry_5:
  Name: Directory Brute Force Non-Recursive
  Description:  Non-Recursive Directory Brute Force
  Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_6:
  Name: Directory Brute Force Recursive
  Description: Recursive Directory Brute Force
  Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10

Entry_7:
  Name: Directory Brute Force CGI
  Description: Common Gateway Interface Brute Force
  Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200

Entry_8:
  Name: Nmap Web Vuln Scan
  Description: Tailored Nmap Scan for web Vulnerabilities
  Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}

Entry_9:
  Name: Drupal
  Description: Drupal Enumeration Notes
  Note: |
    git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration

Entry_10:
  Name: WordPress
  Description: WordPress Enumeration with WPScan
  Command: |
    ?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
    wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e

Entry_11:
  Name: WordPress Hydra Brute Force
  Description: Need User (admin is default)
  Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'

Entry_12:
  Name: Ffuf Vhost
  Description: Simple Scan with Ffuf for discovering additional vhosts
  Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}


Consejo de recompensa por errores: ¡regístrese en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers! ¡Únase a nosotros en https://go.intigriti.com/hacktricks hoy mismo y comience a ganar recompensas de hasta $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥