一、白名單繞過(guò)
語(yǔ)句輸出在標(biāo)簽內(nèi)
比如
1.閉合標(biāo)簽構(gòu)造語(yǔ)句
在白名單較為寬松的情況下,"和<>都被放出,可以利用">先閉合標(biāo)簽,然后構(gòu)造http://www.ttokpm.com/images/chaijie_default.pngss語(yǔ)句來(lái)進(jìn)行觸發(fā)。最后結(jié)果
">這種是最簡(jiǎn)單的方法,也很常見(jiàn)。如果白名單內(nèi)沒(méi)有了",可以利用html的解析優(yōu)先級(jí)來(lái)逃離引號(hào)來(lái)觸發(fā)http://www.ttokpm.com/images/chaijie_default.pngss。構(gòu)造
,在瀏覽器中會(huì)優(yōu)先解析標(biāo)簽,這樣就會(huì)優(yōu)先閉合標(biāo)簽,從而逃出引號(hào)的限制來(lái)觸發(fā)http://www.ttokpm.com/images/chaijie_default.pngss。2.閉合屬性構(gòu)造http://www.ttokpm.com/images/chaijie_default.pngss
如果現(xiàn)在白名單中沒(méi)有了<>,那么就不能利用上述方法進(jìn)行構(gòu)造,可以考慮閉合src屬性,構(gòu)造新屬性來(lái)觸發(fā)http://www.ttokpm.com/images/chaijie_default.pngss。構(gòu)造
閉合src,觸發(fā)http://www.ttokpm.com/images/chaijie_default.pngss如果白名單中<>'"全部被限制,這時(shí)http://www.ttokpm.com/images/chaijie_default.pngss利用就變的非常困難,但是如果onerror屬性可控的話,可以用html實(shí)體編碼進(jìn)行繞過(guò),來(lái)構(gòu)造任意的http://www.ttokpm.com/images/chaijie_default.pngss語(yǔ)句。https://config.net.cn/tools/HtmlEncode.html 比如
語(yǔ)句輸出在js中
語(yǔ)句直接輸出在js代碼中是非常危險(xiǎn)的,相對(duì)應(yīng)的白名單也會(huì)設(shè)置的非常嚴(yán)格。
1.constructor
JavaScript語(yǔ)言使用構(gòu)造函數(shù)(constructor)作為對(duì)象的模版。constructor屬性返回對(duì)創(chuàng)建此對(duì)象的數(shù)組函數(shù)的引用。簡(jiǎn)單來(lái)說(shuō)Object.constructor===Function。
在js中我們可以用Function來(lái)創(chuàng)建一個(gè)函數(shù)來(lái)構(gòu)造http://www.ttokpm.com/images/chaijie_default.pngss,例如new Function('alert(1)')();,也可以不要new,簡(jiǎn)化成Function('alert(1)')()。然后將Function等價(jià)替換為Object.constructor,Object.constructor('alert(1)')()繼續(xù)轉(zhuǎn)換為'...'.substr.constructor('alert(1)')()這里的...為任意字符串,'...'.substr為一個(gè)Object,所以這個(gè)語(yǔ)句跟上面等價(jià)。在js中a.b可以寫成a['b']的形式,一次上面的語(yǔ)句可以寫成'...'['substr']['constructor']('alert(1)')()然后在js中任意字符串都可一寫成+ascii碼8進(jìn)制的形式,將語(yǔ)句字符串全部替換,'...'['163165142163164162']['143157156163164162165143164157162']('141154145162164506151')()這樣我們?cè)诎酌麊沃芯筒恍枰帜妇涂梢詧?zhí)行任意的http://www.ttokpm.com/images/chaijie_default.pngss語(yǔ)句了。
2.jsfuck
那么如果白名單更加嚴(yán)格,名單當(dāng)中沒(méi)有了和數(shù)字,這時(shí)候我們就需要借助jsfuck。jsfuck源于一門編程語(yǔ)言brainfuck,其主要的思想就是只使用8種特定的符號(hào)來(lái)編寫代碼。而jsfuck也是沿用了這個(gè)思想,它僅僅使用6種符號(hào)來(lái)編寫代碼。它們分別是(、)、+、[、]、!。我們可以直接將alert(1)進(jìn)行jsfuck編碼進(jìn)行測(cè)試。http://www.jsfuck.com/
也可以將Function('alert(1)')()進(jìn)行編碼來(lái)創(chuàng)建任意函數(shù)執(zhí)行。
二、限制長(zhǎng)度繞過(guò)
長(zhǎng)度限制在20個(gè)字符內(nèi)的繞過(guò)。
分段輸入http://www.ttokpm.com/images/chaijie_default.pngss語(yǔ)句
還是拿
舉例,在沒(méi)有過(guò)濾的情況下閉合語(yǔ)句需要">,用到了27個(gè)字符,而且基本沒(méi)有縮短的空間。這時(shí)候就需要我們找多個(gè)點(diǎn)來(lái)分段構(gòu)造http://www.ttokpm.com/images/chaijie_default.pngss。
1.利用注釋符
">
我們可以看到,分成3段利用注釋符,將每段之間的的代碼注釋掉,從而將三段之間的http://www.ttokpm.com/images/chaijie_default.pngss語(yǔ)句連接起來(lái)執(zhí)行。舉個(gè)例子:ibuyu cms數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)限制了20個(gè)字符select table_schema,table_name,column_name,column_type,column_comment from information_schema.columns where table_schema= 'ibuyu'
將上述語(yǔ)句分三次插入,可以看到http://www.ttokpm.com/images/chaijie_default.pngss中間的語(yǔ)句都被注釋掉,形成了。
2.模板字符串
ECMAScript 6.0(簡(jiǎn)稱ES6)是Javascript語(yǔ)言的下一代標(biāo)準(zhǔn),在2015年6月正式發(fā)布。ECMAScript是Javascript的語(yǔ)法規(guī)定,JavaScript是ECMAScript的實(shí)現(xiàn)。ES5標(biāo)準(zhǔn)中一般是輸出模板是通過(guò)字符串拼接的方式進(jìn)行的。在ES6中可以通過(guò)模板字符串簡(jiǎn)化字符串的拼接,模板字符串通過(guò)反引號(hào)來(lái)表示````。模板字符串相當(dāng)于加強(qiáng)版的字符串,除了作為普通字符串,還可以用來(lái)定義多行字符串,還可以在字符串中加入變量和表達(dá)式。因此可以使用模板字符串來(lái)將分段語(yǔ)句之間的無(wú)用代碼變?yōu)槠胀ㄗ址?,從而拼接http://www.ttokpm.com/images/chaijie_default.pngss。
">
這樣就可以利用上述兩種方法繞過(guò)長(zhǎng)度限制去拼接任意的http://www.ttokpm.com/images/chaijie_default.pngss語(yǔ)句了。
短域名
如果我們可以申請(qǐng)到一個(gè)足夠短的域名,那么我們就可以利用域名引入外部的一些東西,比如,這樣問(wèn)題似乎就變的簡(jiǎn)單了起來(lái)。但是,這個(gè)價(jià)格。。。
這時(shí)我們就得利用Unicode等價(jià)性漏洞。Unicode標(biāo)準(zhǔn)中提到,兩個(gè)不同編碼的Unicode字符可能存在一定的等價(jià)性,這種等價(jià)是字符或字符序列之間比較弱的等價(jià)類型,這些變體形式可能代表在某些字體或語(yǔ)境中存在視覺(jué)上或意義上的相似性。舉例來(lái)說(shuō),a 和a(uff41)在某些字體下看起來(lái)可能相同,15和?(u246e)其表示的數(shù)學(xué)意義可能相同,所以這兩種字符都有其相應(yīng)的等價(jià)性。其中15是兩個(gè)字符,而?是一個(gè)字符,但是再解析之后兩者等價(jià),這樣我們就用一個(gè)字符代替了二個(gè)字符。同樣的,可以用?對(duì)應(yīng)到rad``℡對(duì)應(yīng)到tel更多字符可以參考https://www.compart.com/en/unicode/ 這樣我們就可以申請(qǐng)到非常便宜的域名了。
讓我們來(lái)實(shí)驗(yàn)一些是不是真的可以引入外部的東西,插入,可以看到我們引入了外部的圖片。同樣我們也可以引入js腳本來(lái)實(shí)現(xiàn)我們想要的東西
-
瀏覽器
+關(guān)注
關(guān)注
1文章
1007瀏覽量
34970 -
SRC
+關(guān)注
關(guān)注
0文章
60瀏覽量
17901
原文標(biāo)題:XSS繞過(guò)小思路
文章出處:【微信號(hào):Tide安全團(tuán)隊(duì),微信公眾號(hào):Tide安全團(tuán)隊(duì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論