SQL注入專題(三)

一、WAF及繞過WAF原理介紹

WAF的定義:

waf,即web應(yīng)用防火墻,是通過執(zhí)行一系列針對(duì)http/https的安全策略來專門位web應(yīng)用提供保護(hù)的一款產(chǎn)品。

waf主要是通過內(nèi)置的很多安全規(guī)則來進(jìn)行放域,會(huì)對(duì)每個(gè)請(qǐng)求的內(nèi)容根據(jù)安全規(guī)則進(jìn)行檢測(cè)并對(duì)不符合安全規(guī)則的做出響應(yīng)的防御處理,從未保證web應(yīng)用的安全性和合法性。

WAF是如何工作的?

規(guī)則庫(kù):使用一組規(guī)則來區(qū)分正常的請(qǐng)求和惡意的請(qǐng)求。

自學(xué)習(xí):有些WAF會(huì)使用學(xué)習(xí)模式通過了解用戶行為自動(dòng)添加規(guī)則。

WAF的分類:

硬件waf,軟件waf,云waf,網(wǎng)站內(nèi)置waf類。

WAF繞過的原理:

1、一個(gè)何個(gè)的waf必須做好業(yè)務(wù)和安全的平衡,這個(gè)平衡不好就有可能被繞過或者是影響網(wǎng)站的業(yè)務(wù)。

2、waf為了考慮通用性的問題,無(wú)法100%覆蓋某些語(yǔ)言、中間件、數(shù)據(jù)庫(kù)的特性;

3、硬件waf自身存在漏洞;

WAF繞過的幾個(gè)維度:

1、架構(gòu)層面

2、協(xié)議、中間件、系統(tǒng)/數(shù)據(jù)庫(kù)/編程語(yǔ)言

3、規(guī)則層面

二、手工及攻擊識(shí)別WAF

1、手工識(shí)別的方式通常是通過訪問不存在的頁(yè)面或帶入惡意的字符,觸發(fā)WAF的防護(hù)規(guī)則;

2、查看服務(wù)端攔截后返回的信息,也可以通過網(wǎng)頁(yè)的頭部(header)信息進(jìn)行判斷;

方法:

1、構(gòu)造惡意請(qǐng)求字符分析網(wǎng)站響應(yīng)或敏感頁(yè)面

2、發(fā)起http請(qǐng)求包,分析響應(yīng)數(shù)據(jù);

3、通過訪問不存在的頁(yè)面來分析頁(yè)面提示

識(shí)別是什么waf

python3 sqlmap.py -u "http://www.chaitin.com"

三、繞過WAF的常見方式

1、pipline繞過。

pipline繞過是利用了http的管道化技術(shù),當(dāng)發(fā)起http請(qǐng)求,目標(biāo)返回該請(qǐng)求的響應(yīng)。WAF也同樣如此,我們使用管道化連接可以在發(fā)起請(qǐng)求的同時(shí)發(fā)送多個(gè)HTTP的請(qǐng)求 ,一旦WAF僅判斷第一個(gè)請(qǐng)求那么就可以成功繞過WAF。

pipline繞過首先要進(jìn)行兩點(diǎn)設(shè)置:

(1)burpsuite中去掉“update content-length”。

(2)將http請(qǐng)求包的連接狀態(tài)改為持節(jié)連接的狀態(tài),即Connection:keep-alive

(3)進(jìn)行完前兩點(diǎn)設(shè)置后,開始下一步操作,將請(qǐng)求包復(fù)制到uid=1后面的位置,中間不需要空格。測(cè)試過程中服務(wù)端驗(yàn)證只需要帶----cookie即可,也就是第一個(gè)請(qǐng)求報(bào)帶即可。發(fā)送修改后的雙請(qǐng)求,返回響應(yīng)也是兩次,大多數(shù)waf只檢測(cè)第一個(gè)請(qǐng)求,忽略第二個(gè)請(qǐng)求,從而繞過WAF的檢測(cè)。

2、寬字節(jié)注入

款自己注入主要是源于程序員設(shè)置數(shù)據(jù)庫(kù)編碼與php編碼設(shè)置為不同的兩個(gè)編碼,這樣就可能會(huì)產(chǎn)生寬字節(jié)注入。程序員設(shè)置mysql連接時(shí)錯(cuò)誤配置為:set character_set_client=gbk

