搬砖笔记-shiro反序列化漏洞

最近经常遇到这个东西。
Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。
主要有两个漏洞:Shiro550和Shiro721

Shiro550漏洞原理

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
在服务端接收cookie值时,按照如下步骤来解析处理:
1、检索RememberMe cookie 的值
2、Base 64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。
影响版本:Apache Shiro < 1.2.4

漏洞利用条件:

由于使用来aes加密,要想成功利用漏洞则需要获取aes的加密密钥,而在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==。这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞。
尽管目前已经更新了许多版本,官方并没有反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码,这里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。

检测与利用

目标发现与寻找
Shrio框架的特征是登录页面的cookie中存在remeberMe=deleteMe(失败时返回的值)的内容。通过该特征发现Shiro的系统有几种方式:
1、在登录页面时,提交表单后看set-cookie是否存在remeberMe=deleteMe。
2、在流量中搜索remeberMe=deleteMe。
3、通过fofa、zoomeye、shodan这类平台搜索相关特征来发现目标。
例如fofa的搜索关键词:header=“rememberme=deleteMe”、header=“shiroCookie”

Shiro721漏洞原理

由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
影响版本:Apache Shiro < 1.4.2版本。

检测

直接用现成的工具:https://github.com/feihong-cs/ShiroExploit

参考链接:
https://zhuanlan.zhihu.com/p/115257685

https://paper.seebug.org/shiro-rememberme-1-2-4/

https://blog.csdn.net/Fly_hps/article/details/106112692?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

https://www.cnblogs.com/xiaozi/p/13239046.html

猜你喜欢

转载自blog.csdn.net/WM_NNXX/article/details/107671771