复现Struts2-048高危漏洞

这个漏洞开始已经是之前的事情了,今天有时间复现了一下。一般漏洞复现需要环境和exp,这次我们从搭建环境开始,不要去网上直接搞。

环境搭建

操作系统我们使用了Winxp,

大家都知道struts2是基于java的,首先我们需要java环境,具体就是jdk和jre的安装。具体网上都可以找到。最后有如下效果。

复现Struts2-048高危漏洞_第1张图片
复现Struts2-048高危漏洞_第2张图片

接下来需要下载tomcat,http://tomcat.apache.org/download-70.cgi 这里可以下载到。解压下载的zip,运行bin/startup.bat,tomcat就运行起来了。效果如下

复现Struts2-048高危漏洞_第3张图片

接下来我们需要下载struts2,http://mirrors.opencas.org/apache/struts/2.3.32/struts-2.3.32-apps.zip

只要是2.3.*版本就可以,apps版本可以快速配置。将zip解压到tomcat的webapps目录下,运行tomcat,webapps下的war包就会自动解压。

访问http://192.168.198.129:8080/struts2-showcase/index.action 效果如下

漏洞的攻击

访问http://192.168.198.129:8080/struts2-showcase/integration/editGangster.action

开启burp抓包,表单随便输入一点,提交。请求头如下

复现Struts2-048高危漏洞_第4张图片

我们修改请求头,如下图

复现Struts2-048高危漏洞_第5张图片

得到回显,已经命令执行了,如下图

复现Struts2-048高危漏洞_第6张图片

具体的exp,poc可以通过github搜索,如下图

复现Struts2-048高危漏洞_第7张图片

漏洞成因

复现Struts2-048高危漏洞_第8张图片

漏洞出在org.apache.struts2.s1.Struts1Action类的execute方法中,

复现Struts2-048高危漏洞_第9张图片

首先这里ActionForward forward = action.execute(mapping, actionForm, request,

response);会把表单的请求处理回显给客户端,

然后addActionMessage(getText(msg.getKey(),Arrays.asList(msg.getValues())));

这里又调用了getText方法会把action messages传递给com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage ,

最后在其中又调用了com.opensymphony.xwork2.util.TextParseUtil.translateVariables,它用来调用OGNL 表达式用处理字符串表达式。漏洞利用OGNL表达式执行任意命令。

解决方案

不启用struts2-struts1-plugin插件

建议升级到最新版本2.5.10.1

开发者通过使用resource keys替代将原始消息直接传递给ActionMessage的方式。如下所示

messages.add(“msg”, newActionMessage(“struts1.gangsterAdded”, gform.getName()));

一定不要使用如下的方式

messages.add(“msg”, newActionMessage(“Gangster ” + gform.getName() + ” was added”));

漏洞影响

影响Apache Struts 2.3.x系列中启用了struts2-struts1-plugin插件的版本,某云的检测系统在1902个网站中只检查出8个

复现Struts2-048高危漏洞_第10张图片

如果想要了解更多网络空间安全知识,请访问 网络安全通,或者搜索 SecTown 。

你可能感兴趣的:(复现Struts2-048高危漏洞)