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 (nmap
, content
, exploits
y scripts
) desde los cuales poder trabajar a la hora de
realizar las máquinas de HTB.
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.
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.
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)
.
Vemos como 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.
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
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
.
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.
Ahora, para tratar de enumerar archivos de interés usaremos getcap
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
.