PwnLab: init

Buenas a todos, en esta entrada se realiza un CTF de Vulnhub

En la primera fase de reconocimiento en una misma LAN, identificamos el sistema objetivo con Nmap usando el parámetro -sn:

1

Una vez obtenemos la dirección IP, realizamos un escaneo al objetivo usando el parámetro -A permitiendo la detección de OS, la versión, script scanning, y traceroute. Con -T4 indica el tiempo de envió de los paquetes, es decir desde 0-6, la más baja es la más lenta, y también mejor ya que podría evadir algunos firewall.

2

Vemos servicios interesantes como MySQL y Apache, por el puerto 3306 y 80 respectivamente. Ejecutamos nikto para analizar las vulnerabilidades del servicio web devolviendo información sobre un sitio basado en PHP, fichero config.php con posibles id’s y passwords, y un login disponible para la subida de imágenes.

4

Ingresamos en el navegador.

5

Observando en la url, podemos deducir que pueda ser vulnerable a un LFI. Haciendo una búsqueda en Google, vemos una página web donde explica como usar php://filter para un local file inclusion.

Abrimos burpsuite para el análisis de seguridad de aplicaciones web, y así usar un proxy para ver las peticiones que se realizan cuando interactuamos con el servidor web. Una vez configurado el proxy del burpsuite y del navegador, interceptamos las peticiones.

7

8

Usamos este filtro para probar el ejemplo de la página web mencionada, pasandole como resource el login.

9

10

Copiamos el comando correspondiente para realizar la petición con curl, obteniendo el base64.

11

Decodeamos el base64, y vemos un código fuente del login.php para poder logearse como usuario y usando una password (codificada en base64), a la base de datos MySQL. Vemos que existe un fichero config.php de igual modo que nos mostró el análisis de vulnerabilidades nikto.

12

Realizamos la misma operación, sin embargo usaremos el repeater y el decoder para hacerlo más automatizado.

13

14

Observamos en el fichero config.php que podemos tener acceso a la base de datos MySQL. Nos conectamos vía cliente de MySQL y realizamos una consulta obteniendo tres passwords codificadas en base64.

15

16

Decodificamos las password con el comando base64.

17

Nos logeamos y vemos que nos permite subir un fichero. Podemos usar los números mágicos correspondiente a gif y camuflar la shell en php creada con msfvenom. Dejamos el multi/handler a la escucha por el puerto especificado, a la espera de la conexión resultante.

19

20

En el código fuente podemos identificar donde ha almacenado la shell.

22

Realizamos el mismo procedimiento aprovechando la vulnerabilidad LFI, en este caso como resource el index. El resultado es un base64 igual que en los casos anteriores.

24

25

Vemos que el parámetro lang esta concatenado a una cookie. Mediante ella podremos realizar un LFI para poder ejecutar nuestra conexión inversa al servidor creado, por el puerto indicado anteriormente. Para ello modificaremos la cookie con Intruder de una de las peticiones interceptadas, y posteriormente con Repeater realizamos la petición y obtendriamos nuestra sesión meterpreter.

26

27

28

Importamos un pseudoterminal con python para conseguir una shell tty y nos logeamos con uno de los usuarios de la base de datos MySQL.

29

Vemos que existe un fichero msgmike con SUID y al ejecutarlo nos devuelve la salida de la ejecución de cat con un error, puede ser debido al path absoluto que no esta completo.

30

El fichero cuando se ejecuta, intenta hacer cat a una ruta errónea.

31

Exportamos PATH a ‘.’ y  me dejará correr mi propio binario de cat  con ‘/ bin / sh’ . Le damos permisos en valor octal.

32

33

Al ejecutarlo, nos convertimos en mike gracias al bit SUID. Dentro de su carpeta home identificamos otro fichero, dónde deducimos que podemos realizar una escalada de privilegios a root.

34

Realizamos un file, y vemos otro binario con SUID. Si hacemos strings vemos que el binario hace una llamada al sistema «/bin/echo %s >> /root/messages.txt» donde %s es el mensaje. Hacemos «;» para interrumpir la ejecución del echo, y realizamos una segunda orden. Del mismo modo que podemos hacer un «id» o «whoami», podemos hacer «/bin/sh» y realizar la escala de privilegios con euid=0(root). Effective User ID.

36

37

En el directorio de root, visualizamos la flag.

38

Un saludo, Naivenom

Un comentario en «PwnLab: init»

  1. No entiendo porque despues de subir la shell tienes que usar burpsiute otra vez, ¿no se podria hacer una llamada con curl al enlace?

Los comentarios están cerrados.