目錄

  • WAF是什麼
  • 主流WAF有哪些?
  • WAF的分類
  • 軟件型WAF
  • 硬件型WAF
  • 基於雲WAF
  • 開源型WAF
  • 網站內置的WAF
  • IPS與IDS,防火牆與WAF之間的比較和差異
  • 防火牆功能
  • IPS入侵防禦系統
  • IDS入侵檢測系統
  • WAF
  • 對比
  • IPS與IDS
  • 防火牆與IPS / IDS
  • WAF與IPS / IDS
  • WAF檢測
  • 手工檢測
  • 工具檢測WAF
  • wafw00f
  • sqlmap
  • nmap
  • WAF進程與攔截頁面
  • D盾
  • 雲鎖
  • 阿里雲盾
  • 騰訊雲安全
  • 騰訊宙斯盾
  • 360主機衞士
  • 奇安信網站衞士
  • 網站/服務器安全狗
  • 護衞神·入侵防護系統
  • 網防G01政府網站綜合防護系統(“雲鎖”升級版)
  • UPUPW安全
  • 寶塔
  • 智創防火牆
  • 創宇盾
  • 玄武盾
  • 西數WTS-WAF
  • Naxsi WAF
  • 百度雲
  • **華為雲**
  • 網宿雲
  • 銥訊WAF
  • 安域雲WAF
  • 長亭SafeLine
  • 安恆明御WAF
  • WAF繞過
  • 域名轉換為ip
  • 分塊編碼(Transfer-Encoding)繞過WAF
  • 對抗規則繞過
  • 對關鍵字進行不同編碼
  • 對關鍵字進行大小寫變換
  • 通過其他語義相同的關鍵字替換
  • 配合Windows特性
  • 配合linux特性
  • http協議繞過
  • 更多
  • 參考



知識鋪墊

WAF是什麼

WAF,全稱為:Web Application Firewall,即 Web 應用防火牆。對此,維基百科是這麼解釋的:Web應用程序防火牆過濾,監視和阻止與Web應用程序之間的HTTP流量。WAF與常規防火牆的區別在於,WAF能夠過濾特定Web應用程序的內容,而常規防火牆則充當服務器之間的安全門。通過檢查HTTP流量,它可以防止源自Web應用程序安全漏洞的攻擊,例如SQL注入、跨站點腳本,文件包含和安全性錯誤配置。WAF具備以下特點:

  • 全面檢測WEB代碼
  • 深入檢測HTTP/HTTPS
  • 強大的特徵庫
  • 網絡層的防篡改機制

更多細節參見Web 防火牆(WAF)是什麼?和傳統防火牆區別是什麼?

一言蔽之,WAF就是部署在網站上的一個東東,之所以説它“東東”,是因為這玩意分好幾種類型。

主流WAF有哪些?

玄武盾攔截 docker push_玄武盾攔截 docker push

WAF的分類

WAF分為非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、雲WAF、軟件型WAF之類的;而嵌入型WAF指的是網站內置的WAF。非嵌入型WAF對Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web數據是已經被解析加工好的。所以非嵌入型的受攻擊機面還涉及到其他層面,而嵌入型WAF從Web容器模塊型WAF、代碼層WAF往下走,其對抗畸形報文、掃操作繞過的能力越來越強。當然,在部署維護成本方面,也是越高的。

玄武盾攔截 docker push_Web_02

軟件型WAF

以軟件的形式安裝在服務器上,可以直接檢測服務器是否存在webshell,是否有文件被創建等
D盾,雲鎖,網防G01,安全狗,護衞神,智創,懸鏡,UPUPW,安騎士

硬件型WAF

以硬件的形式部署在鏈路中,支持多種部署方式,當串聯到鏈路中時可以攔截惡意流量,在旁路監聽時只記錄攻擊,不攔截
綠盟、安恆、銥迅、天融信、深信服、啓明星辰、知道創宇、F5 BIG-IP

基於雲WAF

