Struts2 历史漏洞分析 — S2-048

官方给出的报告:https://cwiki.apache.org/confluence/display/WW/S2-048

从文档里可以看出 大概是struts2和struts1的插件struts2-struts1-plugin-xxxx.jar出的问题。

漏洞演示可以直接拿struts2.3.x官方的showcase样本。

~$8%GZF6I{S0MW44GT9O4`B.png

看一下问题所在

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即可检测
M1}4A2X}~MR6RU9YKA124%G.png
s2-048.zip

发表留言

如未标注转载则文章均为本人原创,转载前先吱声,未授权转载我就锤爆你狗头。

人生在世,错别字在所难免,无需纠正。