[漏洞复现]泛微e-mobile cdnfile文件读取漏洞分析复现

news2024/11/13 12:48:35

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。

免责声明

本号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

漏洞简介

e-mobile可满足企业日常管理中的绝大部分管理需求, 诸如市场销售、项目、采购、研发、客服、财务、人事、行政等;同时e-mobile可帮助企业实现面向不同用户量身定制的移动办公入口,包括企业员工、供应商、代理商、 合作伙伴、投资费以及终端客户等整个供应链条上的关系主体,满足为企业全方位的移动办公需求。泛微e-mobile为企业提供成熟APP应用库,各应用组件之间通过信息调用实现高效协同。移动应用前台统一展现操作,后台多个系统支持,用户无需切换登陆,即可在移动终端实现 跨平台、跨系统的统一操作。攻击者可通过文件读取漏洞获取敏感信息。

漏洞分析

截取了下相关代码分析。

@GetMapping({"/client/cdnfile/**"})
@ResponseBody
public void getCdnFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
	String servletPath = StringUtils.defaultIfBlank(request.getServletPath(), "");  // 获取请求路径,没有则为空
	if (servletPath.contains("?")) {
		servletPath = servletPath.split("?")[0];
	}  // 判断是否传参,只获取路径部分

	if (servletPath.contains("/client/cdnfile/")) {
		servletPath = servletPath.substring(servletPath.indexOf("/client/cdnfile/"));
		servletPath = servletPath.replace("/client/cdnfile/", "");
	}  // 截去/client/cdnfile/部分

	File file = null;
	String fileName = "";
	String mimeType = "";
	if (servletPath.startsWith("3")) {  // 处理3开头的路径,基于32位fileId获取文件
		String fileId = servletPath.substring(1, 33);
		SysBaseFileEntity baseFile = FileUtils.getFileInfo(fileId);
		if (baseFile == null) {
			response.sendRedirect("/common/images/ecfiledownloadpd.png");
			return;
		}

		if (StringUtils.isNotBlank(baseFile.getPath())) {
			file = new File(baseFile.getPath());
		}

		if ((file == null || !file.exists()) && (new Integer(1)).equals(baseFile.getBackupStatus()) && StringUtils.isNotBlank(baseFile.getBackupPath())) {
			file = new File(baseFile.getBackupPath());
		}

		fileName = StringUtils.defaultIfBlank(baseFile.getName(), "");
		mimeType = baseFile.getContentType();
	} else {
		if (servletPath.startsWith("1")) {  // 处理1开头的路径,替换处理/
			if (!servletPath.contains("7upload")) {
				servletPath = servletPath.replaceFirst("/", ":\\\\");
			}

			servletPath = servletPath.replaceAll("/", "\\\\");
		}

		servletPath = servletPath.substring(1);  // 删出第一个字符
		if (servletPath.startsWith("7upload")) {  // 如果路径以 7upload 开头,则获取上传路径的配置,并拼接完整路径
			SysBaseSettingEntity baseSetting = SysCacheUtils.getBaseSetting();
			servletPath = servletPath.replaceFirst("7upload", "");
			servletPath = baseSetting.getUploadPath() + servletPath;
		} else if (servletPath.contains(":") && !servletPath.contains(":\\")) {
			servletPath = servletPath.replace(":", ":\\");
		}

		file = new File(servletPath);
		if (file.isDirectory()) {  // 如果是目录,则获取该目录下的第一个文件进行处理
			File[] fs = file.listFiles();
			if (fs.length > 0) {
				file = fs[0];
			}
		}

		fileName = StringUtils.defaultIfBlank(file.getName(), "");
		Path path = file.toPath();
		mimeType = Files.probeContentType(path);
	}

	if (StringUtils.isBlank(request.getHeader("Range"))) {  // 处理文件下载
		FileUtils.normalRender(request, response, new FileInputStream(file), file.length(), fileName, mimeType);
	} else {
		FileUtils.rangeRender(request, response, new FileInputStream(file), file.length(), fileName, mimeType);
	}

	if (file.getAbsolutePath().startsWith(FileUtils.getTempFileDir())) {  // 清理文件
		org.apache.commons.io.FileUtils.forceDelete(file.getParentFile());
	}

}

漏洞复现

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金属3D打印经济效益高吗?

在我国制造业迈向产业升级的重要阶段,3D打印技术如同一股强劲的新风,特别是在航空航天、汽车、生物医疗等领域,已成为复杂构件制造的“明星”技术。那么,对于众多生产厂家而言,金属3D打印的经济账到底怎么算&#xff1…

永磁同步电机谐波抑制算法(8)——基于神经网络的傻瓜式(无需知道谐波频率)谐波抑制

1.简介 前面的内容已经介绍了很多谐波抑制的方法:多同步、PIR、陷波器等等。也介绍了比较多的谐波来源:死区(5、7、11、13等次相电流谐波)、绕组不对称(基波不等幅值、3次相电流谐波)等等。 上述的方法都…

