攻击笔记(shrio反序列化,OGNL注入) 您所在的位置:网站首页 ognl注入 攻击笔记(shrio反序列化,OGNL注入)

攻击笔记(shrio反序列化,OGNL注入)

2023-11-01 10:43| 来源: 网络整理| 查看: 265

shrio反序列化攻击

 shrio认证过程:

将前端传入的用户名与密码封装为一个对象(UsernamePasswordToken); 将数据库中查询的数据封装为另一个对象(SimpleAuthenticationInfo); 比对结果,相同则继续,不同则抛出异常; 返回用户信息,封装入一个对象(SimplePrincipalCollection),并根据用户信息,再创建一个 subject ,后续任何操作都以此 subject 为主,包括授权。

授权:

  获取到当前用户权限信息后,将用户所拥有的权限循环遍历出来,然后和当前资源所需要访问权限进行一一比对,如果相同则返回true。

攻击总述:

由于登陆页面可选 rememberMe,在使用此选项时,rememberMe 有效期间不需要再次登陆。

通过硬编译将AES加密的密钥放在代码内,由于请求内有 rememberMe 会被优先处理,则会绕过之前的认证步骤。将恶意对象序列化之后,AES加密,base64 编码后,作为 cookie 的 rememberMe 字段发送,shiro 将 rememberMe 解密后并反序列化,最终造成反序列化漏洞。

其特征是必须由 cookie 中的 rememberMe 来进行,无论是探测还是攻击,拥有较高的可识别度。

OGNL注入攻击

OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言(EL)

特点:

支持对象方法调用,形式如:objName.methodName();

支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名| 值名],例如: @java.lang.String@format('foo%s', 'bar')或@tutorial.MyConstant@APP_NAME;

支持赋值操作和表达式串联,例如: price=100, discount=0.8, calculatePrice(),这个表达式会返回80;

访问OGNL上下文(OGNL context)和ActionContext;

操作集合对象。

Struts2基于XWork而开发,XWork本身整合了OGNL的一部分并且将这部分内容做了相应的扩展,所以Struts内置了OGNL这部分功能。

攻击范例:

#ActionContext是OGNL的上下文,ValueStack对象是上下文中的根对象: #随便找一个Action给JSP页面传东西过去的例子,然后在Action的execute()方法中加入以下代码: ActionContext.getContext().getValueStack().set("test", "love java"); #在目标JSP页面空白处加上如下代码: #再次跳转到该页面就可以看到love java出现在页面上了 age=%{(#application.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString(0,0) + (#application.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) + ...}

总结:

在JSP页面中"%{"就表示OGNL表达式开始,"}"表示OGNL表达式结束

如果访问根对象中的对象和属性不用任何符号标志,如:%{Object.field}

访问特定Scope中的对象和属性用"#"来通知OGNL查询器,如:%{#request.object},当然OGNL很强大,在一个链中,前一个对象做为解释下一个对象的上下文。你可以任意扩展这个链,在链中也可以访问对象中的方法。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有