一般以反向代理的形式工作,通過配置NS或CNAME記錄,使得對網站的請求報文優先經過WAF主機,經過WAF主機過濾後,將被認為無害的請求報文再發送給實際網站服務器進行請求,可以認為是自帶防護功能的CDN
安全寶、創宇盾、玄武盾、騰訊雲(T-Sec Web 應用防火牆)、百度雲(應用防火牆 WAF)、西部數碼、阿里雲盾、奇安信網站衞士

開源型WAF

Naxsi、OpenRASP、ModSecurity

網站內置的WAF

網站系統內置的WAF直接鑲嵌在代碼中,相對來説自由度高,網站內置的WAF與業務更加契合

IPS與IDS,防火牆與WAF之間的比較和差異

如果你在學習WAF的時候,常常對WAF、防火牆、IPS等概念感到費解,你可以直接查看我參考的原文(我這裏重新排版了)
首先明確一下縮寫詞彙:

IPS(Intrusion Prevention System) =入侵防禦系統
IDS(Intrusion Detection System)  =入侵檢測系統
WAF(Web Application Firewall)    = Web應用程序防火牆

這些設備的拓撲如下

玄武盾攔截 docker push_WAF_03

防火牆功能

防火牆有幾種類型,但最常見的是硬件網絡防火牆。從拓撲圖中可以看到,由於網絡防火牆是網絡安全的基石,因此在所有網絡設計中都可以找到網絡防火牆。

防火牆的核心功能是允許或阻止源主機/網絡與目標主機/網絡之間的通信。

基本防火牆在OSI模型的第3層和第4層工作,即它們可以基於源/目標IP地址和源/目標TCP / UDP端口允許或阻止IP數據包。此外,網絡防火牆是有狀態的。這意味着防火牆會跟蹤通過它的連接狀態。
例如,如果內部主機通過防火牆成功訪問了Internet網站,則後者會將連接保留在其連接表內,從而允許來自外部Web服務器的答覆數據包傳遞到內部主機,因為它們已經屬於已建立的防火牆。連接。
如今,下一代防火牆一直運行到OSI模型的第7層,這意味着它們能夠在應用程序級別檢查和控制流量。

IPS入侵防禦系統

玄武盾攔截 docker push_WAF_04

顧名思義,入侵防禦系統(IPS)是一種安全設備,其主要任務是防止網絡入侵。
這就是為什麼IPS與數據包流串聯連接的原因。從上面的網絡拓撲(帶IPS的防火牆)可以看出,IPS設備通常連接在防火牆後面,但是位於通信路徑的串聯位置,該通信路徑向內部網絡/從內部網絡傳輸數據包。
為了使IPS設備在到達內部服務器之前立即阻止惡意流量,需要上述放置。
通常,IPS是基於簽名的,這意味着它具有已知惡意流量,攻擊和利用的數據庫,如果它看到匹配簽名的數據包,則它將阻止流量。
此外,IPS可以處理統計異常檢測,管理員設置的規則等。

IDS入侵檢測系統

玄武盾攔截 docker push_php_05

IDS(入侵檢測系統)是IPS的前身,本質上是被動的。如上圖所示(帶IDS的防火牆),該設備未與流量串聯插入,而是並行(帶外放置)。
通過交換機的流量也同時發送到IDS進行檢查。如果在網絡流量中檢測到安全異常,則IDS只會向管理員發出警報,但無法阻止流量。
與IPS相似,IDS設備還主要使用已知安全攻擊和漏洞利用的特徵來檢測入侵企圖。
為了將流量發送到IDS,交換設備必須配置一個SPAN端口,以便複製流量並將其發送到IDS節點。
儘管IDS在網絡中是被動的(即它不能主動阻止流量),但是有些模型可以與防火牆配合使用以阻止安全攻擊。
例如,如果IDS檢測到攻擊,則IDS可以向防火牆發送命令以阻止特定的數據包。

WAF

玄武盾攔截 docker push_玄武盾攔截 docker push_06

