美文网首页
Struts2-057远程代码执行漏洞(s2-057)复现

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

作者: 5f4120c4213b | 来源:发表于2020-12-10 18:11 被阅读0次

    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)复现

          本文链接:https://www.haomeiwen.com/subject/wzslgktx.html