0x00 靠山
文章记录了剖析shiro反序列化破绽的思绪和历程,破绽用的次数挺多,感受不认真走一遍剖析照样瑕玷什么。排版也是凭据我所明白的剖析1day的思绪举行排版的,emm~ 不太专业哈 见谅 ┭┮﹏┭┮
友谊提醒:文章写的感受对照亲民,理论上有一些其他语言的基础都可以阅读,对照倾向于将器械写的详细(空话许多),就是那种看帖按着步骤走随着思索也许自行明白的水平(记性欠好,不写可能会忘的)
0x01 梦最先的地方
一切都要从官方shiro的某个人提出的问题形貌最先提及 ~ 下图为谷歌翻译效果
url: https://issues.apache.org/jira/browse/SHIRO-550
通过形貌可知:
-
- shiro <= 1.2.4 存在反序列化破绽
-
- shiro的CookieRememberMeManager类里对破绽参数rememberMe举行序列化,加密等操作,我明白成这个类和这个破绽有关系,可以当成入口点
-
shiro对每次接见都市用到"记着我"的功效举行以下操作:
检索
rememberMe
cookie的值 //cookie中是否有这个参数- Base 64解码 //对参数的值举行解码
- 使用AES解密 //对参数的值再举行解密
- 使用Java序列化(
ObjectInputStream
)反序列化。 //对解出的参数的值举行反序列化
-
- 源代码存在默认的AES加密密钥,所有能够查看源代码的人都可以知道默认密钥是什么
以此确定一个需要通过Debug代码来杀青的也许目的:
- 通过
控制rememberMe参数的值
传输加密
好的恶意序列化payload
,乐成让shiro举行解密到反序列化的步骤就可以到达执行命令的目的-
- 若何控制rememberMe参数的值
-
- 若何对payload举行加密
-
- 凭据加密方式对天生恶意序列化payload举行加密组织行使工具
-
0x02 科普时间
AES加密算法:属于对称加密算法,意思就是加密和解密用相同的密钥
加密历程:
明文 --> AES加密函数 + 密钥位数(128/192.256) + iv(初始化向量) + 密钥(key) + 模式(CBC和GCM等) + padding(填充方式)--> 密文
IDEA的Debug按钮功效:
Step Over : 单步执行,遇到方式直接获得返回值而不会进入
,
Step Into : 单步执行,遇到方式会进入方式,不会进入jdk实现的方式中
Force Step Into : 可以进入任何的方式,好比jdk,jar包
Step Out : 在方式内会直接获得返回值跳出该方式
Run To Cursor : 让程序运行到鼠标所在的位置
Drop Frame : 返回上一步,摧毁当前方式获得的值
Resume Program : 运行至下一个断点所在位置
,欢迎进入环球UG官网(UG环球):www.ugbet.us,环球UG官方网站:www.caibao.it开放环球UG网址访问、环球UG会员注册、环球UG代理申请、环球UG电脑客户端、环球UG手机版下载等业务。
0x03 剖析独白
1. 环境设置
研究的条件自然是要搭建好环境
下载shiro的破绽环境,这里使用war包,放在tomcat的webapps里,启动tomcat,然后war包自动剖析成文件夹,使用IDEA打开此文件夹
顺便讲一下IDEA设置调试shiro
Run -> Edit Configurations -> 点击+号添加TomcatServer(Local) -> Server中设置Tomcat路径 -> 选择JRE版本 ->Deployment中点击+号添加tomcat里天生的shiro文件夹 -> 点击Apply
运行起来
2. 剖析历程
首先第一个目的是控制rememberMe参数的值,先找到参数所在位置,对环境的功效先正常使用一遍
当我接见http://localhost:8080/shiro_web_1_2_4_war/login.jsp 登录时勾选Remember Me后,cookie中泛起rememberMe参数,而shiro每次都市对cookie中的rememberMe来举行解密后反序列化操作来确定接见者权限,以是直接在cookie传输rememberMe参数就可以控制shiro反序列化的值
第二个目的是获得加密解密的方式,以此来自行加密解密恶意payload举行传输
反编译此破绽环境中的shiro组件jar包
选中shiro-core-1.2.4.jar -> 右键 -> Add as Library -> ok
选中shiro-web-1.2.4.jar -> 右键 -> Add as Library -> ok
IDEA中按两次shift 搜索咱们前面准备当做入口点的CookieRememberMeManager类,按着函数列表查看后并未发现有关加密的信息,so跟进父类AbstractRememberMeManager去看一下
进入此类可以发现一个很明显的key,凭据参数名DEFAULT_CIPHER_KEY_BYTES
也可以断定是AES加密中所使用的密钥,同时确实是直接写入了代码中,相符上面通过形貌可知的AES密钥硬编码在源代码中的条件
这里我在AbstractRememberMeManager类函数名为encrypt(加密)中下了断点,然后在web端举行登录操作,最先debug,运行至encrypt函数传入参数serialized,然后点击Drop Frame返回上个方式发现传入的serialized的值是我适才web端登录的用户名root序列化后的数据,凭据运行步骤函数名预测流程是shiro验证完了登录的账号密码,然后凭据用户名天生序列化数据准备举行加密了
登录并阅读全文 usdt收款平台声明:该文看法仅代表作者自己,与本平台无关。转载请注明:收购usdt(www.caibao.it):Shiro反序列化剖析带思绪及组件检测条记
Allbetwww.9cx.net欢迎进入欧搏平台(Allbet Game),欧搏平台开放欧搏(Allbet)开户、欧搏(Allbet)代理开户、欧搏(Allbet)电脑客户端、欧搏(Allbet)APP下载等业务。能赞一万次吗
USDT线下交易U担保(www.Uotc.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U担保开放usdt otc API接口、支付回调等接口。是我喜欢的风格
诚信在线棒呆、
Usdt第三方支付平台我醉了
你是当代马良吗
这份最佳阵容名单及响应的评分,均来自欧足联官方的Fantasy游戏。每个竞赛日到来前,玩家需要在系统中选定自己心目中的梦幻阵容,等该竞赛日竣事后,系统会凭证球员在竞赛中的显示盘算响应评分,来决议玩家的得分。因此,最佳阵容中的球员,也是3轮竞赛中都有优越显示的球员。而在响应的评分中,C罗以29分的高分居首。好多人都看啊
可以,在看
美国不停要求更多的欧洲国家与美国站在一起打压中国。然则云云做法,真的完全相符欧洲自己的利益吗?德国前总理施罗德撰文称,西方对中国恒久以来坚持的不外是一种道德绑架式的外交政策。欧洲只有确保自己的主导权加倍周全,才可以让欧洲的生长获得更多的时机和利益。超棒,以后就看你