php代碼:mysql_query("SET NAMES 'gbk' ");如果數(shù)據(jù)庫(kù)編碼與PHP編碼設(shè)置為不同的兩個(gè)編碼那么就有可能產(chǎn)生寬字節(jié)注入。

(1)正常情況下當(dāng)GPV開啟或使用用addslashes函數(shù)過濾get或post提交的參數(shù)時(shí),黑客使用的單引號(hào)‘就會(huì)被轉(zhuǎn)義為:\’

(2)但如果存在款自己注入,我們輸入%df%27時(shí)首先經(jīng)過上面提到的單引號(hào)轉(zhuǎn)義變成了%df%5c%27,之后在數(shù)據(jù)庫(kù)查詢前由于使用了GBK多字節(jié)編碼,即在漢字編碼范圍內(nèi)兩個(gè)字節(jié)會(huì)被編碼為一個(gè)漢字。然后mysql服務(wù)器會(huì)對(duì)查詢語(yǔ)句進(jìn)行GBK編碼,從而導(dǎo)致了注入漏洞。

3、HTTP協(xié)議覆蓋繞過

WAF在對(duì)content-type進(jìn)行檢查時(shí),對(duì)multipart/from-data類型的檢測(cè)比較少,或者把它當(dāng)作文件上傳進(jìn)行檢查,我們可以利用這一特性對(duì)WAF進(jìn)行繞過。

方法:

通過狗仔multipart/from-data類型的方式繞過檢測(cè)。構(gòu)造內(nèi)容實(shí)例:8765255278935,最后一--分隔符--結(jié)尾,表示請(qǐng)求體結(jié)束。

4、分塊傳輸繞過

介紹:

分塊傳輸編碼是超文本傳輸協(xié)議(HTTP)中的一種數(shù)據(jù)傳輸機(jī)制,允許HTTP由內(nèi)網(wǎng)服務(wù)器發(fā)送給客戶端應(yīng)用(通常是網(wǎng)頁(yè)瀏覽器)的數(shù)據(jù)可以分成多個(gè)部分。分塊傳輸編碼旨在HTTP協(xié)議1.1版本(HTTP/1.1)中提供。

原理:

(1)利用了HTTP分塊傳輸編碼的特性,將傳輸查詢語(yǔ)句分塊,從而繞過WAF的檢查。

(2)首先,根據(jù)分塊傳輸?shù)母袷?,分塊傳輸需要在請(qǐng)求頭添加“Transfer-Encoding”,其值設(shè)為“chunked”,表示將用chunked編碼傳輸內(nèi)容。設(shè)置成功后就可以進(jìn)行多個(gè)分塊數(shù)據(jù)的傳輸,消息體由數(shù)量未定的塊組成,并以最后一個(gè)大小為0的塊為結(jié)束,最后用長(zhǎng)度為的塊表示終止塊。

(3)最重要的是配置分塊的數(shù)據(jù),長(zhǎng)度值必須為16進(jìn)制,長(zhǎng)度值為一行,數(shù)據(jù)值為一行。


代碼審計(jì)-SQL注入

RuoYi4.2版本代碼審計(jì)? ? ??

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 前言: Android App安全測(cè)試先告一段落,雖然感覺還有很多需要學(xué)習(xí)的地方,畢竟我主要還是對(duì)Web方向感興趣...
    book4yi閱讀 4,178評(píng)論 0 1
  • 一、WAF介紹 傳統(tǒng)防火墻只是在第三層(網(wǎng)絡(luò)層)有效的阻斷一些數(shù)據(jù)包;而隨著web應(yīng)用的功能越來越豐富的時(shí)候,We...
    卿酌南燭_b805閱讀 1,127評(píng)論 0 0
  • 繞過waf的方法:1.白名單、2改變請(qǐng)求方法、3.大小寫繞過 、4.url編碼繞過、5.組合繞過、6.復(fù)參數(shù)繞過7...
    皮蛋是個(gè)臭蛋閱讀 1,493評(píng)論 0 0
  • 這是個(gè)筆記,沒自己試過,就是漲姿勢(shì)的。很好的資料:隨筆分類 - sqli-labs通關(guān)詳解[%5Bhttps://...
    yumiii_閱讀 2,786評(píng)論 2 10
  • 3.1.1 注入分類 ??SQL注入是一種代碼注入技術(shù),用于攻擊數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用程序。 在應(yīng)用程序中,如果沒有做恰當(dāng)...
    最酷的崽_ec69閱讀 511評(píng)論 0 0

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