type
status
date
slug
summary
tags
category
icon
password
简介
Struts2是一个基于MVC设计模式的Web应用框架.(Struts2是一个基于MVC设计模式的Web应用框架).
Struts2的核心是使用的webwork框架,而webwork又是使用的XWork来处理action的,并且通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个OGNL语句.
Struts2 S2-012
版本:2.1.0 - 2.3.13
OGNL
全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。
使用OGNL表达式的主要作用是简化访问对象中的属性值,Struts 2的标签中使用的就是OGNL表达式。
OGNL表达式的计算是围绕OGNL上下文进行的。
OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。
上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”
漏洞原理
如果在配置 Action 中 Result 时使用了重定向类型,并且还使用 {param_name} 作为重定向变量,当触发 redirect 类型返回时,Struts2 获取使用 {name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。
调用链
findtxet调用getDefaultMessage函数,在这个函数里面调用了TextParseUtil.translateVariables在TextParseUtil.translateVariables方法中存在安全漏洞,在TextParseUtil.java中return parser调用了ognl的方法
利用方式有很多种,表单提交,url注入等.
修复
升级XWork 2.0.4版本,更改OGNL 解析方式.