shiro反序列化远程命令执行复现分析
2023-6-1 00:17:40 Author: mp.weixin.qq.com(查看原文) 阅读量:47 收藏



shiro是什么?

    Apache shiro是常见的java写的安全框架,用来处理身份验证授权加密缓存会话管理等问题


shiro的Cookie RememberMeManager是什么?

    它是表单中“记住我”的一种功能,在用户登入时自动获取之前存储的Cookie信息,可以快速恢复用户的身份认证状态


Cookie RememberMeManager的工作原理

    当勾选“记住我”功能发送请求时,shiro框架首先调用的是Realm对象来验证用户的身份,并生成唯一的标识符token,如果验证通过,shiro就会生成Cookie RememberMeManager token对象,并且保存到对象中,然后被反序列化为一个加密Cookie,通过响应头发送给客户端,这个Cookie包含了token信息、过期时间及其他数据,当用户关闭浏览器并重新打开时,shiro会自动解码反序列化Cookie,获取其中的token信息并进行身份认证,并将Subject对象标记为已授权状态,由于上次认证的信息以及被记录下来,所以可以避免用户重新输入账户密码的操作


Apache Shiro处理cookie的流程

由于ASE是解码,没法改变,可以构造恶意数据将其编码为base64然后注入rememberMe cookie中,当用户再次访问时,恶意数据发送到服务器上,然后进行反序列化,在反序列化的过程中就会导致执行构造的恶意数据,达到RCE


漏洞原理

    shiro在session反序列化中,没有对反序列化的数据进行安全检查过滤,就导致反序列化中构造的恶意代码会被执行


漏洞复现(vulfocus的靶场)

探索yi'xi下log in

一个表单功能,抓包登入

发送

可以看到响应头有rememberMe的字眼

这个是由于shiro的key错误才会显示,如果shiro的key正确则不会显示

这里是存在shiro反序列化漏洞

这里使用检测工具检测一下

检测成功,开始爆破利用连

发现利用链,开始执行命令

成功执行了

是root权限


流量特征

1、数据包的大小异常:在反序列化过程中数据包会有大量恶意代码,所以数据包大小正常大小多很多

2、反序列化误:构造的恶意反序列化数据和应用程序中更多的是无效请求,从而反序列化失败,导致大量错误出现

3、请求中的(java序列化对象base64编码)和rememberMe、_shiro_session等字眼

4、恶意类名和方法:会使用自定义的恶意类名和方法名,这些类名和方法名和正常的正常的服务操作不同,可以通过检查日志或者审计来识别

5、异常的java运行:如果存在RCE攻击,则会出现java的运行行为,可以在系统日志中检测


防御

1、避免使用Apache Shiro的默认RememberMeManager实现,应该使用自定义的RememberMeManager实现,包括不同的加密算法或密钥来避免硬编码密钥漏洞

2、对所有的数据进行严格验证过滤,服务器要对cookie检查是不是有效的用户会话生成的,服务器还要确保cookie中不包含其他数据

3、对用户输入的内容做验证过滤,可能会被尝试其他方式注入恶意数据

4、将服务器配置禁用默认RememberMeManager实现,要使用自定的RememberMeManager来保证更强大的安全性

5、升级shiro版本

6、有效检查反序列化的数据

问有惑不解,关注公众号联系作者

工具

可以

联系我


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5MzkwMzg4Mg==&mid=2247484341&idx=1&sn=0d4b46fa9fc300381f16215c518e0c56&chksm=c026f6d0f7517fc60069ad74d8d5e6c5f5e13a1c602c96666905ef0d10fa4550afeee52e93e7&mpshare=1&scene=1&srcid=0601R53oybK3wNC9Ij4MazAA&sharer_sharetime=1685549848176&sharer_shareid=205c037363a9188e37dfb6bb4436f95b#rd
如有侵权请联系:admin#unsafe.sh