反序列化漏洞(一)Shiro漏洞CVE-2016-4437复现

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

1、前言

春节后第一篇,祝大家龙年一切顺利,开始调整调整,再过几天就上班啦!我春节期间休息几天没有更新,但跑步不间断,每天室内慢跑60分钟+,所以没有长胖。你春节期间有坚持运动吗?

接下来会分享反序列化几个常见漏洞(shiro、weblogic和fastjson):原理和复现,可能会有3~4个篇幅,具体以实际为准。

2、序列化和反序列化

序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中,保证对象的完整性和可传递性;反序列化即逆过程,由字节流还原成对象。 根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。在PHP中序列化和反序列化对应的函数分别为serialize()和unserialize()。

常见序列化出现场景:
1.远程和进程间通信(RPC/IPC)
2.连线协议、 Web服务、消息代理
3.缓存/持久性存储区
4.数据库、缓存服务器、文件系统
5.HTTP cookie、 HTML表单参数、 API身份验证令牌

3、反序列化漏洞原理

当程序在进行反序列化时,会自动调用一些函数,以PHP为例有__wakeup(),__destruct()等函数, Java中有readObject()方法等,但是如果传入函数的参数可以被用户控制的话,用户可以输入一些恶意代码到函数中,从而导致反序列化漏洞。

常见危害:
1.远程代码执行,如:system(‘whoami’)等
2.重放攻击
3.注入
4.特权提升

4、Shiro反序列化漏洞原理

AES加密的密钥Key被硬编码在代码里,由于Shiro源码开源,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化、AES加密、 base64编码后,作为cookie的rememberMe字段发送。 Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

漏洞影响版本
Apache Shiro <=1.2.4

4.1、解析步骤

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

4.2、漏洞特征

返回包中存在 rememberMe=deleteMe 字段

5、CVE-2016-4437漏洞复现

docker环境搭建详见《kali系统安装docker和部署vulhub服务》

5.1、启动靶场环境
# 先切到对应目录
cd /home/kali/vulhub-master/shiro/CVE-2016-4437

# 开启靶场
docker-compose up -d

# 查看靶场启动情况
docker-compose ps

在这里插入图片描述

5.2、访问靶场

访问:http://your-ip:8080

在这里插入图片描述

5.3、查看漏洞说明

在靶场启动同一个目录有一个README.md文档,说明漏洞原理,测试账号:admin/vulhub和漏洞重现步骤说明。

在这里插入图片描述

5.4、确定注入点

使用Burp suite抓包,未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段。

登陆失败或成功,不管有没有勾选RememberMe字段,返回包都会有rememberMe=deleteMe字段。但是如果不勾选RememberMe字段,登录成功后所有请求中Cookie都不会有rememberMe字段

5.4.1、未登录时

在这里插入图片描述

5.4.2、登录失败,无勾选

在这里插入图片描述

5.4.3、登录成功,勾选,访问其他页面

在这里插入图片描述

5.5、利用工具
5.5.1、shiro_attack_2.2

在这里插入图片描述

爆破链利用,结合burp suite工具代理使用。
在这里插入图片描述
在这里插入图片描述

命令执行

在这里插入图片描述

6、下期内容预告

下期内容继续分享Shiro另外两个漏洞复现:CVE-2019-12422和CVE-2020-1957,敬请关注我的公众号,持续更新中…

7、资料获取

如果需要Shiro漏洞利用工具,请关注公众号:大象只为你,后台回复:shiro漏洞。

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值