OGNL漏洞原理全解

作者&投稿:泷洪 (若有异议请与网页底部的电邮联系)
~ 本篇文章由作者wdd撰写,属于i春秋原创奖励计划,未经许可禁止转载。本文旨在深度解析OGNL表达式漏洞原理,尤其是针对Struts2漏洞分析的领域。文章将详细讨论setValue和getValue方法的运作机制,揭示Struts2漏洞分析的最后一层奥秘。在阅读本篇后,希望能为读者提供对整个系列,包括但不限于Struts漏洞系列的深入理解。

漏洞触发方式主要分为setValue和getValue两种。市面上的payload通常分为针对setValue和getValue的两种类型。本篇将详细探讨这些payload的区别,以及payload构造的原因。示例payload包括:“@java.lang.Runtime@getRuntime().exec('calc')”(双括号形式)和“aba”(非双括号形式)。

首先,我们从相对基础的getValue方法开始介绍。通过示例代码展示了一个简单的应用:通过调用exec('calc')来执行命令。完整的调用链涉及从exec方法到OgnlRuntime类的多个方法调用,最后到ASTMethod类进行反射调用,触发漏洞。

在解析getValue方法的实现时,可以看到关键步骤包括解析字符串表达式为OGNL对象,然后通过evaluateGetValueBody方法计算表达式的值。这个方法中,context.getTraceEvaluations()判断是否启用表达式求值的跟踪功能,并调用getValueBody方法对OGNL树进行遍历,识别和处理逻辑。在getValueBody中,通过反射调用java.lang.Runtime@getRuntime().exec()方法,触发漏洞。

对于setValue方法的payload,通常需要在字符串中添加两个括号。示例代码展示了一个带有两个括号的payload,并解释了其背后的构造逻辑。关键在于setValueBody方法中,针对payload内容的处理方式不同,从而决定是否进行二次解析。双括号形式的payload能够触发二次解析过程,这也是常见payload形式的原因。其中的内容可以自由选择,没有严格的要求。

文章最后总结,通过理解和掌握setValue和getValue两种触发方式,读者将能更好地应对涉及OGNL表达式漏洞的分析和修复,无论遇到何种漏洞,都能有条不紊地进行分析和应对。至此,关于OGNL表达式漏洞原理的深入解析结束。


玉山县18557245020: SpringMVC当中的Controller接口和Struts2当中的Action有什么区别 -
绽林黛力: SpringMVC的Controller和Struts2的Action均是实现MVC模式的控制层.两者区别如下:1. SpringMVC可精确控制到方法上,Controller可以单例开发,Struts2的Action则是多例prototype开发,基于类进行拦截请求的.2. SpringMVC的速度一般...

玉山县18557245020: struts配置struts框架用在什么地方 -
绽林黛力: 一般用在web项目中,也就是B/S架构的项目.

玉山县18557245020: 如何判断一个网站是否有struts漏洞 -
绽林黛力: 漏洞描述:CVE-2013-225. Struts2 是第二代基于Model-View-Controller (MVC)模型的java企业级web应用框架.它是WebWork和Struts社区合并后的产物 Apache Struts2的action:、redirect:和redirectAction:前缀参数在实现其功能的过程中使用...

玉山县18557245020: ognl表达式中%的作用 -
绽林黛力: 在struts2字符串中用%{}指出,其内部是一个ognl表达式,需要解析.如<s:textfield lable="user" name="user" value="%{#session.user}" /> 不过有些标签默认认定,整个字符串就是一个表达式,所以不用%{} 如<s:property value="#...

玉山县18557245020: 如何开发自己的通用Mapper -
绽林黛力: 第一步,创建HsqldbMapper public interface HsqldbMapper {}这个接口就是我们定义的通用Mapper,具体的接口方法在**第三步**写.其他的Mapper可以继承这个HsqldbMapper...

玉山县18557245020: 如何通过ognl获取路径和端口 -
绽林黛力: Struts2框架使用OGNL作为默认的表达式语言.相对EL表达式,它提供了平时我们需要的一些功能,如:支持对象方法调用,如xxx.sayHello();支持类静态方法调用和值访问,表达式的格式为[类全名(包括包路径)]方法名|值名],Ognl有一...

玉山县18557245020: 在strut2中OGNL作用有哪些? -
绽林黛力: 你的prs是什么 如果是action中的方法的话 那么在 struts 标签中可以直接使用 例如<s:property value="getToolBar('....')"/> 要是某类的静态方法 可以这么调<s:property value="@类名(完整)@方法名(或者属性名)"/> 以上是Ognl 表达式对方法的掉用那个 另外,虚机团上产品团购,超级便宜

玉山县18557245020: OGNL出问题了 -
绽林黛力: struts的ognl其实并不好用,一般都是用jstl的,不过可能跟jstl差不多的吧,我估且给你一个参考,行不行再说吧.首先,你的语法本身就有问题了,value="<%=request.getParameter("studentList")%>"在解析到getParameter后面的双引号...

玉山县18557245020: 如题,struts2中OGNL访问根元素和非根元素有什么区别?
绽林黛力: 根元素直接属性名就可以访问,最多加%{}就可以. 非根元素则要加# 希望对你有帮助.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网