一寨辩、WAF及繞過WAF原理介紹
WAF的定義:
waf禁舷,即web應(yīng)用防火墻违霞,是通過執(zhí)行一系列針對http/https的安全策略來專門位web應(yīng)用提供保護(hù)的一款產(chǎn)品亩码。
waf主要是通過內(nèi)置的很多安全規(guī)則來進(jìn)行放域震蒋,會對每個請求的內(nèi)容根據(jù)安全規(guī)則進(jìn)行檢測并對不符合安全規(guī)則的做出響應(yīng)的防御處理茸塞,從未保證web應(yīng)用的安全性和合法性。
WAF是如何工作的查剖?
規(guī)則庫:使用一組規(guī)則來區(qū)分正常的請求和惡意的請求钾虐。
自學(xué)習(xí):有些WAF會使用學(xué)習(xí)模式通過了解用戶行為自動添加規(guī)則。
WAF的分類:
硬件waf笋庄,軟件waf效扫,云waf倔监,網(wǎng)站內(nèi)置waf類。
WAF繞過的原理:
1菌仁、一個何個的waf必須做好業(yè)務(wù)和安全的平衡浩习,這個平衡不好就有可能被繞過或者是影響網(wǎng)站的業(yè)務(wù)。
2济丘、waf為了考慮通用性的問題谱秽,無法100%覆蓋某些語言、中間件摹迷、數(shù)據(jù)庫的特性疟赊;
3、硬件waf自身存在漏洞泪掀;
WAF繞過的幾個維度:
1听绳、架構(gòu)層面
2、協(xié)議异赫、中間件椅挣、系統(tǒng)/數(shù)據(jù)庫/編程語言
3、規(guī)則層面
二塔拳、手工及攻擊識別WAF
1鼠证、手工識別的方式通常是通過訪問不存在的頁面或帶入惡意的字符,觸發(fā)WAF的防護(hù)規(guī)則靠抑;
2量九、查看服務(wù)端攔截后返回的信息,也可以通過網(wǎng)頁的頭部(header)信息進(jìn)行判斷颂碧;
方法:
1荠列、構(gòu)造惡意請求字符分析網(wǎng)站響應(yīng)或敏感頁面
2、發(fā)起http請求包载城,分析響應(yīng)數(shù)據(jù)肌似;
3、通過訪問不存在的頁面來分析頁面提示
識別是什么waf
python3 sqlmap.py -u "http://www.chaitin.com"
三诉瓦、繞過WAF的常見方式
1川队、pipline繞過。
pipline繞過是利用了http的管道化技術(shù)睬澡,當(dāng)發(fā)起http請求固额,目標(biāo)返回該請求的響應(yīng)。WAF也同樣如此煞聪,我們使用管道化連接可以在發(fā)起請求的同時發(fā)送多個HTTP的請求 斗躏,一旦WAF僅判斷第一個請求那么就可以成功繞過WAF。
pipline繞過首先要進(jìn)行兩點(diǎn)設(shè)置:
(1)burpsuite中去掉“update content-length”昔脯。
(2)將http請求包的連接狀態(tài)改為持節(jié)連接的狀態(tài)瑟捣,即Connection:keep-alive
(3)進(jìn)行完前兩點(diǎn)設(shè)置后馋艺,開始下一步操作栅干,將請求包復(fù)制到uid=1后面的位置迈套,中間不需要空格。測試過程中服務(wù)端驗(yàn)證只需要帶----cookie即可碱鳞,也就是第一個請求報(bào)帶即可桑李。發(fā)送修改后的雙請求,返回響應(yīng)也是兩次窿给,大多數(shù)waf只檢測第一個請求贵白,忽略第二個請求,從而繞過WAF的檢測崩泡。
2禁荒、寬字節(jié)注入
款自己注入主要是源于程序員設(shè)置數(shù)據(jù)庫編碼與php編碼設(shè)置為不同的兩個編碼,這樣就可能會產(chǎn)生寬字節(jié)注入角撞。程序員設(shè)置mysql連接時錯誤配置為:set character_set_client=gbk
php代碼:mysql_query("SET NAMES 'gbk' ");如果數(shù)據(jù)庫編碼與PHP編碼設(shè)置為不同的兩個編碼那么就有可能產(chǎn)生寬字節(jié)注入呛伴。
(1)正常情況下當(dāng)GPV開啟或使用用addslashes函數(shù)過濾get或post提交的參數(shù)時,黑客使用的單引號‘就會被轉(zhuǎn)義為:\’
(2)但如果存在款自己注入谒所,我們輸入%df%27時首先經(jīng)過上面提到的單引號轉(zhuǎn)義變成了%df%5c%27热康,之后在數(shù)據(jù)庫查詢前由于使用了GBK多字節(jié)編碼,即在漢字編碼范圍內(nèi)兩個字節(jié)會被編碼為一個漢字劣领。然后mysql服務(wù)器會對查詢語句進(jìn)行GBK編碼姐军,從而導(dǎo)致了注入漏洞。
3尖淘、HTTP協(xié)議覆蓋繞過
WAF在對content-type進(jìn)行檢查時奕锌,對multipart/from-data類型的檢測比較少,或者把它當(dāng)作文件上傳進(jìn)行檢查村生,我們可以利用這一特性對WAF進(jìn)行繞過惊暴。
方法:
通過狗仔multipart/from-data類型的方式繞過檢測。構(gòu)造內(nèi)容實(shí)例:8765255278935梆造,最后一--分隔符--結(jié)尾缴守,表示請求體結(jié)束。
4镇辉、分塊傳輸繞過
介紹:
分塊傳輸編碼是超文本傳輸協(xié)議(HTTP)中的一種數(shù)據(jù)傳輸機(jī)制屡穗,允許HTTP由內(nèi)網(wǎng)服務(wù)器發(fā)送給客戶端應(yīng)用(通常是網(wǎng)頁瀏覽器)的數(shù)據(jù)可以分成多個部分。分塊傳輸編碼旨在HTTP協(xié)議1.1版本(HTTP/1.1)中提供忽肛。
原理:
(1)利用了HTTP分塊傳輸編碼的特性村砂,將傳輸查詢語句分塊,從而繞過WAF的檢查屹逛。
(2)首先础废,根據(jù)分塊傳輸?shù)母袷窖绰睿謮K傳輸需要在請求頭添加“Transfer-Encoding”,其值設(shè)為“chunked”评腺,表示將用chunked編碼傳輸內(nèi)容帘瞭。設(shè)置成功后就可以進(jìn)行多個分塊數(shù)據(jù)的傳輸,消息體由數(shù)量未定的塊組成蒿讥,并以最后一個大小為0的塊為結(jié)束蝶念,最后用長度為的塊表示終止塊。
(3)最重要的是配置分塊的數(shù)據(jù)芋绸,長度值必須為16進(jìn)制媒殉,長度值為一行,數(shù)據(jù)值為一行摔敛。
代碼審計(jì)-SQL注入
RuoYi4.2版本代碼審計(jì)? ? ??