WAF(Web應用程序防火牆)專注於保護網站(或通常的Web應用程序)。
它在應用程序層工作以檢查HTTP Web流量,以檢測針對網站的惡意攻擊。
例如,WAF將檢測SQL注入攻擊,跨站點腳本,Javascript攻擊,RFI / LFI攻擊等。
由於當今大多數網站都使用SSL(HTTP),因此WAF還可以通過終止SSL會話並在WAF本身上檢查連接內部的流量來提供SSL加速和SSL檢查。
如上圖所示(帶有WAF的防火牆),它被放置在網站的前面(通常)在防火牆的DMZ區域中。
有了WAF,管理員可以靈活地限制對網站特定部分的Web訪問,提供強身份驗證,檢查或限制文件上傳到網站等。

對比

IPS與IDS

入侵防禦系統

入侵檢測系統

網絡佈局

串聯(串聯)與網絡流量

與流量並行(帶外)

操作模式

活動設備。可以主動阻止攻擊流量。

被動裝置。無法阻止攻擊流量,只能檢測。

檢測機制

基於簽名,基於規則,統計異常檢測等

基於簽名,基於規則,統計異常檢測等

封鎖選項

在網絡級別阻止數據包,重置連接,提醒管理員等

提醒管理員,發送重置連接請求。

硬件功能

必須具有高性能才能執行深度數據包檢查,並且不能減慢流量。

不需要非常高性能,因為它不會干預流量。但是,為了實時掌握流量,它必須能夠處理線路帶寬。

防火牆與IPS / IDS

防火牆功能

入侵防禦/入侵防禦

網絡佈局

通常放置在網絡的前端以控制流量。

防火牆後的線內或帶外。

主要用例

允許或阻止不同網絡區域之間的流量。

專門檢查網絡數據包以使其與已知惡意攻擊的特徵進行匹配。然後,流量被阻止或發出警報。

檢測機制

通常適用於第4層,以允許或阻止IP地址和端口。

基於簽名,基於規則,統計異常檢測等

封鎖選項

在網絡級別阻止或允許數據包。

檢測攻擊並直接阻止流量或發送警報。

硬件功能

通常具有許多物理網絡接口,以便將網絡劃分為不同的安全區域。

必須具有高性能才能執行深度數據包檢查,並且不能減慢流量。

WAF與IPS / IDS

WAF

入侵防禦/入侵防禦

網絡佈局

放置在網站/ Web應用程序的前面

防火牆後的線內或帶外。

主要用例

專用於僅檢查HTTP Web流量並防止Web特定攻擊。

專門檢查所有網絡數據包,以使其與已知惡意攻擊的特徵進行匹配。然後,流量被阻止或發出警報。

防範這些安全攻擊(示例)

SQL注入,跨站點腳本,GET / POST攻擊,會話操縱攻擊,javascript,LFI / RFI等

針對Web服務器,SMTP,RDP,DNS,Windows OS,Linux OS等服務的利用。

WAF檢測

檢測WAF的方法較多,可以通過NMAP、wafw00f、檢查響應標頭,檢查響應正文等方式

手工檢測

譬如,我這裏直接來個XSS

玄武盾攔截 docker push_php_07

玄武盾攔截 docker push_玄武盾攔截 docker push_08

這個時候你可以直接看到被WAF攔截了,WAF是華為雲。你也可以通過響應頭看到WAF

玄武盾攔截 docker push_WAF_09

玄武盾攔截 docker push_WAF_10

工具檢測WAF

wafw00f

檢測WAF的方法
wafw00f是一個Web應用防火牆(WAF)指紋識別的工具。
下載地址:https://github.com/EnableSecurity/wafw00f wafw00f的工作原理:

  1. 發送正常的HTTP請求,然後分析響應,這可以識別出很多WAF。
  2. 如果不成功,它會發送一些(可能是惡意的)HTTP請求,使用簡單的邏輯推斷是哪一個WAF。
  3. 如果這也不成功,它會分析之前返回的響應,使用其它簡單的算法猜測是否有某個WAF或者安全解決方案響應了我們的攻擊。

