跨站腳本攻擊(XSS)

  • XSS簡(jiǎn)介

    • 跨站腳本攻擊,英文全稱是Cross Site Script,本來縮寫是CSS,但是為了和層疊樣式表(Cascading Style Sheet,CSS)有所區(qū)別,所以在安全領(lǐng)域叫做"XSS"。
    • XSS,通常指黑客通過“HTML注入”篡改了網(wǎng)頁,插入了惡意的腳本,從而在用戶瀏覽網(wǎng)頁時(shí),控制用戶瀏覽器的一種攻擊。在一開始,這種攻擊的演示案例是跨越的,所以叫“跨站腳本呢”。但是發(fā)展到今天,由于JavaScript的強(qiáng)大功能以及網(wǎng)站前端應(yīng)用的復(fù)雜化,是否跨站已經(jīng)不再重要。
    • 反射型XSS
      • 反射型XSS只要簡(jiǎn)單地把用戶輸入的數(shù)據(jù)“反射”給瀏覽器,也就是說,黑客往往需要誘使用戶“點(diǎn)擊”一個(gè)惡意連接,才能成功。反射性XSS也叫做“非持久型XSS”
    • 存儲(chǔ)型XSS
      • 存儲(chǔ)型XSS會(huì)把用戶輸入的數(shù)據(jù)“存儲(chǔ)”在服務(wù)器端。這種XSS具有很強(qiáng)的穩(wěn)定性。存儲(chǔ)型XSS通常也叫做”持久性XSS“
    • DOM Based XSS
      • DOM Based XSS從效果上來說也是反射型XSS。單獨(dú)劃分出來,是因?yàn)镈OM Based XSS的形成原因比較特別。發(fā)現(xiàn)它的安全專家專門提出了這種類型的XSS。
  • XSS攻擊進(jìn)階

    • 初探XSS Payload
      • XSS攻擊成功后,攻擊者能夠?qū)τ脩舢?dāng)前瀏覽的頁面植入惡意腳本,通過惡意腳本,控制用戶的瀏覽器。這些用以完成各種具體功能的惡意腳本嗎,被稱為”XSS Payload”。
    • 構(gòu)造GET和pOST請(qǐng)求
    • XSS釣魚
    • 識(shí)別用戶瀏覽器
    • 識(shí)別用戶安裝的軟件
    • CSS History Hack (失效)
    • 獲取用戶的真實(shí)IP地址
      • javascript本身并沒有提供獲取本地IP地址的能力, 一般來說,XSS攻擊需要借助第三方軟件來完成。比如,客戶端安裝了Java環(huán)境(JRE),那么XSS就可以通過調(diào)用JavaApplet的接口來獲取客戶端的本地IP地址
      • Metasploit 引擎曾展示過一個(gè)強(qiáng)大的測(cè)試頁面,綜合了Java Applet、Flash、iTunes、Office Word、QuickTime等第三方軟件的功能,抓取用戶的本地信息。
    • Xss攻擊平臺(tái)
      • Attack API,它總結(jié)了很多能夠直接使用XSS Payload歸納為API的方式。
      • BeFF,曾經(jīng)是最好的XSS演示平臺(tái)。BeFF所演示的是一個(gè)完整的XSS攻擊過程。BeFF有一個(gè)控制后臺(tái),攻擊者可以在后臺(tái)控制前端的一切。
      • XSS-Proxy,是一個(gè)輕量級(jí)的XSS攻擊平臺(tái),通過嵌套iframe的方式可以實(shí)時(shí)地遠(yuǎn)程控制被XSS攻擊的瀏覽器
    • XSS worm
    • 調(diào)試javascript
      • firebug、IE 8 Developer Tools、Fiddler、HttpWatch
  • XSS構(gòu)造技巧

    • 利用字符編碼構(gòu)造

    • 繞過長(zhǎng)度限制

      • 利用location.hash可以繞過
      • 利用注釋符繞過長(zhǎng)度限制
    • 使用<base>標(biāo)簽

      <body>
      <base >
      <img src="/intl/en_ALL/images/srpr/logolw.png">
      </body>
      
      • <base>標(biāo)簽將指定其后的標(biāo)簽?zāi)J(rèn)從"http://www.google.com"取
      • 需要特別注意的是,在有的技術(shù)文檔中,提到<base>標(biāo)簽只能用于<head>標(biāo)簽之內(nèi),其實(shí)這是不對(duì)的,<base>標(biāo)簽可以出現(xiàn)頁面的任何地方,并作用于位于該標(biāo)簽之后的所有標(biāo)簽。
      • 所以在設(shè)計(jì)XSS安全方案時(shí),一定要過濾掉這個(gè)非常危險(xiǎn)的標(biāo)簽
    • window.name的妙用

      • 對(duì)當(dāng)前窗口的winodw.name對(duì)象復(fù)制,攻擊者利用這個(gè)對(duì)象,可以實(shí)現(xiàn)跨域、跨頁面?zhèn)鬟f數(shù)據(jù)。

            <script>
             window.name = "alert(docunment.cookie)"
             location.href="http://www.xssedsite.com/xssed.php
            </script>
        
      • 到新的窗口后執(zhí)行eval(name)

  • XSS的防御

    • HttpOnly
      • HttpOnly標(biāo)記的Cookie不能被瀏覽器讀取。
      • 但是,HttpOnly不是萬能的,添加了HttpOnly不等于解決了XSS問題
      • 使用HttpOnly有助于緩解XSS攻擊,但仍然需要其他能夠解決XSS漏洞的方案
    • 輸入檢查
      • XSS Filter
    • 輸出檢查
      • 安全的編碼函數(shù)
    • 只需一種編碼嗎
    • 正確的防御XSS
      • 在HTML標(biāo)簽中輸出,使用HtmlEncode
      • 在HTML屬性中輸出,使用HtmlEncode
      • 在<script>標(biāo)簽中輸出,使用JavascriptEncode
      • 在事件中輸出,使用JavascriptEncode
      • 在CSS中輸出,盡量禁止用戶可控制的變量在CSS中輸出,如果必須,那么,使用OWASP ESAPI中的encodeForCSS()函數(shù)
      • 在地址中輸出,可以用URLEncode,但是整個(gè)URL的時(shí)候,可以用OWASP ESAPI中的一個(gè)URLEncode實(shí)現(xiàn)(此API未解決為偽協(xié)議的問題)
      • 處理富文本,應(yīng)該使用白名單,避免使用黑名單,還要進(jìn)行專門的過濾
    • 防御DOM Based XSS
      • DOM Based XSS是一種比較特別的XSS漏洞,前文提到的幾種防御方法都不太使用,需要特別對(duì)待。
      • DOM Based XSS是從javascript輸出到HTML頁面的,而不是從服務(wù)器應(yīng)用直接輸出到HTML頁面的。
      • 首先,在輸出到<script>時(shí),應(yīng)該執(zhí)行一次JavascriptEncode,其次,在DOM輸出到HTML頁面的時(shí)候,要分具體情況看待,如果是輸出到事件過著腳本,則要再做一次javascriptEncode,如果輸出到HTML內(nèi)容或著屬性,則要做一次HtmlEncode。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容