HTB Ransom
Esta es una máquina de nivel medio, el tema principal es acerca de Weak Cryptography
Table of contents
Reconocimiento
primero debemos comprobar si tenemos conexión con nuestro objetivo, el cual es 10.10.11.153
.
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,80
.
Como podemos observar tenemos un servicio apache en el cual parece haber un panel de Administración o algo similar, para obtener más detalles podemos usar whatweb
o wappalyzer
desde la web.
Observando ambos podemos ver que es Apache y un Laravel. Ahora si vamos a la web lo que nos muestra es una página que nos pide ingresar un password.
En la página ingresamos algunos passwords comunes, pero ninguno es válido, probamos con algunas inyecciones SQL, pero tampoco es vulnerable a ello, así que procedemos a revisar el código para obtener alguna idea o usar algún password o información que pueden haber dejado comentado, pero no hay nada llamativo.
Interceptando por medio de Burp Suite con el envío de un password podemos observar el archivo JS en el cual se realiza la validación del formulario.
Ahora al enviar la petición al repeater y cambiar el tipo de petición (en este caso GET por un POST) y al enviar la petición podemos observar que nos indica un error 405, así también en la respuesta indica que soporta GET, HEAD.
Reemplazando directamente el POST por un GET y luego enviando, podemos ver que tenemos un cambio notable de respuesta, en la respuesta nos indica que el campo de password es obligatorio, en el Content-Type usa un formato JSON con el cual podemos darnos una idea de que realizar.
Reemplazamos el Content-Type y el formato de envío del password, lo que nos da un mejor resultado.
Reemplazamos el test por ahora como true, para que lo tome como booleano, luego de ello podemos ver que nuestra petición es válida y ya estamos dentro.
Luego de ingresar enviamos la petición a la web y podemos observar dos archivos, el archivo user.txt es el flag de usuario.
Ahora, descargamos el otro archivo, tratamos de descomprimir, pero cuenta con un password y como se puede observar nos lista los archivos que contiene, así también volvemos a realizar un listado y podemos ver con mayor claridad que hay una carpeta .ssh y dentro de este un id_rsa que nos puede servir para conectarnos hacia alguna dirección, pero primero debemos extraer esos archivos.
Tratamos de romperlo usando John, pero no se puede debido a que no está en Rockyou.
Probamos Zipinfo, pero no llegamos a obtener respuestas adicionales.
Explotación
Buscando sobre alternativas a ZIP se tiene 7z con el cual podemos extraer en mucho más detalle, sería 7z l -slt con el cual podemos extraer información más detallada, luego de ejecutar el comando podemos observar algo que se repite, el método que es 'ZipCrypto Deflate'.
Realizando la búsqueda por el nombre podemos encontrar varios sitios, entre ellos un GitHub.
Entramos al GitHub y descargamos de releases
https://github.com/kimci86/bkcrack/releases
Seguimos como indica su guía.
Así también nos podemos apoyar de lo siguiente donde se explica de manera abierta el funcionamiento del programa de una manera más detallada, https://medium.com/@whickey000/how-i-cracked-conti-ransomware-groups-leaked-source-code-zip-file-e15d54663a8.
Para extraer el archivo primero copiamos nuestro .bash_logout, ya que es un archivo que tenemos y tendríamos una sección de código que coincida con la búsqueda como en el ejemplo que indica.
Para usar Bkcrack debemos meter en un ZIP nuestro .bash_logout
cuando termine procedemos a ejecutar y luego de unos minutos obtendremos 3 keys que nos servirán para volver a ejecutar el Bkcrack para reemplazar el password y extraer los archivos.
Luego de ello extraemos el archivo, y ya podremos conectarnos por ssh usando el id_rsa.
Para saber donde conectarnos podemos ver el id_rsa.pub donde observamos el htb@ransom
.
Nos conectamos por ssh y listamos, podemos ver que ahí también está el flag que encontramos cuando iniciamos sesión.
Para la escalada de privilegios primero tratamos de conectarnos como sudo, pero no tenemos el password del usuario htb, tampoco podemos ver qué permisos tenemos, si hacemos sudo -l
ocurre lo mismo.
Listamos nuestros permisos SUID, podemos ver un pkexec, pero no es la ruta deseada.
Revisando los puertos que tenemos abiertos son el 80 y 22, los mismos que encontramos.
Recordemos que al comienzo pudimos identificar que se trataba de un apache y que se trataba de un framework Laravel, así que buscaremos en Apache2 dentro del default.conf podemos ver que hace referencia a /srv/prod/.
Nos dirigimos a /srv/prod/ y podemos ver diversos archivos, pero el que nos llama la atención revisando el composer podemos comprobar que en efecto es un Laravel, pero aparte de ello no encontramos nada relevante.
Buscando archivos e información probamos con password, por si encontramos algún archivo o información que tenga esa palabra, podemos ver que hay varios, pero hay uno que llama nuestra atención, es el que está en app/HTTP/controllers/authController.php debido a que es el mismo mensaje que nos retornaba cuando el password era incorrecto.
Nos dirigimos a esa ubicación y revisando el archivo podemos observar un password
como muchas veces se reutilizan passwords probamos con ella y podemos ver que somos root de esta manera podemos extraer el flag para comprobar que somos root.