一、简介
- 该漏洞是因为
用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用OGNL表达式
(Struts框架使用OGNL作为默认的表达式语言,作用是对数据进行访问)%{value}进行解析
,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败,后端一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL表达式解析,所以可以直接构造Payload进行命令执行。
- 我们来了解以下Struts2中的
validation机制
。validation依靠validation和workflow两个拦截器
。validation
会根据配置的xml文件
创建一个特殊错误字段列表。而workflow
则会根据validation
的错误对其进行检测,如果输入有值,将会把用户带回到原先提交表单的页面,并且将值返回。在默认情况下,如果控制器没有得到任何的输入结果但是有validation验证错误。那么用户将会得到一个错误的信息提示。 - 在
webwork2.1
(一个框架)和Struts2
中存在一个altSyntax特性
,该特性允许用户提交OGNL请求
,当用户提交恶意请求表单,故意触发一个validation错误
,页面被workflow
再次返回给用户的时候,默认情况下相当于返回%{return_value}
,我们注入的恶意代码