目錄
- 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有哪些?
WAF的分類
WAF分為非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、雲WAF、軟件型WAF之類的;而嵌入型WAF指的是網站內置的WAF。非嵌入型WAF對Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web數據是已經被解析加工好的。所以非嵌入型的受攻擊機面還涉及到其他層面,而嵌入型WAF從Web容器模塊型WAF、代碼層WAF往下走,其對抗畸形報文、掃操作繞過的能力越來越強。當然,在部署維護成本方面,也是越高的。
軟件型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應用程序防火牆
這些設備的拓撲如下
防火牆功能
防火牆有幾種類型,但最常見的是硬件網絡防火牆。從拓撲圖中可以看到,由於網絡防火牆是網絡安全的基石,因此在所有網絡設計中都可以找到網絡防火牆。
防火牆的核心功能是允許或阻止源主機/網絡與目標主機/網絡之間的通信。
基本防火牆在OSI模型的第3層和第4層工作,即它們可以基於源/目標IP地址和源/目標TCP / UDP端口允許或阻止IP數據包。此外,網絡防火牆是有狀態的。這意味着防火牆會跟蹤通過它的連接狀態。
例如,如果內部主機通過防火牆成功訪問了Internet網站,則後者會將連接保留在其連接表內,從而允許來自外部Web服務器的答覆數據包傳遞到內部主機,因為它們已經屬於已建立的防火牆。連接。
如今,下一代防火牆一直運行到OSI模型的第7層,這意味着它們能夠在應用程序級別檢查和控制流量。
IPS入侵防禦系統
顧名思義,入侵防禦系統(IPS)是一種安全設備,其主要任務是防止網絡入侵。
這就是為什麼IPS與數據包流串聯連接的原因。從上面的網絡拓撲(帶IPS的防火牆)可以看出,IPS設備通常連接在防火牆後面,但是位於通信路徑的串聯位置,該通信路徑向內部網絡/從內部網絡傳輸數據包。
為了使IPS設備在到達內部服務器之前立即阻止惡意流量,需要上述放置。
通常,IPS是基於簽名的,這意味着它具有已知惡意流量,攻擊和利用的數據庫,如果它看到匹配簽名的數據包,則它將阻止流量。
此外,IPS可以處理統計異常檢測,管理員設置的規則等。
IDS入侵檢測系統
IDS(入侵檢測系統)是IPS的前身,本質上是被動的。如上圖所示(帶IDS的防火牆),該設備未與流量串聯插入,而是並行(帶外放置)。
通過交換機的流量也同時發送到IDS進行檢查。如果在網絡流量中檢測到安全異常,則IDS只會向管理員發出警報,但無法阻止流量。
與IPS相似,IDS設備還主要使用已知安全攻擊和漏洞利用的特徵來檢測入侵企圖。
為了將流量發送到IDS,交換設備必須配置一個SPAN端口,以便複製流量並將其發送到IDS節點。
儘管IDS在網絡中是被動的(即它不能主動阻止流量),但是有些模型可以與防火牆配合使用以阻止安全攻擊。
例如,如果IDS檢測到攻擊,則IDS可以向防火牆發送命令以阻止特定的數據包。
WAF
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
這個時候你可以直接看到被WAF攔截了,WAF是華為雲。你也可以通過響應頭看到WAF
工具檢測WAF
wafw00f
檢測WAF的方法
wafw00f是一個Web應用防火牆(WAF)指紋識別的工具。
下載地址:https://github.com/EnableSecurity/wafw00f wafw00f的工作原理:
- 發送正常的HTTP請求,然後分析響應,這可以識別出很多WAF。
- 如果不成功,它會發送一些(可能是惡意的)HTTP請求,使用簡單的邏輯推斷是哪一個WAF。
- 如果這也不成功,它會分析之前返回的響應,使用其它簡單的算法猜測是否有某個WAF或者安全解決方案響應了我們的攻擊。
kali上內置了該工具:
wafw00f支持非常多的WAF識別。要查看它能夠檢測到哪些WAF,請使用-l 選項。
簡單使用如下:wafw00f https://www.xxx.com/
sqlmap
如果網站存在WAF,sqlmap會有提示。
sqlmap --batch --identify-waf --random-agent -u "http://www.test.com"
nmap
nmap檢測waf
nmap -p 80 443 --script http-waf-detect <目標>
nmap識別waf指紋
nmap -p 80 443 --script http-waf-fingerprint <目標>
WAF進程與攔截頁面
此處大量引用了網絡上的圖片
D盾
服務名:d_safe
進程名:D_Safe_Manage.exe、d_manage.exe
雲鎖
服務端監聽端口:5555
服務名:YunSuoAgent/JtAgent(雲鎖Windows平台代理服務)、YunSuoDaemon/JtDaemon(雲鎖Windows平台守護服務)
進程名:yunsuo_agent_service.exe、yunsuo_agent_daemon.exe、PC.exe
阿里雲盾
服務名:Alibaba Security Aegis Detect Service、Alibaba Security Aegis Update Service、AliyunService
進程名:AliYunDun.exe、AliYunDunUpdate.exe、aliyun_assist_service.exe
騰訊雲安全
進程名:BaradAgent.exe、sgagent.exe、YDService.exe、YDLive.exe、YDEdr.exe
騰訊宙斯盾
360主機衞士
服務名:QHWafUpdata
進程名:360WebSafe.exe、QHSrv.exe、QHWebshellGuard.exe
奇安信網站衞士
網站/服務器安全狗
服務名:SafeDogCloudHelper、Safedog Update Center、SafeDogGuardCenter(服務器安全狗守護中心)
進程名:SafeDogSiteApache.exe、SafeDogSiteIIS.exe、SafeDogTray.exe、SafeDogServerUI.exe、SafeDogGuardCenter.exe、CloudHelper.exe、SafeDogUpdateCenter.exe
護衞神·入侵防護系統
服務名:hws、hwsd、HwsHostEx/HwsHostWebEx(護衞神主機大師服務)
進程名:hws.exe、hwsd.exe、hws_ui.exe、HwsPanel.exe、HwsHostPanel.exe/HwsHostMaster.exe(護衞神主機大師)
網防G01政府網站綜合防護系統(“雲鎖”升級版)
服務端監聽端口:5555
服務名:YunSuoAgent、YunSuoDaemon(不知是否忘了替換了!)
進程名:gov_defence_service.exe、gov_defence_daemon.exe
UPUPW安全
寶塔
智創防火牆
創宇盾
玄武盾
西數WTS-WAF
Naxsi WAF
百度雲
華為雲
**
網宿雲
銥訊WAF
安域雲WAF
長亭SafeLine
安恆明御WAF
WAF繞過
網站存在WAF,意味着我們不能使用安全工具對網站進行測試,因為一旦觸碰了WAF的規則,輕則丟棄報文,重則拉黑IP。所以,我們需要手動進行WAF的繞過。
WAF的工作原理放到這裏説一下,WAF的主要難點是對入侵的檢測能力,尤其是對Web服務入侵的檢測,WAF最大的挑戰是識別率。對於已知的攻擊方式,可以談識別率,但是對於未知的攻擊手段,WAF是檢測不到的。目前市面上大多數的WAF都是基於規則的WAF。即WAF對接數據收到的包進行正則匹配過濾,如果正則匹配到與現有漏洞知識庫的攻擊代碼相同,則認為這個惡意代碼,從而對於進行阻斷。所以,對於基於規則匹配的WAF,需要每天都及時更新最新的漏洞庫。對於這種WAF,它的工作過程是這樣的:**解析HTTP請求——>匹配規則——>防禦動作——>記錄日誌 **
具體實現如下:
- 解析http請求:協議解析模塊
- 匹配規則:規則檢測模塊,匹配規則庫
- 防禦動作:return 403 或者跳轉到自定義界面,或者不返回任何數據,或者拉黑IP
- 日誌記錄:記錄到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
ipconfig <=> set a=123ipconfig456&& %a:~3,8% 利用變量分割關鍵字執行ipconfig
解釋:
set a=123ipconfig456 //設置了一個變量a
echo %a:~3,8% //取出變量a的第3位開始共計8個字符(加了個echo是為了看看取的內容)
%a:~3,8% //執行取出的值
把上面內容合體就是set a=123ipconfig456&& %a:~3,8%
配合linux特性
whoami <=> w'h'o'a'm"i" //單引號或雙引號連接符,需要閉合
Cat /etc/passwd <=> cat /?t*/??ss** //?,*通配符
whoami <=> /b[12312i]n/w[23sh]oa[2msh]i //[] 通配符,匹配【】中的字符
上面的這個説白了就是利用了linux能夠識別正則。
Whoami <=> a=who&&b=ami&&$a$b //當然linux下也可以變量拼接
cat /../../etc/passwd =cd ..&&cd ..&&cd etc&&cat passwd //目錄穿越
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個請求中,從而繞過。