TIP1
當(dāng)我們注射的時(shí)候,判斷注入
http://site/script?id=10
http://site/script?id=11-1 # 相當(dāng)于 id=10
http://site/script?id=(select 10) # 相當(dāng)于 id=10
http://site/script?id=10 and 1=1 #失敗
通過判斷可發(fā)現(xiàn)and和or被過濾
http://site/script?id=10– # 失敗
http://site/script?id=10;– #失敗
http://site/script?id=10);– #失敗
http://site/script?id=10)subquery;– #失敗
你可以用burp的intruder的字典跑,但是仍然失敗。
這里可以用到SQL語句的case when …then … else … end語句
CASE WHEN語句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型數(shù)據(jù)庫都受到支持,是標(biāo)準(zhǔn)的SQL語句。
可以這樣子理解:CASE… WHEN… THEN …ELSE …END
CASE WHEN 語法有兩種情況:
第一種是CASE 后面不帶表達(dá)式的;
CASE WHEN expression THEN 操作1
WHEN expression THEN 操作2
.......
ELSE 操作n
END
第二種是CASE 后面帶表達(dá)式的(而此時(shí)WHEN 后面的則是該表達(dá)式可能的值),通用。
CASE expression
WHEN expression值1 THEN 操作1
WHEN expression值2 THEN 操作2
.......
ELSE 操作n
END
http://host/script?id=11-(case when 1=1 then 1 else 0 end)
用1=1跟1=2測(cè)試
http://host/script?id=10 # 當(dāng)條件為真的時(shí)候
http://host/script?id=11 # 當(dāng)條件為假的時(shí)候
可以很明顯的看到返回不同,然后可以判斷注入。那么怎么能讓sqlmap去識(shí)別呢?
Sqlmap默認(rèn)是自己尋找注入點(diǎn)的,但是你加上一個(gè)*,可以引導(dǎo)他。
語句
sqlmap.py -u http://host/script?id=11-(case when 1=1星號(hào) then 1)
注入最頭痛的就是遇到過濾,sqlmap提供了字符轉(zhuǎn)換的功能
“–tamper=between”當(dāng)然自己可以改寫轉(zhuǎn)換內(nèi)容,文件在/tamper目錄下。
關(guān)于post注入 sqlmap可以用-r參數(shù) 加載數(shù)據(jù)包
sqlmap.py -r post.txt
繼續(xù)補(bǔ)充一點(diǎn): having xor等邏輯符號(hào)也可以判斷注入。
TIP2
POST注入
有兩種方法來進(jìn)行post注入,一種是使用--data參數(shù),將post的key和value用類似GET方式來提交。二是使用-r參數(shù),sqlmap讀取用戶抓到的POST請(qǐng)求包,來進(jìn)行POST注入檢測(cè)。
查看payload
之前一直是加本地代理,然后用burpsuit來看sqlmap的payload,到現(xiàn)在才發(fā)現(xiàn)用-v參數(shù)就可以實(shí)現(xiàn)。一直認(rèn)為-v實(shí)現(xiàn)的只是控制警告,debug信息級(jí)別。實(shí)際上使用-v 3就可以顯示注入的payload,4,5,6還可以顯示HTTP請(qǐng)求,HTTP響應(yīng)頭和頁面。
使用google搜索
sqlmap可以測(cè)試google搜索結(jié)果中的sql注入,很強(qiáng)大的功能吧。使用方法是參數(shù)-g。不過感覺實(shí)際使用中這個(gè)用的還是很少的。
請(qǐng)求延時(shí)
在注入過程中請(qǐng)求太頻繁的話可能會(huì)被防火墻攔截,這時(shí)候--delay參數(shù)就起作用了??梢栽O(shè)定兩次HTTP請(qǐng)求間的延時(shí)。有的web程序會(huì)在多次錯(cuò)誤訪問后屏蔽所有請(qǐng)求,這樣就導(dǎo)致之后所有的測(cè)試無法進(jìn)行,繞過這個(gè)策略可以使用--safe-url,每隔一段時(shí)間去訪問一個(gè)正常的頁面。
偽靜態(tài)頁面
有些web服務(wù)器進(jìn)行了url rewrite或者網(wǎng)站是偽靜態(tài)的,無法直接提供測(cè)試參數(shù),這樣子可以使用*來代替要測(cè)試的參數(shù)。
執(zhí)行系統(tǒng)命令
當(dāng)數(shù)據(jù)庫支持,并且當(dāng)前用戶有權(quán)限的時(shí)候,可以執(zhí)行系統(tǒng)命令,使用--os-cmd或者--os-shell,具體的講,當(dāng)可以執(zhí)行多語句的時(shí)候,會(huì)嘗試用UDF(MySQL,PostgrepSQL)或者xp_cmdshell(MSSQL)來執(zhí)行系統(tǒng)命令。不能執(zhí)行多語句時(shí),仍然會(huì)嘗試創(chuàng)建一個(gè)webshell來執(zhí)行語句,這時(shí)候就需要web的絕對(duì)路徑了??傮w來說,成功率偏低,不過個(gè)人也有成功的經(jīng)驗(yàn)~
測(cè)試等級(jí)
sqlmap使用--level參數(shù)來進(jìn)行不同全面性的測(cè)試,默認(rèn)為1,不同的參數(shù)影響了使用哪些payload,2時(shí)會(huì)進(jìn)行cookie注入檢測(cè),3時(shí)會(huì)進(jìn)行useragent檢測(cè)。
TIP3
SQLMAP 項(xiàng)目官方WIKI(詳盡) 地址
更多信息請(qǐng)查看IT技術(shù)專欄