ES6中的模板字符串和新XSS Payload
眾所周知,在XSS的實(shí)戰(zhàn)對(duì)抗中,由于防守方經(jīng)常會(huì)采用各種各樣嚴(yán)格的過濾手段來過濾輸入,所以我們使用的XSS Payload也會(huì)根據(jù)實(shí)際情況作出各種各樣的調(diào)整,最常見的如避免括號(hào),避免引號(hào),避免關(guān)鍵字等,以繞開過濾函數(shù)的檢查,從而成功將代碼注入到網(wǎng)頁(yè)中運(yùn)行。
在傳統(tǒng)的XSS Payload變形中,常用的無非有以下幾種:
-
使用String.fromCharCode來避免關(guān)鍵字,如String.fromCharCode(97,108,101,114,116,40,49,41);
-
使用URL編碼來避免括號(hào)的識(shí)別,如location=’alert%281%29’;
-
使用正則對(duì)象的特點(diǎn)來避開引號(hào),如alert(/1/);
在多年的研究中基本上傳統(tǒng)的變形手段都被研究的差不多了,很難找到創(chuàng)新的繞開手段。
然而,近幾年ECMAScript新版本的不斷發(fā)展和推行,在帶來了各種激動(dòng)人心的語言特性的同時(shí),也不可避免地帶來了一些新的安全挑戰(zhàn)。本文中所說的模板字符串,便是ECMAScript 6草案中的一種新特性。
如MDN中所述,模板字符串(Template literals)允許嵌入表達(dá)式,并且支持多行字符串和字符串插補(bǔ)特性。基本語法為以下幾種:
其