Hack The Box Stocker Writeup
Última actualización
Última actualización
Stocker comienza con una inyección NoSQL que me permite omitir el inicio de sesión en el sitio web del desarrollador. A partir de ahí, aprovechas la generación de órdenes de compra a través de secuencias de comandos entre sitios del servidor en la generación de PDF que me permite leer archivos del host. Obtienes la fuente de la aplicación y usas la contraseña que contiene para obtener un caparazón en la caja. El usuario puede ejecutar algunos scripts de NodeJS como root, pero la regla de sudo es una configuración incorrecta que me permite ejecutar JavaScript de arbitraje y obtener un shell como root.
Primeramente lanzamos una Nmap para observar puertos abiertos, usando los parametros
Como punto numero uno, lanzamos Nmap para ver que version y que servicios corren para dichos puertos. Observamos que en el puerto 80 nos dice Dit not follow redirect. Se esta haciendo un host discovery pero nos facilitan el dominio.
Ahora como punto numero dos insertamos el dominio al /etc/host de nuestra maquina para asi sepa donde apuntar.
Como punto numero tres le hacemos un cat al /etc/host y observamos que ya lo tenemos hecho.
Ahora usando Wfuzz enumeramos subdominios y encontramoes /dev/ el cual nuevamente añadimos al /etc/host.
Para añadir el subdominio encontrado al /etc/host.
dev.stocker.htb
redirige a /login
lo que devuelve una página de inicio de sesión.
Intentamos de todo aca inyecciones SQL y nada, asi que vamos a pasar la peticion por BurpSuite, para observar como se tramita.
Ahora con la peticion la enviamos al Repeater y tratamosde hacer un ByPass haciendo uso de Inyecciones NoSQL. Modificando el Input del usuario y el Content type.
Si enviamos la peticion observamos que se envia correctamente, observamos que en la respuesta nos lanza un codigo de estado 302, el cual de de un redirect, y mas abajo en la respuesta observamos que nos esta haciendo un redirect ah /stock.
Si dejamos que la peticion fluya y nos vamos web observamos que nos redirige al directorio /stock.
Usando wappalyzer descubrí que el sitio web está basado en Node.js y Express
Vamos a interceptar esta otra peticion, porque, porque quiero, son bromas.
La mayoria de tiendas donde se ofrecen productos usan APIs para diversos tipos de tareas, asi que aca seguramente haya una de procesamiento de pagos o pedidos etc etc.
Probé diferentes tipos de ataques de inyecciónes y observé que era vulnerable a la inyección de HTML. La <iframe>
etiqueta html se puede usar para leer archivos arbitrarios.
Lo probamos poniendo RODGAR en las etiquetas haber si imprime.
Si copiamos el orderid y lo cargamos en el navegador bajo la ruta http://dev.stocker.htb/api/po/orderid. Observamos que lo interpreta.
Ahora que ya sabemos que interpreta empezamos con las tipicas.
Usando la siguiente carga útil y puedo ver el/etc/passwd.
Hacemos lo mismo de arriba copiamos el orderid y lo pegamos en el navegador, observamos que se imprime, tambien podemos observar un usuario.
Ahora mandaremos esto para ver el contenido de index.js
Y aquí encontramos un password y anteriormente teniamos un usuario, usaremos esto que tenemos a mano para intentar hacer un login por ssh, recuerde que este puerto esta abierto.
Nos logramos logguear por ssh, si hacemos un whoami observamos que somo el usuario con el cual nos logramos logguear.
En el directorio de trabajo de angoose observamos que tenemos la flag de user.txt, con esto tendriamos la primera flag ya que siempre son dos esta y root.txt.
Si hacemos sudo -l, y vemos que si ejecutamos un archivo del tipo “.js”, podremos tener acceso root de forma inmediata.
Y vemos que puede ejecutar cualquier script siempre que se encuentre en la ruta correcta, así que generamos un fichero exploit.js como el siguiente
Y ejecutamos, consiguiendo convertirnos en root
Ahora ya podemos observar la flag de root.