vulhub复现之shiro反序列化漏洞复现

目录

什么是shiro?

 什么是安全框架?

反序列化与序列化

shiro反序列化漏洞

怎么判断是否存在反序列化漏洞?


什么是shiro?

shiro是功能强大且容易使用的java安全框架。shiro可以非常容易开发出足够好的应用。

​shiro可以帮助我们完成:认证.授权.加密.会话管理等

​Shiro有着很好的通用性,不局限于Web 环境,但在Web 环境下一些特定的需求需要手动编写代码定制,有一定的代码侵入。

-shiro核心架构​

 什么是安全框架?

安全框架就是解决系统安全问题的框架,如果没有安全框架,我们需要手动处理每个资源的访问控制,比较繁琐。使用安全框架,可以通过配置的方式实现对资源的访问限制。​

反序列化与序列化

序列化其实就是讲数据转化成一种可逆的数据结构,逆向的过程就叫做反序列化

​序列化过程:是指把一个 Java 对象变成二进制内容,实质上就是一个 byte[]。因为序列化后可以把 byte[] 保存到文件中,或者把 byte[] 通过网络传输到远程(IO),如此就相当于把 Java 对象存储到文件或者通过网络传输出去了。

​反序列化过程:把一个二进制内容(也就是 byte[] 数组)变回 Java 对象。有了反序列化,保存到文件中的 byte[] 数组又可以“变回” Java 对象,或者从网络上读取 byte[] 并把它“变回” Java 对象。

什么情况下需要序列化? 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; 当你想用套接字在网络上传送对象的时候; 当你想通过RMI传输对象的时候。

shiro反序列化漏洞

Apache Shiro框架提供了一个记住我的功能,这个功能在用户登录成功之后,会生成一个加密后的cookie。其中记住我的RememberMe就是cookie中的key。cookie的值是对相关信息进过序列化,再进行aes加密,再使用base64编码之后形成的。 服务端接收cookie值时,也是按照以下步骤解析的:

1.检索RememberMe cookie的值

2.base64解码

3.使用aes解码(加密密钥硬编码)

4.进行反序列化操作(未做过滤处理) 在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

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

怎么判断是否存在反序列化漏洞?

登录页面随便输入用户名密码用burpsuite抓包

​在cookie后加入rememberMe=1

​在响应包中显示如下说明存在shiro框架可能存在漏洞

如果没有的话,在请求包里的cookie中添加rememberMe=deleteMe,查看相应包里面set-cookie是否有相同字样,有则表示有该漏洞。

​ 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值