WAF的那些事兒

2021-10-04 13:42:26 字數 2631 閱讀 8203

web基本可以分為以下幾類。

軟體型waf:

以軟體形式裝在所保護的伺服器行的waf,由於安裝在伺服器上,所以可以接觸到伺服器上的檔案,直接檢測伺服器上是否存在webshell、是否有檔案被建立等。

硬體型waf

以硬體形式部署在鏈路中,支援多種部署方式,當串聯到鏈路中時可以攔截惡意流量,在旁路監聽模式時只記錄攻擊不進行攔截。

雲waf

一般以反向**的形式工作,通過配置ns記錄或cname記錄,使對**的請求報文優先經過waf主機,經過waf主機過濾後,將認為無害的請求報文再傳送給實際**伺服器進行請求,可以說是帶防護功能的cdn。

**系統內建的waf

**系統內建的waf也可以說是**系統中內建的過濾,直接鑲嵌在**中,相對來說自由度高。一般有以下幾種情況。

1.輸入引數強制型別轉換(intval等)

2.輸入引數合法性檢測

3.關鍵函式執行(sql執行、頁面顯示、命令執行等)前,對經過**流程的輸入進行檢測

4.對輸入的資料進行替換過濾後再繼續執行**流程**義/替換特殊字元等)

**系統內建waf與業務更加契合,在對安全與業務都比較了解的情況下,可以更少地收到誤報與漏報。

sqlmap

使用sqlmap中自帶地waf識別模組可以識別出waf地種類,但是如果所安裝地waf並沒有什麼特徵,sqlmap就只能識別出型別是generic。

sqlmap.py -u "url"

--indentify-waf --batch

手工判斷

直接在相應**地url後面加上最基礎地測試語句,比如union select 1,2,3%23, 並且放在乙個不存在地引數名中。被攔截地表現為:頁面無法訪問、響應碼不同、返回與正常請求頁面時不同地結果等。

大小寫混寫

在規則匹配時只針對特定大寫或特定小寫的情況,在實站中可以通過混寫大小寫的方式進行繞過(現在幾乎沒有這種情況)

union

select1,

2,3,

4,5

url編碼

極少部分的waf不會對普通字元進行url解碼

替換關鍵字

ununionion selselectect 1,2

,3,4

,5

使用注釋

注釋在截斷sql語句中用的比較多,在繞過waf時主要使用其替代空格(/任意內容/),適用於檢測過程中沒有識別注釋或替換了的注釋的waf

union

/*2333*/

select

/*5555*/1,

2,3,

4,5

還可以使用內聯注釋嘗試繞過waf的檢測

多引數請求拆分

對於多個引數拼接到同一條sql語句中的情況,還可以將注入語句分為插入

例如請求url時,get引數為如下格式:

a=

[input1]

&b=[input2]

將get的引數a和引數b拼接到sql語句中

and a=

[input1]

and b=

[input2]

這是就可以將注入語句進行拆分

a=

union

/*&b=*/

select1,

2,3,

4

最終將引數a和引數b拼接

and a=

union

/*and b=*/

select1,

2,3,

4

http引數汙染

http引數汙染是指當同一引數出現多次,不同的中介軟體會解析為不同的結果。

生僻字函式

使用生僻字函式替代常見的函式,例如在報錯注入中使用polygon()函式替換常用的updatexml()函式

尋找**源站ip

常見的尋找**ip方法有下面幾種

尋找**的歷史解析記錄

多個不同區域ping**,檢視ip解析的結果

找**的二級網域名稱、ns、mx記錄等對應ip

訂閱**郵件,檢視郵件傳送方的ip

注入引數到cookies中

某些程式設計師在**中使用req

uest

獲取引數

,兒

_request獲取引數,兒

r​eque

st獲取

引數,兒

_request會依次從get/post/cookie中獲取引數,如果waf只檢測了get/post而沒有檢測cookie,可以將注入語句放入cookie中進行繞過。

object的那些事兒

昨天和大姐qq。說給我看了,今年找到物件。我就在那裡騙他們。說我找了乙個 人。明年去 以後就沒有多少機會見到他們了。呵呵,大姐就說這樣我不聽話,那樣不聽話,不讓我去,說還借我錢買房子,不能去,去了父母白養這麼大了,我總是騙他們,逗他們。以前還騙他們說我出家。有一段時間,工作不順心,我壓力挺大的。不知...

和 的那些事兒

和 都可以用作邏輯與的運算子,表示邏輯與 and 當運算子兩邊的表示式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。還具有短路的功能,即如果第乙個表示式為false,則不再計算第二個表示式,例如,對於if str null str.equals 表...

死鎖的那些事兒

死鎖的定義 如果乙個程序集合中的每個程序都在等待只能由該程序集合中的其他程序才能引發的事件,那麼,該程序集合就是死鎖的。產生死鎖的四個必要條件 產生死鎖的原因 預防死鎖 檢測死鎖 預防死鎖的幾種策略,會嚴重地損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得 較滿意的系統效能。由於在避免死鎖...