讀書筆記:XSS跨站腳本攻擊初探

跨站腳本(Cross-Site Scripting,XSS)是一種經(jīng)常出現(xiàn)在Web應用程序中的計算機安全漏洞唤崭,是由于Web應用程序?qū)τ脩舻妮斎脒^濾不足而產(chǎn)生的。攻擊者利用網(wǎng)站漏洞把惡意的腳本代碼(通常包括HTML代碼和客戶端Javascript腳本)注入到網(wǎng)頁之中脖律,當其他用戶瀏覽這些網(wǎng)頁時谢肾,就會執(zhí)行其中的惡意代碼,對受害用戶可能采取Cookie資料竊取小泉、會話劫持芦疏、釣魚欺騙等各種攻擊。

XSS跨站腳本攻擊本身對Web服務器沒有直接危害微姊,它借助網(wǎng)站進行傳播酸茴,使網(wǎng)站的大量用戶受到攻擊。攻擊者一般通過留言兢交、電子郵件或其他途徑向受害者發(fā)送一個精心構造的惡意URL薪捍,當受害者在Web瀏覽器中打開該URL的時侯,惡意腳本會在受害者的計算機上悄悄執(zhí)行。

XSS可能造成的危害

(1)網(wǎng)絡釣魚酪穿,包括盜取各類用戶賬號与倡;

(2)竊取用戶cookies資料,從而獲取用戶隱私信息昆稿,或利用用戶身份進一步對網(wǎng)站執(zhí)行操作;

(3)劫持用戶(瀏覽器)會話息拜,從而執(zhí)行任意操作溉潭,例如進行非法轉(zhuǎn)賬、強制發(fā)表日志少欺、發(fā)送電子郵件等喳瓣;

(4)傳播跨站腳本蠕蟲等;

(5)提升用戶權限赞别,包括進一步滲透網(wǎng)站畏陕;

(6)大量的客戶端攻擊,如DDoS攻擊仿滔;

(7)獲取客戶端信息惠毁,例如用戶的瀏覽歷史、真實IP崎页、開放端口等鞠绰;

(8)控制受害者機器向其他網(wǎng)站發(fā)起攻擊;

(9)結合其他漏洞飒焦,如CSRF漏洞蜈膨,實施進一步作惡。

為什么XSS如此普遍和流行牺荠?

僅從技術上看該問題:

(1)Web瀏覽器本身的設計是不安全的翁巍。瀏覽器包含了解析和執(zhí)行JavaScript等腳本語言的能力,這些語言可用來創(chuàng)建各種格式豐富的功能休雌,而瀏覽器只會執(zhí)行灶壶,不會判斷數(shù)據(jù)和程序代碼是否惡意。

(2)輸入與輸出是Web應用程序最基本的交互杈曲,在這過程之中若沒做好安全防護例朱,Web程序很容易會出現(xiàn)XSS漏洞。

一個JavaScripts腳本來舉例說明:

<html>

 <head>test</head>

 <body>

   <script>alert("XSS")</script>

 </body>

</html>

把JavaScript加入到Web頁面中非常簡單鱼蝉,只要頁面中包含一個 script 標記洒嗤,就可以增加想要的JavaScript代碼。HTML的script元素標記中間包含JavaScript魁亦,這使瀏覽器知道:當它遇到script 標記時渔隶,不將此標記內(nèi)容處理成 HTML或XHTML,從這一點開始,對于內(nèi)容的控制權已轉(zhuǎn)移給另一個內(nèi)置的瀏覽器代理——腳本引擎處理间唉。

XSS攻擊就是將非法的JavaScript绞灼、VBscript等腳本注入到用戶瀏覽的網(wǎng)頁上執(zhí)行,而Web瀏覽器本身的設計是不安全的呈野,它只負責解釋和執(zhí)行JavaScript等腳本語言低矮,而不會判斷代碼本身是否對用戶有害。

XSS的分類

XSS根據(jù)其特性和利用手法的不同被冒,主要分成兩大類型:一種是反射型跨站腳本军掂;另一種是持久型跨站腳本。

反射型跨站腳本(Reflected Cross-site Scripting)也稱作非持久型昨悼、參數(shù)型跨站腳本蝗锥。這種類型的跨站腳本是最常見,也是使用最廣的一種率触,主要用于將惡意腳本附加到URL地址的參數(shù)中终议。

