绕过html标签,巧妙绕过WAF的XSS技巧
本文提出了一種繞過XSS安全機(jī)制的新型方法,這種技術(shù)由三個階段組成:確定Payload結(jié)構(gòu)、探測和混淆處理。首先,我們需要針對給定的上下文環(huán)境,確定各種不同的Payload結(jié)構(gòu)以達(dá)到最優(yōu)的測試效果。接下來就是探測,這里涉及到根據(jù)目標(biāo)所實現(xiàn)的安全機(jī)制來進(jìn)行各種字符串測試,并分析目標(biāo)的響應(yīng)數(shù)據(jù)以便基于分析結(jié)果來做出安全假設(shè)。最后,根據(jù)分析結(jié)果來判斷是否要對Payload進(jìn)行混淆處理或結(jié)構(gòu)調(diào)整。
本文假設(shè)讀者對XSS、HTML和JavaScript已經(jīng)有了基本的了解。
全文使用{string}來代表Payload機(jī)制中的組件。
全文使用{?string}來代表可選組件。
全文使用“主要字符”這個名詞代表Payload中必須包含的字符。
作者建議使用URL編碼來處理Payload中不安全的字符,例如“+”和“&”等等。
在探測過程中,建議使用無害的字符串來代替{javascript}。
介紹
XSS是Web應(yīng)用程序中常見的漏洞之一,網(wǎng)站管理員可以通過用戶輸入過濾、根據(jù)上下文轉(zhuǎn)換輸出數(shù)據(jù)、正確使用DOM、強(qiáng)制執(zhí)行跨源資源共享(CORS)策略以及其他的安全策略來規(guī)避XSS漏洞。盡管現(xiàn)在有很多預(yù)防XSS攻擊的技術(shù),但Web應(yīng)用程序防火墻(WAF)或自定義數(shù)據(jù)過濾器是目前使用比較廣泛的安全保護(hù)技術(shù)了,很多廠商都會利用這些技術(shù)來抵御新型的XSS攻擊向量。雖然WAF廠商仍在嘗試引入機(jī)器學(xué)習(xí)技術(shù),但基于正則表達(dá)式的字符串檢測方法仍是目前最廣泛使用的技術(shù)。
本文提出了一種構(gòu)造XSS Payload的新型方法,這種方法構(gòu)造出來的XSS Payload可以繞過基于正則表達(dá)式匹配的安全機(jī)制。
HTML上下文
當(dāng)用戶的輸入數(shù)據(jù)映射在Web頁面的HTML代碼中時,這種場景就是我們所謂的HTML上下文。HTML上下文可以根據(jù)用戶輸入在代碼中的映射位置來進(jìn)一步劃分成:
1、 標(biāo)簽內(nèi):
2、 標(biāo)簽外:Youentered $input
標(biāo)簽外
在這種上下文場景中,主要字符“
1、
2、
3、x
4、
5、
6、
如果上述方式均無法探測成功,則說明目標(biāo)站點部署的安全機(jī)制無法被繞過。這種方式的假陽性率非常高,因此不鼓勵使用。如果上述探測方式有一個可行,那么可用來構(gòu)造Payload的機(jī)制就非常多了。
Payload機(jī)制#1
,//,Space,Tab,LF}
找到{tag}的合適值之后,就需要猜測用于匹配標(biāo)簽和事件處理器間數(shù)據(jù)過濾器的正則表達(dá)式了。這一步可以使用下面的探測機(jī)制來實現(xiàn):
1、
2、
3、
4、
5、
6、- 如果無法通過,則為[\s\n\r+]+;
7、
這個組件(例如事件處理器)是Payload結(jié)構(gòu)中最關(guān)鍵的部分。通常,匹配它的是常規(guī)正則表達(dá)式(例如“on\w+”)或黑名單(例如“on(load|click|error|show)”)。第一個正則表達(dá)式非常嚴(yán)格,很難繞過,而基于黑名單的模式可以通過不常用的事件處理器來繞過。安全機(jī)制的實現(xiàn)類型可以通過下面兩種簡單的方法來識別:
1、
2、
下面是一些防火墻黑名單中沒標(biāo)記的事件處理器:
onauxclickondblclickoncontextmenuonmouseleaveontouchcancel
常用的Payload結(jié)束符如下:
Payload機(jī)制#2
使用了標(biāo)簽的Payload可以利用下面的Payload機(jī)制來構(gòu)建:
,//,Space,Tab,LF}
Payload機(jī)制#3
這種Payload機(jī)制有兩種形式:明文或混淆處理。
明文結(jié)構(gòu)如下:
,//,Space,Tab,LF}
混淆處理后的Payload結(jié)構(gòu)如下:
,//,Space,Tab,LF}
JavaScript上下文
Payload機(jī)制#1
{quote}{delimiter}{javascript}{delimiter}{quote}
可用的Payload有:
'^{javascript}^''*{javascript}*''+{javascript}+''/{javascript}/''%{javascript}%''|{javascript}|''<{javascript}<''>{javascript}>'
Payload機(jī)制#2
{quote}{delimiter}{javascript}//
可以使用下列Payload機(jī)制來構(gòu)建Payload:
'<{javascript}//''|{javascript}//''^{javascript}//'
防火墻繞過
在研究過程中,總共繞過了八款WAF。下面的列表包含了可繞過的WAF、Paylaod以及相關(guān)的繞過技術(shù):
WAF名稱:Cloudflare
Payload:click
繞過技術(shù):非空格填充
WAF名稱:Wordfence
Payload:click
繞過技術(shù):數(shù)字字符編碼
WAF名稱:Barracuda
Payload:click
繞過技術(shù):數(shù)字字符編碼
WAF名稱:Akamai
Payload:click
繞過技術(shù):黑名單中缺少事件處理器以及函數(shù)調(diào)用混淆
WAF名稱:Comodo
Payload:click
繞過技術(shù):黑名單中缺少事件處理器以及函數(shù)調(diào)用混淆
WAF名稱:F5
Payload:click
繞過技術(shù):黑名單中缺少事件處理器以及函數(shù)調(diào)用混淆
WAF名稱:ModSecurity
Payload:
繞過技術(shù):黑名單中缺少標(biāo)簽或事件處理器
WAF名稱:dotdefender
Payload:
繞過技術(shù):黑名單中缺少結(jié)束標(biāo)簽、事件處理器和函數(shù)調(diào)用混淆
參考資料
HTML規(guī)范:https://www.w3.org/TR/html52/
數(shù)字字符引用:https://en.wikipedia.org/wiki/Numeric_character_reference
總結(jié)
以上是生活随笔為你收集整理的绕过html标签,巧妙绕过WAF的XSS技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用计算机的优点缺点,计算机使用二进制的
- 下一篇: 计算机 游戏 排名2015年,2015十