Apache Shiro 反序列化漏洞
Apache Shiro 反序列化漏洞(Shiro-721 CVE-2016-4437)
Apache Shiro是一个强大且易用的Java安全框架,其支持身份验证、授权、密码和会话管理等。使用Shiro的API可以快速、轻松地获得任何应用程序。
2021年02月01日,Apache Shiro发布1.7.1版本,修复了 Apache Shiro 中的一个身份验证绕过漏洞(CVE-2020-17523)。当Apache Shiro与Spring结合使用时,攻击者可以使用恶意HTTP请求来绕过Shiro的身份认证。成功利用此漏洞的攻击者可以绕过身份验证,成功访问后台。
Apache Shiro 存在高危代码执行漏洞。该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
环境搭建
复现环境: Apache Shiro 1.4.1 + tomcat:8-jre8
git下载shiro-720到本地环境
1 |
|
对shiro-720进行编译
1 |
|
启动dokcer并将端口8080映射到主机端口9000上
1 |
|
查看是否搭建成功
1 |
|
通过自行编译1.4.1war 包放入tomcat容器中运行
安装maven
1 |
|
1 |
|
添加环境变量
1 |
|
进入父bash查看mvn版本
1 |
|
1 |
|
从 Apache Shiro Gtihub 官方仓库自行下载漏洞影响版本(https://github.com/apache/shiro),使用 Apache Maven(软件项目管理及自动构建工具) 编译构建生成 war Java 应用程序包。
1 |
|
然后在执行
1 |
|
到这则搭建的没有问题
然后
1 |
|
将编译完成获取到的 samples-web-1.4.1.war 包( samples/target/中)拷贝到 Tomcat 的 webapps 目录下,启动tomcat即可。使用命令
1 |
|
然后打开http://自己虚拟机的IP:9000/samples-web-1.4.1/
测试与结果
复现步骤:
输入正确的用户名和密码登录网站(勾选Remember),并从cookie中获取RememberMe值。
使用RememberMe cookie作为Padding Oracle Attack的前缀。
加密ysoserial的序列化有效负载,以通过Padding Oracle Attack制作精心制作的RememberMe。
请求带有新的RememberMe cookie的网站,以执行反序列化攻击。
攻击者无需知道RememberMe加密的密码密钥。
漏洞复现:
一.漏洞利用复现01
登录 Shiro 测试账户获取合法 Cookie(勾选Remember Me):
认证失败时(输入错误的用户名和密码),http响应页面中会显示出deleteMe的cookie:
输入正确用户密码得到合法cookie:
认证成功(输入正确的用户名和密码登录),http响应页面中不会显示deleteMe的cookie:
根据以上条件我们的思路是在正常序列化数据(需要一个已知的用户凭证获取正常序列化数据)后利用 Padding Oracle 构造我们自己的数据(Java序列化数据后的脏数据不影响反序列化结果),此时会有两中情况:
构造的数据不能通过字符填充验证,返回deleteme;
构造的数据可以成功解密通过字符填充验证,之后数据可以正常反序列化,不返回deleteme的cookie.
这里输入正确的用户名和密码,并勾选Remeber ME。
登录成功后,访问http://192.168.1.14:8080/account/,F12得到Cookie中的rememberMe值
漏洞验证
方法一
使用Java反序列化工具 ysoserial 生成 Payload:
1 |
|
通过git对其padding oracle attack poc进行下载
1 |
|
通过 Padding Oracle Attack 生成 Evil Rememberme cookie:
此 exp 爆破时间较长,建议使用 ysoserial 生成较短的 payload 验证(如: ping 、 touch /tmp/test等),生成成功后将自动停止运行。
1 |
|
使用Evil Rememberme cookie 认证进行反序列化攻击:复制该cookie,然后重放一下数据,即可成功执行命令,此处脚本爆破出正确的Rememberme cookie需要较长时间。
还可以用dnslog提供的dns地址解析来验证
1 |
|
方法二使用shiro550/721漏洞检查工具对其进行验证
工具下载地址:
https://github.com/feihong-cs/ShiroExploit-Deprecated/releases/download/v2.51/ShiroExploit.V2.51.7z
最后有加号即存在漏洞
提权shell
生成payload然后用上述方法获取恶意rememberkey
1 |
|
重放之后进入1.php可看到内容
最后用蚁剑连接即可,或者直接shrio工具反弹shell
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!