反射型XSS的利用一般是攻擊者通過特定手法(比如利用電子郵件),誘使用戶去訪問一個包含惡意代碼的URL葱蝗,當受害者單擊這些專門設計的鏈接的時候穴张,惡意JavaScript代碼會直接在受害者主機上的瀏覽器執(zhí)行。它的特點是只在用戶單擊時觸發(fā)两曼,而且只執(zhí)行一次陆馁,非持久化,所以稱為反射型跨站式腳本合愈。

此類 XSS 通常出現(xiàn)在網(wǎng)站的搜索欄叮贩、用戶登入口等地方,常用來竊取客戶端 Cookies 或進行釣魚欺騙佛析。

反射型XSS的危害往往不如持久型益老,因為惡意代碼暴露在URL參數(shù)中,只有用戶單擊方可觸發(fā)寸莫,稍微有點安全意識的用戶可以輕易看穿該鏈接是不可信任的捺萌。但一般URL轉(zhuǎn)碼后帶有迷惑性,路邊的URL不要隨便采膘茎。

持久型跨站腳本(Persistent Cross-site Scripting)也等于存儲型跨站腳本(Stored Cross-site Scripting)桃纯,比反射型跨站腳本更具威脅性,并且可能影響到Web服務器自身的安全披坏。此類XSS不需要用戶單擊特定URL就能執(zhí)行跨站腳本态坦,攻擊者事先將惡意JavaScript代碼上傳或存儲到漏洞服務器中,只要受害者瀏覽包含此惡意JavaScript代碼的頁面就會執(zhí)行惡意代碼棒拂。

持久型 XSS 一般出現(xiàn)在網(wǎng)站的留言伞梯、評論玫氢、博客日志等交互處,惡意腳本被存儲到客戶端或者服務器的數(shù)據(jù)庫中谜诫,當其他用戶瀏覽該網(wǎng)頁時漾峡,站點即從數(shù)據(jù)庫中讀取惡意用戶存入的非法數(shù)據(jù),然后顯示在頁面中喻旷,即在受害者主機上的瀏覽器執(zhí)行惡意代碼生逸。

測試的福音:XSS語句列表

XSS語句列表羅列了各種各樣的XSS代碼,這些XSS代碼在不同的瀏覽器且预、不同的應用場景槽袄、不同的環(huán)境下均有跨站觸發(fā)的可能。通常辣之,此類列表被稱為Cheat Sheet,即我們平時所指的備忘單皱炉。

國外著名安全工程師Rsnake是研究XSS方面的高手怀估,他把自己對XSS的研究心得總結成Cheat Sheet,并在其個人主頁分享了一份常見的XSS攻擊腳本列表合搅,可用來檢測Web應用程序是否存在XSS 漏洞多搀。

可以通過http://ha.ckers.org/xss.html 看到這份XSS Cheat Sheet。一些測試用例如下

表1


表2


表3
開發(fā)編程注意

通常情況下灾部,為了防御跨站腳本攻擊康铭,會在Web應用中設計一個XSS Filter,即跨站腳本過濾器赌髓,用于分析用戶提交的輸入从藤,并消除潛在的跨站腳本攻擊、惡意的HTML或簡單的HTML格式錯誤等锁蠕。XSS Filter一般是基于黑白名單的安全過濾策略夷野,即把要處理的數(shù)據(jù)分成白名單和黑名單兩大列表,白名單存放的是可信賴荣倾、對應用程序不構成威脅的數(shù)據(jù)列表悯搔,黑名單則相反。

(1)利用< >標記注射Html /Javascript舌仍。

如果用戶可以隨心所欲地引入< >等標記妒貌,那么他就能操作一個HTML標簽,然后通過<scirpt>標簽就能任意插入由JavaScript或Vbscript編寫的惡意腳本代碼铸豁,如:<script>alert('XSS'); </script>

因此灌曙,XSS Filter首當其沖要進行過濾和轉(zhuǎn)義的就是“< >”或 “<script>” 等字符。

(2)利用HTML標簽屬性值執(zhí)行XSS节芥。

很多HTML標記中的屬性都支持javascript:[code]偽協(xié)議的形式平匈,這個特殊的協(xié)議類型聲明了URL的主體是任意的JavaScript代碼,由JavaScript的解釋器運行。因為不是所有的Web瀏覽器都支持JavaScript偽協(xié)議增炭,所以此類XSS攻擊具有一定的局限性忍燥。

并不是所有標記的屬性值都能產(chǎn)生XSS,通常只有引用文件的屬性才能觸發(fā)跨站腳本隙姿。

總而言之梅垄,要防御基于屬性值的XSS,就要過濾JavaScript等關鍵字输玷。并非所有嵌入到Web頁面中的腳本都是JavaScript队丝,還有其他允許值,比如Vbscript欲鹏。

