当前位置: 首页 > wzjs >正文

东莞企业网站设计inews wordpress

东莞企业网站设计,inews wordpress,域名注册报备,漯河网站建设一、Shiro 简介 Apache Shiro是一个开源安全框架,用于构建 Java 应用程序,提供身份验证、授权、加密和会话管理等功能。 二、Shiro-550(CVE-2016-4437) 1、漏洞原理 Shiro 在用户登陆时提供可选项 RememberMe,若勾选…

一、Shiro 简介

Apache Shiro是一个开源安全框架,用于构建 Java 应用程序,提供身份验证、授权、加密和会话管理等功能。

二、Shiro-550(CVE-2016-4437)

1、漏洞原理

Shiro 在用户登陆时提供可选项 RememberMe,若勾选则下次登陆会携带 cookie 中的 remember me 字段发起请求,就不需要重新输入用户名和密码,用户登录成功后会生成经过 AES 加密和 base64 编码的 cookie。攻击者可以使用 Shiro 的默认密钥构造恶意序列化对象进行编码来伪造用户的 cookie,服务端反序列化时触发漏洞,从而实现恶意代码执行。

AES 是对称加密,加解密是相同的密钥,Shiro 1.2.4 及之前的版本中,AES 加密的密钥默认硬编码是写在代码中的,我们便可使用公开密钥进行爆破。

2、环境搭建

简单的 Shiro Web 应用项目用的是 phith0n 师傅的:https://github.com/phith0n/JavaThings/tree/master/shirodemohttps://github.com/phith0n/JavaThings/tree/master/shirodemo

我用的 IDEA 来运行,当然你自己需要安装配置好 JDK、Tomcat 等

用户名和密码是:

root
secret

3、基本测试

我们勾选上 Remember me 进行登录,使用 burpsuite 抓包

响应包中包含特征字段:

rememberMe=deleteMerememberMe

在已经以记住我的方式登录后,后续的所有请求中 Cookie 都包含 rememberMe 字段,这个字段就是我们反序列化的利用点,但是我们可以看到,它的值是密文的形式存在的,我们就需要找到正确的密钥,对我们构造的 payload 进行加密后再传给 rememberMe 字段,从而让它解密后在反序列化时触发恶意代码执行。

4、漏洞利用

直接使用默认密钥进行检测,也可以爆破密钥,都会发现密钥就是:

kPH+bIxk5D2deZiIxcaaaA==

尝试命令执行,没有问题

5、源码分析

因为我们利用的点是 Cookie 里的 rememberMe 字段,因此我们搜一下 Cookie 相关的类和方法。

这里我们找的是 CookieRememberMeManager 类:

在这个类下面有一个叫 getCookie() 的方法

在这里下断点,动态调试

burpsuite 发包

进去后,我们来到了 getRememberedSerializedIdentity() 方法

往下走,可以看到我们 cookie 中 rememberMe 的值传给了一个名为 base64 的变量

  if ("deleteMe".equals(base64))

先判断传入的内容是不是等于 "deleteMe",显然不等于

base64 = this.ensurePadding(base64);

接下来使用 ensurePadding 方法确保 base64 编码字符串的填充正确

之后对传入内容进行 base64 解密,解密结果作为返回值

将返回值存储在字节数组 bytes 中

之后调用 convertBytesToPrincipals() 函数,bytes 作为第一个参数传入

进函数去看看

如果 getCipherService() 返回非 null ,表示加密服务存在,就对字节数组 bytes 进行解密,再调用 deserialize() 函数,将解密后的字节数据反序列化成 Java 对象(PrincipalCollection 对象)。

我们来详细看一下这个加密服务:

使用的是 AES 的 CBC 模式加密,填充模式为 PKCS5Padding

跟进去看一下解密函数

decrypt() 函数有两个参数,第一个是 encrypted ,即前面的字节数组 bytes,也就是 base64 解密后的内容,第二个是 getDecryptionCipherKey() 函数,跟进看看:

该函数会返回一个 decryptionCipherKey

看看这个 decryptionCipherKey,发现它是一个变量

看看谁调用了它,首先是这个 setDecryptionCipherKey() 调用了

再看看谁调用了 setDecryptionCipherKey() ,发现是 setCipherKey() 调用了

继续看谁调用了 setCipherKey(),发现是 AbstractRememberMeManager() 方法

该方法里面有一个常量 DEFAULT_CIPHER_KEY_BYTES

其值为固定值,即 kPH+bIxk5D2deZiIxcaaaA== 经过base64解密的值

理清调用流程后,我们发现 decryptionCipherKey 其实就是默认密钥: 即 kPH+bIxk5D2deZiIxcaaaA== 经过 base64 解码的值。

密钥值作为 getDecryptionCipherKey() 函数的返回值,作为第二个参数传入到 decrypt() 函数,对前面的字节数组 bytes 进行 AES 解密。

但是  AES 解密除了密钥还需要一个偏移量 IV,也在 decrypt() 函数里:

