Struts2-052漏洞示例分析

王林
Freigeben: 2023-05-13 11:25:06
nach vorne
1238 Leute haben es durchsucht

前言

2017 年 9 月 5 日,由国外安全研究组织 lgtm.com 的安全研究人员发现的严重漏洞在Apache Struts 2官方发布,漏洞编号为 CVE-2017-9805(S2-052), 攻击者可以传入精心构造的xml数据,远程命令执行。
Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程命令执行。
利用条件:使用 REST 插件并在受影响版本范围内。
利用方式:攻击者构建恶意数据包远程利用。
影响版本:Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12

调试环境搭建

1)下载官方源码:
git clone https://github.com/apache/Struts.git
2)切换到2.5.12分支:
git checkout STRUTS_2_5_12
3) 把源码包中src/apps/rest-showcase整个文件夹拷贝出来,新建一个项目
4)用IDEA或者eclipse导入该maven项目
5) debug模式运行后就可以愉快的调试了
Struts2-052漏洞示例分析

漏洞原理分析

根据官方公告知道该漏洞出现在 XstreamHandler 类,在 struts2-rest-plugin-2.5.12.jar 包内。
于是查看该类,该类中有一个toObject方法,其作用就是对xml内容进行反序列化。
Struts2-052漏洞示例分析
先在此方法内打一个断点,然后构造数据包
Struts2-052漏洞示例分析
发送数据包后,会跳到断点处,此时,看到是上层调用栈中是ContentTypeInterceptor调用了该方法
Struts2-052漏洞示例分析
ContentTypeInterceptor类中intercept方法会根据传入的Content-Type的值生成相应的对象,由于我们传入的是application/xml,所以对应生成一个xml的处理对象XStreamHandler。
继续f5,看到执行反序列化的函数unmarshal,在这个函数执行时没有进行数据安全检查,导致远程命令执行。
Struts2-052漏洞示例分析
接着进入unmarshal函数内,继续往下调试,AbstractReflectionConverter会一步步解析我们提交的xml标签和值,最终调用poc中代码
Struts2-052漏洞示例分析

漏洞复现

在页面http://localhost:8080//struts2-rest-showcase/orders/3/edit中点击Submit,
Struts2-052漏洞示例分析
拦截HTTP请求并将请求体改为POC Payload,同时将Content-Type Header改为application/xml。
payload为:

   0      false 0      /Applications/Calculator.app/Contents/MacOS/Calculator  false     java.lang.ProcessBuilder start   foo  foo      false 0 0 false  false    0         
Nach dem Login kopieren

发送请求后,弹出计算器
Struts2-052漏洞示例分析

补丁

官方补丁,官方的修复方案中, 主要就是将 xml 中的数据白名单化,把 Collection 和 Map,一些基础类,时间类放在白名单中,这样就能阻止 XStream 反序列化的过程中带入一些有害类Struts2-052漏洞示例分析

修复建议

Version 2.3.0 to 2.3.33升级到Struts 2.3.34版本
Version 2.5.0 to 2.5.12升级到Struts 2.5.13版本

Das obige ist der detaillierte Inhalt vonStruts2-052漏洞示例分析. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!