kali上內置了該工具:

玄武盾攔截 docker push_php_11

wafw00f支持非常多的WAF識別。要查看它能夠檢測到哪些WAF,請使用-l 選項。

簡單使用如下:wafw00f https://www.xxx.com/

玄武盾攔截 docker push_WAF_12

sqlmap

如果網站存在WAF,sqlmap會有提示。

sqlmap --batch --identify-waf --random-agent -u "http://www.test.com"

玄武盾攔截 docker push_php_13

nmap

nmap檢測waf

nmap -p 80 443 --script http-waf-detect <目標>

玄武盾攔截 docker push_php_14

nmap識別waf指紋

nmap -p 80 443 --script http-waf-fingerprint <目標>

玄武盾攔截 docker push_Web_15

WAF進程與攔截頁面

此處大量引用了網絡上的圖片

D盾

服務名:d_safe
進程名:D_Safe_Manage.exe、d_manage.exe

玄武盾攔截 docker push_玄武盾攔截 docker push_16

雲鎖

服務端監聽端口:5555
服務名:YunSuoAgent/JtAgent(雲鎖Windows平台代理服務)、YunSuoDaemon/JtDaemon(雲鎖Windows平台守護服務)
進程名:yunsuo_agent_service.exe、yunsuo_agent_daemon.exe、PC.exe

玄武盾攔截 docker push_HTTP_17

阿里雲盾

服務名:Alibaba Security Aegis Detect Service、Alibaba Security Aegis Update Service、AliyunService
進程名:AliYunDun.exe、AliYunDunUpdate.exe、aliyun_assist_service.exe

玄武盾攔截 docker push_WAF_18

騰訊雲安全

進程名:BaradAgent.exe、sgagent.exe、YDService.exe、YDLive.exe、YDEdr.exe

玄武盾攔截 docker push_玄武盾攔截 docker push_19

騰訊宙斯盾

玄武盾攔截 docker push_php_20

360主機衞士

服務名:QHWafUpdata
進程名:360WebSafe.exe、QHSrv.exe、QHWebshellGuard.exe

玄武盾攔截 docker push_WAF_21

奇安信網站衞士

玄武盾攔截 docker push_玄武盾攔截 docker push_22

網站/服務器安全狗

服務名:SafeDogCloudHelper、Safedog Update Center、SafeDogGuardCenter(服務器安全狗守護中心)
進程名:SafeDogSiteApache.exe、SafeDogSiteIIS.exe、SafeDogTray.exe、SafeDogServerUI.exe、SafeDogGuardCenter.exe、CloudHelper.exe、SafeDogUpdateCenter.exe

玄武盾攔截 docker push_WAF_23

護衞神·入侵防護系統

服務名:hws、hwsd、HwsHostEx/HwsHostWebEx(護衞神主機大師服務)
進程名:hws.exe、hwsd.exe、hws_ui.exe、HwsPanel.exe、HwsHostPanel.exe/HwsHostMaster.exe(護衞神主機大師)

玄武盾攔截 docker push_HTTP_24

網防G01政府網站綜合防護系統(“雲鎖”升級版)

服務端監聽端口:5555
服務名:YunSuoAgent、YunSuoDaemon(不知是否忘了替換了!)
進程名:gov_defence_service.exe、gov_defence_daemon.exe

玄武盾攔截 docker push_WAF_25

UPUPW安全

玄武盾攔截 docker push_玄武盾攔截 docker push_26

寶塔

玄武盾攔截 docker push_WAF_27

智創防火牆

玄武盾攔截 docker push_Web_28

創宇盾

玄武盾攔截 docker push_php_29

玄武盾

玄武盾攔截 docker push_HTTP_30

西數WTS-WAF

玄武盾攔截 docker push_Web_31

Naxsi WAF

玄武盾攔截 docker push_玄武盾攔截 docker push_32

百度雲

玄武盾攔截 docker push_Web_33

