Índice

Hack The Box-Cap

Dificultad: Fácil

  • LFI (Local File Inclusion) – File Bypass
  • Restricted Shell Bypass
  • Abusing Capabilities (cap_dac_read_seach+ei) [Privilege Escalation]

Fase de Reconocimiento:

En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos:

				
					sudo mkdir Cap

				
			

Ahora, mediante la función mkt que tengo previamente definida en la .zhshrc crearemos nuestros directorios de trabajo:

				
					sudo mkt


				
			

Esta función está definida para crearnos cuatro directorios (nmapcontentexploits y scripts) desde los cuales poder trabajar a la hora de realizar las máquinas de HTB.

PING

Ejecutamos un ping y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux.

				
					ping -c 1 10.10.10.245


				
			

Verificamos mediante la herramienta WishSystem que nos encontramos frente a un sistema Linux.

WhatWeb

Ahora vamos a ver mediante whatweb que más podemos ver:
				
					whatweb 10.10.10.245


				
			

Vemos que no nos reporta nada interesante, así que vamos a proceder mediante Nmap a tratar de reportar todos los puertos abiertos.

Nmap

Ahora mediante nmap realizaremos un escaneo de puertos:
				
					nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.245 -oG allPorts


				
			
  • -p- : Escanea todo el rango de puertos.
  • --open : Solo nos mostrará puertos con el estatus abierto.
  • -sS : El escaneo SYN actuar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos.
  • --min-rate : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más.
  • -vvv : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se ejecuta el escaneo.
  • -n : Anula la resolución DNS.

Vemos como los puertos 21,22 y 80 están abiertos y que en los tres corren servicios interesantes, vamos a tratar de realizar mediante una serie de scripts básicos de reconocimiento un segundo escaneo enfocándonos en los puertos que hemos encontrado abiertos:

				
					nmap -sC -sV -p21,22,80 -oN targed  


				
			
  • -sC : Lanza scripts básicos de reconocimiento.
  • -sV : Localiza la versión y servicio de los puertos definidos.
  • -p : Puertos a escanear.
  • -oN : Reporta los resultados en formato nmap al archivo target.

Vemos que por el puerto 80 corre un servicio http con la versión gunicorn. Vamos a tratar de acceder al dominio http://10.10.10.245 utilizando el navegador, en mi caso Firefox.

Vemos como el dominio nos lleva hasta un panel de gráficos de un usuario llamado Nathan. Tras investigar la página, vemos como arriba a la izquierda tenemos un menú desplegable y me llama especialmente la atención el apartado Security Snapshot (5 Second PCAP + Analysis).

Nos muestra una página que parece contener archivos guardados y donde también tenemos un botón de Download. Algo que es interesante es ver como nos indica el directorio actual mediante el número 3.

Tras probar otros números, veo que existen varias páginas de ficheros empezando desde el 0 que parece ser la página que más archivos tiene guardados. Vamos a pulsar Donwload y descargarnos el archivo para ver que se trata.

Vamos a llevar el archivo al directorio content donde vamos a realizar primeramente un cat para ver que se trata y vemos que el archivo contiene un binario.

TShark

Para poder ver el binario vamos a utilizar la herramienta tshark. En caso de no tenerla podéis descargarla utilizando el siguiente comando:

				
					sudo apt install tshark
  


				
			

Una vez instalado vamos a tratar de leer el archivo:

				
					tshark -r 0.pcap 2>/dev/null
  


				
			

Tras revisar el contenido vemos que por el centro del archivo se encuentran las credenciales de un usuario. Nos muestra un user nathan y una PASS Buck3tH4TF0RM3!.

Mediante los siguientes parámetros podríamos filtrar el archivo para solo reportar la información interesante.

				
					tshark -r 0.pcap -Y "ftp" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r
  


				
			

FTP Shell:

Visto esto, vamos a tratar de conectarnos mediante ftp con las credenciales que hemos encontrado.

				
					ftp 10.10.10.245
  


				
			

Perfecto vemos como nos permite conectarnos como el usuario nathan. Lo primero que debemos hacer es activar el modo pasivo para no tener problemas con los comandos.

				
					passive  


				
			

Ahora ejecutando un ls vemos como ahí se encuentra el archivo user.txt con la primera flag.

Al tratar de visualizar el archivo con cat vemos como no nos lo permite.

Al revisar mediante la variable help las opciones que podemos utilizar:

Vemos que está disponible el comando get, así que vamos a tratar de descargarnos el archivo hasta nuestro repositorio.

Abrimos una terminal nueva y nos dirigimos a nuestro directorio content, si hemos ejecutado anteriormente la shell ftp desde aquí, vemos como se nos abra descargado en este directorio el archivo user.txt.

Shell SSH

Ahora, para tratar de conseguir la flag del root, como la shell por ftp nos ha estado dando problemas con algunos comandos, vamos a tratar de establecer conexión mediante el servicio ssh y utilizando las mismas credenciales:

				
					ssh nathan@10.10.10.245


				
			

Primero vamos a tratar de ver si tenemos algún tipo de privilegios:

Vemos que nos pide un password y por desgracia no nos sirve la misma que hemos utilizado anteriormente.

GetCap

Ahora, para tratar de enumerar archivos de interés usaremos getcap que muestra el nombre y las capacidades de cada archivo especificado. En el caso de no disponer de getcap podemos descargarlo de la siguiente manera:

				
					getcap -r / 2>/dev/null


				
			

Vemos como se nos reporta un archivo llamado cap_setuid y que está siendo ejecutado en Python3.8.

Tras buscar información sobre vulnerabilidades bandas en Python3.8 y he encontrado los siguientes comandos que nos permite crear una shell en bash registrándonos automáticamente como root. Para ello vamos a introducir los siguientes comandos:

				
					import os


				
			
				
					os.setuid(0)


				
			
				
					os.system("bash")


				
			

Vemos como ha funcionado y ya tenemos nuestra shell en bash y si ejecutamos el comando whoami podemos ver como estamos registrados como root. Finalmente, podemos encontrar la flag del archivo root dentro del directorio /root/root.txt.