From 696decd894778bd9ce8db5b30bb646a8eb787098 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Wed, 21 Feb 2024 01:18:22 +0100 Subject: [PATCH] wip --- .../squid_proxy_port_discovery.py | 58 +++++++++++++++ .../tema_6_owasp/README6.md | 72 ++++++++++++++++++- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 Introduccion-hacking-hack4u/tema_6_owasp/24_squid_proxy_port_discovery/squid_proxy_port_discovery.py diff --git a/Introduccion-hacking-hack4u/tema_6_owasp/24_squid_proxy_port_discovery/squid_proxy_port_discovery.py b/Introduccion-hacking-hack4u/tema_6_owasp/24_squid_proxy_port_discovery/squid_proxy_port_discovery.py new file mode 100644 index 0000000..2085061 --- /dev/null +++ b/Introduccion-hacking-hack4u/tema_6_owasp/24_squid_proxy_port_discovery/squid_proxy_port_discovery.py @@ -0,0 +1,58 @@ +# /var/bin/env python3 +""" +Script para descubrir puertos abiertos en un servidor web +a través de un proxy Squid. +""" + + +import requests +import signal +import sys + + +def signal_handler(sig, frame): + print('You pressed Ctrl+C!') + sys.exit(0) + + +# Ctrl+C handler +signal.signal(signal.SIGINT, signal_handler) + +MAIN_URL = "http://127.0.0.1" +squid_proxy = {'http': 'http://192.168.1.150:3128'} + + +def port_discovery(): + + # Puertos TCP más comunes + puertos_comunes = {21, 22, 23, 25, 53, 80, 110, 111, 135, 139, 143, 443, + 445, 993, 995, 1723, 3306, 3389, 5900, 8080, 8443, + 8888, 9100, 1433, 1521, 2049, 3128, 389, 636, 873, + 1080, 1434, 1521, 1604, 1720, 1863, 2048, 4000, + 5800, 5900, 6000, 6660, 6661, 6662, 6663, 6664, + 6665, 6666, 6667, 6668, 6669} + + for tcp_port in puertos_comunes: + + try: + + r = requests.get( + main_url + ':' + str(tcp_port), + proxies=squid_proxy, timeout=1 + ) + + print(r.status_code) + + except requests.exceptions.RequestException as e: + + print("Error: " + str(e)) + continue + + if r.status_code != 503: + + print("\n[+] Puerto abierto: " + str(tcp_port)) + + +if __name__ == "__main__": + + port_discovery() diff --git a/Introduccion-hacking-hack4u/tema_6_owasp/README6.md b/Introduccion-hacking-hack4u/tema_6_owasp/README6.md index 5497aa0..5a0ccb5 100644 --- a/Introduccion-hacking-hack4u/tema_6_owasp/README6.md +++ b/Introduccion-hacking-hack4u/tema_6_owasp/README6.md @@ -1,6 +1,5 @@ # README6.md - Índice de subtermas: - [README6.md](#README6.md) @@ -14,18 +13,89 @@ ## 6.21 Ataques de asignación masiva (Mass Assignment Attack)/Parameter Binding +El ataque de asignación masiva (Mass Assignment Attack) se basa en la manipulación de parámetros de entrada de una solicitud HTTP para crear o modificar campos en un objeto de modelo de datos en la aplicación web. En lugar de agregar nuevos parámetros, los atacantes intentan explotar la funcionalidad de los parámetros existentes para modificar campos que no deberían ser accesibles para el usuario. + +Por ejemplo, en una aplicación web de gestión de usuarios, un formulario de registro puede tener campos para el nombre de usuario, correo electrónico y contraseña. Sin embargo, si la aplicación utiliza una biblioteca o marco que permite la asignación masiva de parámetros, el atacante podría manipular la solicitud HTTP para agregar un parámetro adicional, como el nivel de privilegio del usuario. De esta manera, el atacante podría registrarse como un usuario con privilegios elevados, simplemente agregando un parámetro adicional a la solicitud HTTP. + +A continuación, se os proporciona el enlace directo al proyecto Juice Shop en Docker Hub, el cual nos permitirá desplegar un laboratorio vulnerable donde poder practicar esta vulnerabilidad: + +- Juice Shop: https://hub.docker.com/r/bkimminich/juice-shop + ## 6.22 Open Redirect +La vulnerabilidad de redirección abierta, también conocida como Open Redirect, es una vulnerabilidad común en aplicaciones web que puede ser explotada por los atacantes para dirigir a los usuarios a sitios web maliciosos. Esta vulnerabilidad se produce cuando una aplicación web permite a los atacantes manipular la URL de una página de redireccionamiento para redirigir al usuario a un sitio web malicioso. + +Por ejemplo, supongamos que una aplicación web utiliza un parámetro de redireccionamiento en una URL para dirigir al usuario a una página externa después de que se haya autenticado. Si esta URL no valida adecuadamente el parámetro de redireccionamiento y permite a los atacantes modificarlo, los atacantes pueden dirigir al usuario a un sitio web malicioso, en lugar del sitio web legítimo. + +Un ejemplo de cómo los atacantes pueden explotar la vulnerabilidad de redirección abierta es mediante la creación de correos electrónicos de phishing que parecen legítimos, pero que en realidad contienen enlaces manipulados que redirigen a los usuarios a un sitio web malicioso. Los atacantes pueden utilizar técnicas de ingeniería social para convencer al usuario de que haga clic en el enlace, como ofrecer una oferta atractiva o una oportunidad única. + +Para prevenir la vulnerabilidad de redirección abierta, es importante que los desarrolladores implementen medidas de seguridad adecuadas en su código, como la validación de las URL de redireccionamiento y la limitación de las opciones de redireccionamiento a sitios web legítimos. Los desarrolladores también pueden utilizar técnicas de codificación segura para evitar la manipulación de URL, como la codificación de caracteres especiales y la eliminación de caracteres no válidos. + +A continuación, se proporcionan los enlaces a los 3 proyectos de Github que estaremos desplegando en esta clase para practicar esta vulnerabilidad en un entorno controlado, viendo diferentes casos e incluso técnicas para evadir posibles restricciones: + +- Open Redirect 1: https://github.com/blabla1337/skf-labs/tree/master/nodeJs/Url-redirection +- Open Redirect 2: https://github.com/blabla1337/skf-labs/tree/master/nodeJs/Url-redirection-harder +- Open Redirect 3: https://github.com/blabla1337/skf-labs/tree/master/nodeJs/Url-redirection-harder2 ## 6.23 Enumeración y explotación de WebDAV +WebDAV (Web Distributed Authoring and Versioning) es una extensión del protocolo HTTP que permite a los usuarios acceder y manipular archivos en un servidor web a través de una conexión segura. + +Cuando hablamos de enumerar un servidor WebDAV, a lo que nos referimos es al proceso de recopilar información sobre los recursos disponibles en el servidor WebDAV. Los atacantes pueden utilizar herramientas de enumeración de WebDAV para buscar recursos protegidos en el servidor, como archivos de configuración, contraseñas y otros datos confidenciales. Los atacantes pueden utilizar la información recopilada durante la enumeración para planificar ataques más sofisticados contra el servidor. + +Asimismo, esta fase inicial de reconocimiento implica el intentar identificar las extensiones de archivo permitidas en el servidor. Una vez detectadas las extensiones de archivo permitidas, los atacantes pueden aprovecharse de esto para cargar y ejecutar archivos que contengan código malicioso. Si los archivos maliciosos se cargan y ejecutan con éxito en el servidor web, los atacantes pueden obtener acceso no autorizado al servidor y comprometer la seguridad del sistema. + +Una de las herramientas que vemos en esta clase es Davtest. La herramienta Davtest es una herramienta de línea de comandos que se utiliza para realizar pruebas de penetración en servidores WebDAV. Davtest puede utilizarse para enumerar recursos protegidos en un servidor WebDAV, así como para probar la configuración de seguridad del servidor. Davtest también puede utilizarse para probar la autenticación y la autorización del servidor, y para detectar vulnerabilidades conocidas. + +Otra de las herramientas que vemos en esta clase es Cadaver. Cadaver es otra herramienta de línea de comandos que se utiliza para interactuar con servidores WebDAV. Cadaver permite a los usuarios navegar por los recursos del servidor, cargar y descargar archivos, y ejecutar comandos en el servidor. Cadaver también puede utilizarse para realizar pruebas de penetración en servidores WebDAV, como la enumeración de recursos protegidos y la explotación de vulnerabilidades conocidas. + +Para prevenir la enumeración y explotación de WebDAV, es importante que los administradores de sistemas implementen medidas de seguridad adecuadas en el servidor. Esto puede incluir la limitación de los recursos disponibles en el servidor y la utilización de autenticación y autorización fuertes. Además, es importante que los usuarios protejan sus contraseñas y eviten el uso de contraseñas débiles o fáciles de adivinar. + +A continuación, se proporciona el enlace al proyecto de Github el cual estaremos usando en esta clase para desplegar un entorno vulnerable con el que poder practicar: + +- WebDav: https://hub.docker.com/r/bytemark/webdav + ## 6.24 Enumeración y explotación de SQUID Proxies +El Squid Proxy es un servidor web proxy-caché con licencia GPL cuyo objetivo es funcionar como proxy de la red y también como zona caché para almacenar páginas web, entre otros. Se trata de un servidor situado entre la máquina del usuario y otra red (a menudo Internet) que actúa como protección separando las dos redes y como zona caché para acelerar el acceso a páginas web o poder restringir el acceso a contenidos. + +Es decir, la función de un servidor proxy es centralizar el tráfico de una red local hacia el exterior (Internet). Sólo el equipo que incorpora el servicio proxy debe disponer de conexión a Internet y el resto de equipos salen a través de él: + +![](https://i.pinimg.com/originals/bc/00/44/bc00441e742e09add00989be3441245e.png) + +Ahora bien, puede darse el caso en el que un servidor Squid Proxy se encuentre mal configurado, permitiendo en consecuencia a los atacantes recopilar información de dispositivos a los que normalmente no deberían tener acceso. + +Por ejemplo, en este tipo de situaciones, un atacante podría ser capaz de realizar peticiones a direcciones IP internas pasando sus consultas a través del Squid Proxy, pudiendo así realizar un escaneo de puertos contra determinados servidores situados en una red interna. + +Para ello, simplemente podríamos probar a hacer uso de extensiones de navegador como FoxyProxy o desde consola haciendo uso del comando ‘curl‘: + +``` +curl --proxy http://10.10.11.131:3128 http://: +``` + +En el mejor de los casos, si la conexión no requiere de autenticación, podríamos llevar a cabo una enumeración de puertos en servidores internos concretos, siendo necesario sustituir por el puerto deseado que se desea enumerar del servidor correspondiente. En caso de requerir autenticación, si el atacante dispone de las credenciales, estas podrían ser especificadas haciendo uso del parámetro ‘-u‘. + +Todo esto es posible debido a que el proxy actúa como intermediario entre la red local y la externa, lo que en parte permite el acceso a ciertos recursos internos que normalmente no estarían disponibles desde el exterior. + +Sin embargo, es importante tener en cuenta que el acceso a estos recursos a través del proxy puede estar restringido por políticas de seguridad, autenticación u otros mecanismos de control de acceso. Además, si el proxy está configurado correctamente, es probable que no permita el acceso a recursos internos desde el exterior, incluso si se está pasando a través de él. + +Una de las herramientas que se suelen emplear para enumerar puertos de un servidor concreto pasando por el Squid Proxy es spose. + +Spose es una herramienta de escaneo de puertos diseñada específicamente para trabajar a través de servidores Squid Proxy. Esta herramienta permite a los atacantes buscar posibles servicios y puertos abiertos en una red interna “protegida” por un servidor Squid Proxy. + +A continuación, se proporciona el enlace directo a esta herramienta: + +- Herramienta Spose: https://github.com/aancw/spose + +Por otro lado, os compartimos también el enlace de descarga de la máquina SickOs de Vulnhub: + +- Máquina SickOs 1.1: https://www.vulnhub.com/entry/sickos-11,132/ + ---