日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

0x00 前言

在過去幾周中,FortiGuard Labs一直在研究帶有SVG(Scalable Vector Graphics)圖像的Web應用。根據研究結果,我們找到了Web應用中的一些常見問題。在本文中,我們簡要介紹了SVG的特點以及針對SVG圖像的常見攻擊面。

根據之前的研究結果,我們梳理了一些常見的SVG攻擊方式,如下所示:

  • 跨站腳本(Cross-Site Scripting)
  • html注入
  • XML實體:“Billion Laughs”攻擊(針對XML文檔解析器的一種DoS攻擊)
  • DoS(拒絕服務):新型SVG “Billion Laughs”攻擊。

0x01 SVG簡介

SVG的全稱為 Scalable Vector Graphics(可縮放矢量圖),是一種基于XML的二維矢量圖格式,支持交互性及動畫展示。SVG圖像及具體行為由XML文本文件定義,可以通過任何文本編輯器以及繪圖軟件來創建并編輯。目前所有主流web瀏覽器都支持渲染SVG圖像。

來觀察一個示例,更好理解SVG圖像。如下圖所示,我們編寫了一些代碼來渲染SVG圖像:

SVG在Web攻擊中的應用

 

圖1. simple.svg代碼片段

將該圖像保存為simple.svg,然后直接打開,或者將其包含在img/image/object/embed HTML標簽中,如下圖所示:

SVG在Web攻擊中的應用

 

圖2. 通過代碼渲染圖像

圖1代碼渲染生成的圖像如圖2所示,這是rect元素,瀏覽器會在x, y (100, 100)(即寬度和高度)位置渲染一個紅色矩形。

0x02 使用SVG的攻擊場景

雖然SVG提供了較大的靈活性,可以方便創建更多的動態web內容,但同時也引入了一些安全風險。在下文中,我們將討論一些常見的攻擊向量,我們在互聯網上的一些主流站點上都觀察到過這些攻擊方式。

跨站腳本

我們可以通過腳本方式來訪問并修改SVG文檔的任何內容,這與HTML操作方式類似。默認的腳本語言為ECMAScript(與JAVAScript密切相關),每個SVG元素及屬性都對應已定義的DOM(Document Object Model,文檔對象模型)對象。相關腳本被封裝在<script>元素中。

這意味著如果web服務器允許用戶上傳任意SVG圖像,就存在XSS(跨站腳本)安全風險。如下所示,我們將腳本存放在圖像中:

SVG在Web攻擊中的應用

 

圖3. xss.svg代碼片段

將該圖像保存為xss.svg,然后直接打開,如下圖所示:

SVG在Web攻擊中的應用

 

圖4. 直接訪問該文件觸發XSS

如果將該文件鏈接到某個HTML頁面,訪問該頁面也可以觸發,如下圖所示:

SVG在Web攻擊中的應用

 

圖5. 通過鏈接文件觸發XSS

JavaScript代碼會在瀏覽器上下文中執行,這意味著攻擊者可以使用該文件執行惡意行為,比如竊取用戶隱私信息等。

HTML注入

在某些情況下,XSS payload會被服務端過濾,然而我們依然能夠通過SVG圖像的特定功能來注入HTML代碼。如前文所述,SVG是基于XML的一種矢量圖,因此我們無法簡單將HTML內容放入其中,不然會破壞XML的語法。

為了避免這種情況,SVG提供了一個foreignObject元素,可以用來包含來自其他XML命名空間的元素。在瀏覽器上下文中,這部分數據很可能采用(X)HTML形式。

來看一下html.svg圖像:

SVG在Web攻擊中的應用

 

圖6. html.svg代碼片段

當我們在foreignObject內添加一個body標簽以及XHTML命名空間時,可以使用xmlns屬性來聲明命名空間。采用這種方式,瀏覽器會將body標簽及其所有子標簽解析為屬于XHTML的元素。因此,我們可以將來自SVG的任意XHTML代碼渲染到頁面中:

SVG在Web攻擊中的應用

 

圖7. HTML注入漏洞

這種方式可以運行任意HTML代碼,意味著我們可以簡單從SVG圖像中發起類似釣魚、繞過同源策略、CSRF之類的攻擊。

XML實體:Billion Laughs Attack

由于SVG是基于XML的矢量圖,因此可以支持Entity(實體)功能。Entity可以用來定義特殊字符的快捷方式,也可以聲明成內部或外部實體。

我們可以通過如下方式聲明內部Entity:

<!ENTITY entity-name "entity-value">

通過如下方式聲明外部Entity:

<!ENTITY entity-name SYSTEM "URI/URL">