華為雲

**

玄武盾攔截 docker push_Web_34

網宿雲

玄武盾攔截 docker push_HTTP_35

銥訊WAF

玄武盾攔截 docker push_Web_36

安域雲WAF

玄武盾攔截 docker push_php_37

長亭SafeLine

玄武盾攔截 docker push_玄武盾攔截 docker push_38

安恆明御WAF

玄武盾攔截 docker push_WAF_39

WAF繞過

網站存在WAF,意味着我們不能使用安全工具對網站進行測試,因為一旦觸碰了WAF的規則,輕則丟棄報文,重則拉黑IP。所以,我們需要手動進行WAF的繞過。

WAF的工作原理放到這裏説一下,WAF的主要難點是對入侵的檢測能力,尤其是對Web服務入侵的檢測,WAF最大的挑戰是識別率。對於已知的攻擊方式,可以談識別率,但是對於未知的攻擊手段,WAF是檢測不到的。目前市面上大多數的WAF都是基於規則的WAF。即WAF對接數據收到的包進行正則匹配過濾,如果正則匹配到與現有漏洞知識庫的攻擊代碼相同,則認為這個惡意代碼,從而對於進行阻斷。所以,對於基於規則匹配的WAF,需要每天都及時更新最新的漏洞庫。對於這種WAF,它的工作過程是這樣的:**解析HTTP請求——>匹配規則——>防禦動作——>記錄日誌 **
具體實現如下:

  1. 解析http請求:協議解析模塊
  2. 匹配規則:規則檢測模塊,匹配規則庫
  3. 防禦動作:return 403 或者跳轉到自定義界面,或者不返回任何數據,或者拉黑IP
  4. 日誌記錄:記錄到elk中

從WAF工作的過程我們可以看到,要想繞過WAF,我們只有在 WAF解析HTTP請求 或 WAF匹配規則 兩個地方進行繞過。因為第三、四步是WAF匹配到攻擊之後的操作,這時候WAF已經檢測到攻擊了。
【繞WAF這個事,可以説,方式的很靈活的,寫起來很雜,以後再積累更新】

域名轉換為ip

有些WAF設置的是針對域名的防護,在有些時候,我們可以嘗試將域名改成ip地址有可以繞過WAF的防護。
(小聲bb,其實這很雞肋,一般來説,規則是不會匹配host是域名還是ip,除非是為了避免誤報才可能匹配host)

分塊編碼(Transfer-Encoding)繞過WAF

這種繞過方法利用的是WAF在解析HTTP協議的過程,既然WAF連我們的攻擊代碼都沒有解析完全,那麼第二步的正則匹配也就匹配不到我們的攻擊代碼了,自然就可以繞過了。

對抗規則繞過

對關鍵字進行不同編碼

select * from zzz = select * from  %257a%257a%257a  //url編碼
單引號 = %u0027、%u02b9、%u02bc   // Unicode編碼
adminuser = 0x61646D696E75736572 // 部分十六進制編碼
空格 = %20 %09 %0a %0b %0c %0d %a0  //各類編碼

這種方式實用價值一般,譬如檢測xss的時候,我會加一條邏輯與來匹配編碼

pcre:"/(txtName|mtxMessage)[\s=]+?.+?(%3C|\x3c|<).+?(%3E|\x3E|>)/iP"

對關鍵字進行大小寫變換

Union select = uNIoN sELecT

這種方式實用價值很低,我們寫正則的時候,一般都會設置正則的標誌位為i,即,不區分大小寫

通過其他語義相同的關鍵字替換

除了通過編碼等價替換等方式繞過檢測,我們還能配合目標特性實現繞過檢測

