0x00 靠山

文章记录了剖析shiro反序列化破绽的思绪和历程,破绽用的次数挺多,感受不认真走一遍剖析照样瑕玷什么。排版也是凭据我所明白的剖析1day的思绪举行排版的,emm~ 不太专业哈 见谅 ┭┮﹏┭┮

友谊提醒:文章写的感受对照亲民,理论上有一些其他语言的基础都可以阅读,对照倾向于将器械写的详细(空话许多),就是那种看帖按着步骤走随着思索也许自行明白的水平(记性欠好,不写可能会忘的)

0x01 梦最先的地方

一切都要从官方shiro的某个人提出的问题形貌最先提及 ~ 下图为谷歌翻译效果

url: https://issues.apache.org/jira/browse/SHIRO-550

通过形貌可知:

    1. shiro <= 1.2.4 存在反序列化破绽
    1. shiro的CookieRememberMeManager类里对破绽参数rememberMe举行序列化,加密等操作,我明白成这个类和这个破绽有关系,可以当成入口点
    1. shiro对每次接见都市用到"记着我"的功效举行以下操作:

    2. 检索rememberMe cookie的值 //cookie中是否有这个参数

    3. Base 64解码 //对参数的值举行解码
    4. 使用AES解密 //对参数的值再举行解密
    5. 使用Java序列化(ObjectInputStream)反序列化。 //对解出的参数的值举行反序列化
    1. 源代码存在默认的AES加密密钥,所有能够查看源代码的人都可以知道默认密钥是什么

以此确定一个需要通过Debug代码来杀青的也许目的:

  • 通过控制rememberMe参数的值传输加密好的恶意序列化payload,乐成让shiro举行解密到反序列化的步骤就可以到达执行命令的目的
      1. 若何控制rememberMe参数的值
      1. 若何对payload举行加密
      1. 凭据加密方式对天生恶意序列化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官网(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反序列化剖析带思绪及组件检测条记
发布评论

分享到:

usdt支付接口(caibao.it):海底大猎杀39:皮皮虾进化巨型海蝎子
3 条回复
  1. BET
    BET
    (2021-02-02 00:01:11) 1#

    Allbetwww.sunbet.us欢迎进入欧搏平台(Allbet Game),欧搏平台开放欧搏(Allbet)开户、欧搏(Allbet)代理开户、欧搏(Allbet)电脑客户端、欧搏(Allbet)APP下载等业务。能赞一万次吗

    1. usdt在线交易
      usdt在线交易
      (2021-02-19 04:54:25)     

      USDT线下交易U担保(www.Uotc.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U担保开放usdt otc API接口、支付回调等接口。是我喜欢的风格

  2. Allbet
    Allbet
    (2021-02-04 00:02:32) 2#

    诚信在线棒呆、

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。