官方给出的报告:https://cwiki.apache.org/confluence/display/WW/S2-048
从文档里可以看出 大概是struts2和struts1的插件struts2-struts1-plugin-xxxx.jar出的问题。
漏洞演示可以直接拿struts2.3.x官方的showcase样本。
看一下问题所在
messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " added successfully"));
这段代码出现在org.apache.struts2.showcase.integration.SaveGangsterAction类中的execute方法
add方法中传了一个ActionMessage对象。其中构造方法内的gform对象name属性可控。
这是该action的xml配置
saveGangster的action对应着org.apache.struts2.s1.Struts1Action类
ActionMessage被带入到了actionsupport的getText方法,而ActionSupport.getText()会执行ognl表达式
把showcase这个demo放到tomcat里来测试一遍
返回的内容正常解析了ognl
${#a=new java.lang.ProcessBuilder("calc").start()}
执行以上ognl表达式成功弹出计算器
用java写了一个批量检测的小程序,把网址放在url.txt里
执行java -jar s2-048.jar即可检测
s2-048.zip