And = &&
Or = ||
等於 = like 或綜合<與>判斷
if(a,b,c) = case when(A) then B else C end
substr(str,1,1) = substr (str) from 1 for 1
limit 1,1 = limit 1 offset 1
Union select 1,2 = union select * from ((select 1)A join (select 2)B;
hex()、bin() = ascii()
sleep() = benchmark()
concat_ws() = group_concat()
mid()、substr() = substring()
@@user = user()
@@datadir = datadir()

配合Windows特性

注意,是在cmd下執行,在powershell中是不行的

ipconfig <=> ((((ipc^o^nf""ig))))      //利用符號分割字符執行ipconfig

玄武盾攔截 docker push_玄武盾攔截 docker push_40

ipconfig <=> set a=123ipconfig456&& %a:~3,8%	利用變量分割關鍵字執行ipconfig

玄武盾攔截 docker push_HTTP_41

解釋:

set a=123ipconfig456 //設置了一個變量a

echo %a:~3,8% //取出變量a的第3位開始共計8個字符(加了個echo是為了看看取的內容)

%a:~3,8% //執行取出的值

把上面內容合體就是set a=123ipconfig456&& %a:~3,8%

玄武盾攔截 docker push_HTTP_42

配合linux特性

whoami <=> w'h'o'a'm"i"  //單引號或雙引號連接符,需要閉合

玄武盾攔截 docker push_Web_43

Cat /etc/passwd <=> cat /?t*/??ss**  //?,*通配符 
whoami <=> /b[12312i]n/w[23sh]oa[2msh]i //[] 通配符,匹配【】中的字符

上面的這個説白了就是利用了linux能夠識別正則。

玄武盾攔截 docker push_Web_44

Whoami <=> a=who&&b=ami&&$a$b     //當然linux下也可以變量拼接

玄武盾攔截 docker push_Web_45

cat /../../etc/passwd =cd ..&&cd ..&&cd etc&&cat passwd  //目錄穿越

玄武盾攔截 docker push_WAF_46

http協議繞過

Content-Type繞過
有的waf 識別到Content-Type類型為multipart/form-data後,會將它認為是文件上傳請求,從而不檢測其他種類攻擊只檢測文件上傳,導致被繞過。

application/x-www-form-urlencoded è multipart/form-data

HTTP請求方式繞過
waf在對危險字符進行檢測的時候,分別為post請求和get請求設定了不同的匹配規則,請求被攔截,變換請求方式有機率能繞過檢測
Ps:雲鎖/安全狗安裝後默認狀態對post請求檢測力度較小,可通過變換請求方式繞過
參數污染繞過
由於http協議允許同名參數的存在,同時waf的處理機制對同名參數的處理方式不同,造成“參數污染”。不同的服務器搭配會對傳遞的參數解析出不同的值。配合waf與中間件對參數解析位置不同,可能繞過waf。

提交的參數為:?id=1&id=2&id=exp
asp.net+iis:id=1,2,exp
asp+iis:id=1,2,exp
php+apache:id=exp

解析特性繞過
原理:利用waf與後端服務器的解析不一致。
Iis5.0-6.0解析漏洞

.asp --> /xx.asp/xx.jpg  //.asp,.asa目錄下的文件都解析成asp文件
.asp --> xx.asp;.jpg     //服務器默認不解析;號後面的內容

Iis7.5解析漏洞(php.ini開啓fix_pathinfo)

.php --> /xx.jpg         //上傳.jpg一句話,訪問時後面加上/xx.php

apache解析漏洞

.php --> /test.php.php123     //從右往左,能別的後綴開始解析

nginx解析漏洞(php.ini開啓fix_pathinfo)

.php --> xxx.jpg%00.php      //Nginx <8.03 空字節代碼執行漏洞

解析兼容性繞過
在http協議中,標準的文件名的形式為filename=”1.php”,但是web容器會在解析協議時做一些兼容,文件上傳時,有的waf只按照標準協議去解析,解析不到文件名,從而被繞過。
keep-alive(Pipeline)繞過
原理:http請求頭部中有Connection這個字段,建立的tcp連接會根據此字段的值來判斷是否斷開,我們可以手動將此值置為keep-alive,然後在http請求報文中構造多個請求,將惡意代碼隱藏在第n個請求中,從而繞過。