如果解析文件的XML解析器存在脆弱性,那么我們就可以濫用外部Entity功能來泄露內部數據。由于現在大家主要使用的都是現代瀏覽器,因此我們假設可用的解析器都經過fuzzer的嚴格測試,因此沒那么容易被攻擊。在這個前提下,這里我們主要討論如何濫用內部Entity。

entity.svg的內部實現如下所示:

SVG在Web攻擊中的應用

 

圖8. entity.svg代碼片段

如上圖所示,我們在第2行定義lab這個Entity,然后在SVG元素中調用該實體。結果如圖9所示:

SVG在Web攻擊中的應用

 

圖9. lab實體被加載到頁面

一切非常順利,來嘗試另一個例子:entity_2.svg,如下圖所示:

SVG在Web攻擊中的應用

 

圖10. entity_2.svg代碼片段

結果如下:

SVG在Web攻擊中的應用

 

圖11. lab2實體被加載到頁面

如上圖所示,這里的文本內容被重復渲染,這表明我們可以使用Entity標簽發起“ Billion Laughs ”攻擊。

“ Billion Laughs ”攻擊是一種DoS(拒絕服務)攻擊,目標是XML文檔解析器。這種攻擊也被稱之為XML炸彈或者指數實體攻擊。

SVG在Web攻擊中的應用

 

圖12. billion_laughs.svg代碼片段

我們的瀏覽器在解析這個 billion_laughs.svg數據時,只花了4~5秒就能正常響應。這是因為大多數現代瀏覽器已經能夠能應付這種攻擊,可以在渲染過程中解決該問題,因此不會造成安全風險。

拒絕服務:新型SVG “Billion Laughs”攻擊

在上一節中,我們發現“ Billion Laughs ”攻擊可以延緩瀏覽器的處理速度,瀏覽器需要4~5秒才能應付該攻擊。不幸的是,攻擊者還可以通過SVG圖像,發起另一種“ Billion Laughs ”攻擊,繞過這些防御措施。

這一次我們使用xlink:href來代替XML Entity。來看一下 xlink_laughs.svg所使用的payload:

SVG在Web攻擊中的應用

 

圖13. xlink_laughs.svg代碼片段

xlink:href屬性以IRI(國際資源標識)方式定義了對某個資源的引用,該鏈接的具體含義需根據使用該鏈接的每個元素的上下文來決定。

<use>元素從SVG文檔中獲取節點,然后將其復制到其他位置。

我們現在a0中定義circle元素,然后在a1、a2、a3……中通過xlink:href屬性調用<use>元素,通過這種方式反復克隆circle。結果如下圖所示:

SVG在Web攻擊中的應用

 

圖14. 在解析惡意SVG時,通過xlink:href發起“ Billion Laugh”攻擊

需要注意的是,在最壞的情況下,大多數現代瀏覽器在嘗試解析網站上的這張SVG圖像時可能會發生崩潰,或者至少會出現無響應情況。

有趣的是,我們在測試某些開源SVG/XML過濾器時,發現這些過濾器并不能正確捕捉到圖13所示的SVG圖像。因此,這種錯誤格式的SVG圖像也可能造成DoS效果。

0x03 總結

SVG圖像更像HTML,而不單單是一張簡單的圖像。因此,我們建議web開發者盡可能不要以對象或者iframe形式加載任何SVG。Web管理員同樣應當限制可以上傳到站點的文件類型。

此外,任何不可信的SVG圖像在被上傳到服務端前都必須經過過濾處理,可以采取如下操作:

  • 限制危險標簽,比如script、foreignObject等。
  • 限制通過SVG圖像的外部鏈接加載資源。
  • 限制SVG圖像內的擴展邏輯。

我們使用一些瀏覽器來直接打開這些惡意SVG文件,對比結果如下圖所示:

SVG在Web攻擊中的應用

 

大家可以訪問我們的Github倉庫下載本文使用的SVG樣本。

0x04 參考資料

[1] W3C, “Scalable Vector Graphics” https://www.w3.org/TR/SVG2/ (02 September, 2019)
[2] OWASP, “The Image that called me” https://www.owasp.org/images/0/03/Mario_Heiderich_OWASP_Sweden_The_image_that_called_me.pdf (02 September, 2019)
[3] Blackhat, “Exploiting Browsers without Image Parsing Bugs” https://www.blackhat.com/docs/us-14/materials/us-14-DeGraaf-SVG-Exploiting-Browsers-Without-Image-Parsing-Bugs.pdf (02 September, 2019)

原文鏈接:https://www.anquanke.com/post/id/190651

分享到:
標簽:攻擊 Web
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定