(3)空格回車Tab机久。

如果XSS Filter僅僅把敏感的輸入字符列入黑名單處理,如對敏感字 javascript而言赔嚎,用戶可以利用空格膘盖、回車和Tab鍵繞過限制,請看下面的例子:<img src="javas cript:alert(/xss/)" width=100>尤误,請注意javas和cript之間的間隔不是由空格鍵添加的侠畔,而是用【Tab】鍵添加的。

(4)對標簽屬性值轉(zhuǎn)碼损晤。

對普通HTML標記的屬性值進行過濾软棺,用戶可以通過編碼處理來繞過,因為HTML中屬性值本身支持ASCII碼形式尤勋。舉例把XSS代碼:<img src="javascript:alert('XSS');"> 換成:<img src="javascript:alert(/XSS/);" >

(5)產(chǎn)生自己的事件喘落。

假設用戶不依靠屬性值進行跨站,那還有沒有其他方法最冰?答案是肯定的揖盘,事件就是其中一種方法。JavaScript與HTML之間的交互是通過事件來實現(xiàn)的锌奴,事件就是用戶或瀏覽器自身執(zhí)行的某種動作兽狭,比如click、mouseover鹿蜀、load等箕慧,而響應事件的函數(shù)就叫做事件處理函數(shù)(或事件偵聽器)。

(6)利用CSS跨站剖析茴恰。

XSS跨站腳本的另一個載體是CSS樣式表颠焦,使用CSS樣式表執(zhí)行JavaScript具有隱蔽、靈活多變等特點往枣,但是 CSS 樣式表有一個很大的缺點:各瀏覽器之間不能通用伐庭,甚者可能同一瀏覽器不同版本之間都不能通用粉渠。使用CSS直接執(zhí)行JavaScript代碼的如下:

<div style="background-image:url(javascript:alert('XSS'))">

<style>

  body {background-image: url("javascript:alert('XSS')");}

</style>

(7)擾亂過濾規(guī)則。

利用前面所述的各種技巧圾另,包括 HTML 標簽屬性值霸株、事件、CSS集乔、編碼技術等去件,用戶能順利繞過XSS Filter的重重過濾。

一個正常的XSS輸入:<img src="javascript:alert(0);">

轉(zhuǎn)換大小寫后的XSS:<IMG SRC="javascript:alert(0);">

大小寫混淆的XSS:<iMg sRC="jaVasCript:alert(0);">

不用雙引號扰路,而是使用單引號的XSS:<img src='javascript:alert(0);'>

不使用引號的XSS:<img src=javascript:alert(0);>

拋開正常的XSS測試用例尤溜,運用以上的任何一種示例都有可能繞過XSS Filter。


看完上邊內(nèi)容大致了解了:在什么環(huán)境下可以觸發(fā)XSS汗唱,利用XSS漏洞可以做什么宫莱,如何防范此類攻擊等。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哩罪,一起剝皮案震驚了整個濱河市授霸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌识椰,老刑警劉巖绝葡,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件深碱,死亡現(xiàn)場離奇詭異腹鹉,居然都是意外死亡,警方通過查閱死者的電腦和手機敷硅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門功咒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绞蹦,你說我怎么就攤上這事力奋。” “怎么了幽七?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵景殷,是天一觀的道長。 經(jīng)常有香客問我澡屡,道長猿挚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任驶鹉,我火速辦了婚禮绩蜻,結果婚禮上,老公的妹妹穿的比我還像新娘室埋。我一直安慰自己办绝,他們只是感情好伊约,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孕蝉,像睡著了一般屡律。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昔驱,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天疹尾,我揣著相機與錄音,去河邊找鬼骤肛。 笑死纳本,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的腋颠。 我是一名探鬼主播繁成,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淑玫!你這毒婦竟也來了巾腕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤絮蒿,失蹤者是張志新(化名)和其女友劉穎尊搬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體土涝,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡佛寿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了但壮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冀泻。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜡饵,靈堂內(nèi)的尸體忽然破棺而出弹渔,到底是詐尸還是另有隱情,我是刑警寧澤溯祸,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布粪薛,位于F島的核電站矾芙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜才沧,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一忽媒、第九天 我趴在偏房一處隱蔽的房頂上張望注竿。 院中可真熱鬧辰妙,春花似錦、人聲如沸仆抵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舔糖,卻和暖如春娱两,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背金吗。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工十兢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摇庙。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓旱物,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卫袒。 傳聞我的和親對象是個殘疾皇子宵呛,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容