可以看到 iv = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]  即 16 个字节全是 0

解密完成后,调用 deserialize 函数进行反序列化

跟进看看

反序列化调用 readObject() 位置

至此,我们理清了 cookie 的 rememberMe 内容传入后解密的整个过程,即:

cookie密文-> base64 解码 -> AES 解密(CBC 模式,PKCS5Padding,默认密钥 kPH+bIxk5D2deZiIxcaaaA== ,偏移量 IV 这里全是 0) -> 反序列化

首先在 CookieRememberMeManager.getRememberedSerializedIdentity 中进行 base64 解码,然后调用 AbstractRememberMeManager.convertBytesToPrincipals 进行 AES 解密和反序列化。

三、密钥正确性判断

代码中,当捕获到异常会调用 onRememberedPrincipalFailure 方法

跟进,会找到一个叫 removeFrom() 的方法:

当传入的 cookie 在解密或者反序列化失败时,就会触发这个方法,在 HTTP 响应中添加一个 Set-Cookie 头部,并且带上 deleteMe 字段。

对于正确的 key,回显不会存在 Set-Cookie:rememberMe=deleteMe 字段

对于不正确的 key,回显会出现 Set-Cookie:rememberMe=deleteMe 字段

四、小结

Shiro-550 的根本原因:Shiro 1.2.4 及之前的版本中,AES加密的密钥默认硬编码在代码里,Shiro 1.2.4 以上版本官方移除了代码中的默认密钥,要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。

对于漏洞的利用,我们反着代码的处理过程构造 poc 即可:

构造序列化后的 payload -> AES 加密 -> base64 加密 -> 传递给 cookie


文章转载自:

http://AmDp2fCu.qLhwy.cn
http://lP27mFTy.qLhwy.cn
http://Sh5MVVHI.qLhwy.cn
http://GGplRx25.qLhwy.cn
http://fF36z94P.qLhwy.cn
http://TQ4nsYKf.qLhwy.cn
http://orAbdaKG.qLhwy.cn
http://7f28GVHH.qLhwy.cn
http://zLT0w042.qLhwy.cn
http://mZJ6D5RT.qLhwy.cn
http://lSrCkhsG.qLhwy.cn
http://GhNpo1H4.qLhwy.cn
http://wErm4PKF.qLhwy.cn
http://rN9kHVsu.qLhwy.cn
http://PIfzIjY0.qLhwy.cn
http://kgLHzJma.qLhwy.cn
http://Rjy3dkmI.qLhwy.cn
http://5M9tno7F.qLhwy.cn
http://TIU6O8bA.qLhwy.cn
http://rWL6lGNn.qLhwy.cn
http://ZbqOvT17.qLhwy.cn
http://BOeuFwKN.qLhwy.cn
http://BvRe6zdX.qLhwy.cn
http://kdW15Qcn.qLhwy.cn
http://FTik9o6M.qLhwy.cn
http://a85HsBiv.qLhwy.cn
http://1gh8ErW5.qLhwy.cn
http://hBnAaO7D.qLhwy.cn
http://sHAEA7Ns.qLhwy.cn
http://lf5evXrn.qLhwy.cn
http://www.dtcms.com/wzjs/721102.html

相关文章:

  • 网站系统建设招标文件wordpress 新建用户
  • 做网站的怎么找客户国外网站网站app
  • 关于网站开发人员的薪资网站设计软件免费下载
  • 在哪个网站找装修公司充值选建设银行打不开网站
  • 南京建站平台yy直播官网
  • 站长统计ios揭阳网站制作专业
  • 阿里云网站实名认证怎样提高网站速度
  • 云服务器上放多个网站制作手机app开发
  • 广州外贸网站咨询缠绕机东莞网站建设技术支持
  • 郑州企业网站托管公司做百度网站分录
  • 重庆市建设公共资源交易中心网站首页建筑招投标信息网
  • 山东滨州网站建设公司零基础建设网站视频教程
  • 南县做网站推荐介绍网站建设规划书结构
  • 网站建设公司山西做长直播的房地产网站
  • 网站使用的数据库主要有哪些电商平台开发流程
  • 改wordpress地址还是站点地址网站服务器租用价格多少钱一年
  • 服务器做多个网站学短视频剪辑与制作
  • 开发手机网站多少钱做拍卖的网站
  • 建设网站怎么收费标准建设银行官网首页网站南山片区
  • 商务网站建设需要备案吗广州网站建设讯度
  • wordpress 网站重置网站里宣传视频怎么做
  • 网站界面 ui 设计答案广西住房和城乡建设厅培训中心官方网站
  • 初中信息技术 网站制作如何制作app软件
  • 传媒网站建设公司龙海网站建设公司
  • 矢量插画的网站wordpress会员到期
  • 好的外贸网站的特征软件外包平台
  • 资源网站源码下载昆明参差网站
  • 网站的信息管理建设的必要性网站建设调研文档
  • 子网站域名ip地址查询百度搜索引擎怎么弄
  • 网站地图模板class wp wordpress