基于springboot+vue超市管理系统

基于springbootvue超市管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本无人超市管理系统就是在这样的大环境下诞生,其可以帮助使用者在…

进程间关系与进程守护

一、进程组 1、理解 每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组, 进程组是一个或者多个进程的集合, 一个进程组可以包含多个进程。 每一个进程组也有一个唯一的进程组 ID(PGID), 并且这个 PGID 类似于进程 ID, 同样…

不只是模仿,伯克利新研究赋予机器人跨实体自主学习的能力,零样本时代已来

导读: 在当今科技飞速发展的时代,机器人技术正不断地给我们带来惊喜和变革。2024 年 9 月,一篇来自加州大学伯克利分校、丰田研究所和Physical Intelligence 的研究论文RoVi-Aug: Robot and Viewpoint Augmentation for Cross-Embodiment Rob…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…

基于ACMEv2协议的免费SSL证书申请-支持Let‘s Encrypt/Google/ZeroSSL

项目&#xff1a;https://github.com/cook-code-jazor/acmex 非开源&#xff0c;使用webui管理证书的申请&#xff0c;所有文件本地化存储&#xff0c;支持windows/linux/osx。 证书申请直连ACMEv2服务商&#xff0c;没有任何中间接口&#xff0c;支持Lets Encrypt/Google/Ze…

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】

在上一篇文章中&#xff0c;我们已经理顺了实现流程。 接下来&#xff0c;我们将在UE5中&#xff0c;从头开始一步一步地构建一次流程。 通过这种方法&#xff0c;我们可以借助一个熟悉的开发环境&#xff0c;使那些对着色器不太熟悉的朋友们更好地理解着色器的工作原理。 这篇…

百望云生态伙伴大会在北京、深圳、昆明三地举办,携手共赢数字化未来!

伴随着金税四期数电票、乐企加速扩围&#xff0c;激发了企业大量的财税数字化转型的需求&#xff0c;为财税服务市场注入了前所有未有的活力。2024年7月9日&#xff0c;百望云成功登陆港交所&#xff0c;成为港股“电子发票第一股”&#xff0c;加码财税业务布局&#xff0c;纵…

Spring Boot利用dag加速Spring beans初始化

1.什么是Dag&#xff1f; 有向无环图(Directed Acyclic Graph)&#xff0c;简称DAG&#xff0c;是一种有向图&#xff0c;其中没有从节点出发经过若干条边后再回到该节点的路径。换句话说&#xff0c;DAG中不存在环路。这种数据结构常用于表示并解决具有依赖关系的问题。 DAG的…

生信初学者教程(一):欢迎

文章目录 配套数据R包版本安装包版权答疑在生物信息学(生信)领域,随着高通量测序技术的不断发展,大量数据涌现,为科研工作者提供了丰富的资源。然而,对于初学者而言,如何从海量的数据中挖掘有价值的信息,并开展一个完整的生信项目,仍然是一个挑战。目前,市面上针对初…

网络层协议 ——— IP协议

文章目录 概念协议头格式分片与组装网段划分IP地址的数量限制私有IP和公有IP路由 概念 IP协议&#xff08;Internet Protocol&#xff09;是互联网上使用的一种网络协议&#xff0c;也是互联网的基础协议之一。它属于TCP/IP体系中的网络层协议&#xff0c;主要负责将数据包从源…

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs&#xff0c;但它计算并存储协方差矩阵导数的最小特征值&…

尚硅谷javaweb笔记

1、基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站&#xff1b; 提供给所有人看的数据始终会发生变化&…

【C高级】有关shell脚本的一些练习

目录 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 2、写一个脚本&#xff0c;包含以下内容&#xff1a; 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 1、在家目录下创建目录文件&#xff0c;dir 2、dir下创建dir1和dir2 …

计算机毕业设计 基于Python的汽车销售管理系统 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

how can I train a OpenAI fine tuned model with more prompts

题意&#xff1a;我如何使用更多提示来训练一个 OpenAI 微调模型&#xff1f; 问题背景&#xff1a; I fine-tuned OpenAI model with some prompts following this documentation it succeeded and created a new model in the playground. How I can retrain (fine-tune) th…

Linux Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 注&#xff1a;本章内容全部基于Centos7进行操作&#xff0c;查阅本章节内容前请确保您当前所在的Linux系统版本&#xff0c;且具有足够的权限执行操作。 一、命令模式快捷键 二…

Unity引擎绘制多边形属性图

大家好&#xff0c;我是阿赵   在制作游戏的时候&#xff0c;经常会遇到需要绘制多边形属性图的需求&#xff0c;比如这种效果&#xff1a; 可以根据需要的属性的数量变化多边形的边数&#xff0c;然后每一个顶点从中心点开始到多边形的顶点的长度代表了该属性的强度&#xf…