Struts2-057远程代码执行漏洞(s2-057)复现

0x00简介

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

image

0x01漏洞概述

漏洞产生于网站配置XML时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。同样也可能因为url标签没有设置value和action的值,并且上层动作并没有设置或使用通配符namespace,从而导致远程代码执行漏洞的发生。

0x02影响版本

Apache Struts 2.3–Struts 2.3.34

Apache Struts 2.5–Struts 2.5.16

0x03环境搭建

1. 这里使用vulhub的docker环境进行搭建,vulhub下载地址:

https://github.com/vulhub/vulhub

image

2. 下载完成后安装docker-compose //安装方法自行搜索,安装完成后进入vulhub cd /home/demo/vulhub-master/struts2/s2-057/目录下使用

docker-compose up -d 拉取镜像

image

3.底下显示done表示拉取成功,在浏览器访问http://IP:8080/struts2-showcase可以看到Struts2测试页面表示搭建成功。

image

4.漏洞利用条件

4.1 alwaysSelectFullNamespace被设置为true,此时namespace的值是从URL中获取的。URL是可控的,所以namespace也是可控的。

4.2 action元素没有名称空间属性集,或者使用通配符。该名称空间将由用户从URL传递并解析为OGNL表达式,最终导致远程代码执行的脆弱性。

0x04漏洞复现

1.在url处输入http://IP:8080/struts2-showcase/${(123+123)}/actionChain1.action后刷新可以看到中间数字位置相加了。

image
image

2.修改中间${(123+123)}位置的payload替换用代码执行编写成命令执行的exp,这一步使用burp抓包修改可以直观的看到结果

Payload: //注:payload需要使用url编码

image

3.抓包发送到Repeater(重放)模块,在url加上url编码的paylaod,然后发送即可在头部看到回显结果

image
image
image

0x05修复建议

1. 临时解决方案:上层动作配置中没有设置或使用通配符namespace时,验证所有XML配置中的namespace,同时在JSP中验证所有url标签的value和action。

2. 官方已发布最新版本来修复此漏洞,受影响的用户请尽快升级到Apache Struts 2.3.35 或 Struts 2.5.17版

你可能感兴趣的:(Struts2-057远程代码执行漏洞(s2-057)复现)