更多黑客技能 公众号:小道黑客
作者:掌控安全-holic
0x01、前言
相信大家总是面试会问到java反序列化,或者会问到标志性的漏洞,比如shiro反序列化,或者weblogic反序列化漏洞。
那我就这篇文章为大家讲解一下,不懂的哥哥直接背一下,理解一下就好了。
至于为什么要选择shiro反序列化呢,不讲weblogic呢?
因为我上次有幸参与金鸡电影节的临时安全负责人,具体我就不细说了。当时是内部涉及到shiro反序列化漏洞。
准确的来说是Shiro<1.2.4-RememberMe反序列化漏洞。
而它也被称为Shiro 550反序列化漏洞。
细品细品…
0x02、环境搭建
下载地址:https://codeload.github.com/apache/shiro/zip/shiro-root-1.2.4
环境:Tomcat 8.5.27 + idea 2020.2 + jdk 1.8 +maven 3.6
下载之后之后直接打开,并open这个web文件夹即可,其他自行百度就行,其中还需要导入一些jstl的jar等等
0x03、漏洞原理
shiro默认使用了CookieRememberMeManager
,其处理cookie的流程是:
得到rememberMe的cookie值 --> Base64解码 --> AES解密 --> 反序列化
然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。
payload 构造的顺序则就是相对的反着来:
恶意命令-->序列化-->AES加密-->base64编码-->发送cookie
在整个漏洞利用过程中,比较重要的是AES加密的密钥,该秘钥默认是默认硬编码的,所以如果没有修改默认的密钥,就自己可以生成恶意构造的cookie了。
shiro特征:
未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段
登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段
不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段
勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段
0x04、漏洞复现
复现文章