07.04 瀏覽器攻擊框架BeEF Part 1

預備知識

在看這個系列之前,讀者最好要有一定知識儲備。首先是對HTTP協議(CORS、 CSP等)要有一定的理解,其次是理解Web安全的常見攻擊技術的原理和防禦方法(比如XSS、CSRF、SQL inject等), 最後如果讀者懂javascript語言就更好(可選,筆者的js也不咋地)。筆者認為學習BeEF框架的難度大概和學習Metasploit、 Burp Suite 的難度差不多。

下面給出學習這些知識的參考:

HTTP 協議相關文檔: https://developer.mozilla.org/zh-CN/docs/Web/HTTP

瀏覽器攻擊技術原理: 黑客攻防技術寶典瀏覽器實戰篇 (書)

BeEF 框架相關文檔: https://github.com/beefproject/beef/wiki

同源策略

說到攻擊瀏覽器,那麼就一定要說同源策略(Same Origin Policy, SOP)。 同源策略是用於限制不同來源的資源之間的交互。在瀏覽器上定義了對於不同的頁面,如果他們的主機名、協議和端口都相同,即為同源。記得三個要素主機名、協議和端口。來個例子:

http://www.A.com/index.html 的js是不能讀/寫 http://www.B.com/index.html, https://www.A.com/index.html, http://www.A.com:8080/index.html 的內容。

BeEF框架

BeEF( The Browser Exploitation Framework) 是由Wade Alcorn 在2006年開始創建的,至今還在維護。是由ruby語言開發的專門針對瀏覽器攻擊的框架。這個框架也屬於cs的結構,具體可以看下圖:

瀏覽器攻擊框架BeEF Part 1

zombie(殭屍)即受害的瀏覽器。zombie是被hook(勾連)的,如果瀏覽器訪問了有勾子(由js編寫)的頁面,就會被hook,勾連的瀏覽器會執行初始代碼返回一些信息,接著zombie會每隔一段時間(默認為1秒)就會向BeEF服務器發送一個請求,詢問是否有新的代碼需要執行。BeEF服務器本質上就像一個Web應用,被分為前端UI, 和後端。前端會輪詢後端是否有新的數據需要更新,同時前端也可以向後端發送指示, BeEF持有者可以通過瀏覽器來登錄BeEF 的後臺管理UI。

BeEF 安裝和配置

BeEF 需要ruby 2.3 + 和 SQLite (或者mysql/postgres)。

在kali下使用BeEF

kali默認已經安裝BeEF了。BeEF是Favorites 菜單中的一個(可以看出它的受歡迎程度和地位了),其標誌是一個藍色的公牛。命令是beef-xss:

瀏覽器攻擊框架BeEF Part 1

打開五秒後,它還會使用瀏覽器打開管理頁面的UI,默認帳號密碼是:beef/beef,默認管理頁面的UI 地址是:http://127.0.0.1:3000/ui/panel

kali已經把beef-xss做成服務了,推薦使用systemctl 命令來啟動或關閉beef服務器

systemctl start beef-xss.service #開啟beef
systemctl stop beef-xss.service #關閉beef
systemctl restart beef-xss.service #重啟beef

在ubuntu17.10中安裝BeEF

如果只是作為測試或者學習,使用kali中beef就已經足夠了。如果是希望在真實環境中使用,那麼就需要一臺擁有獨立ip的主機(能被訪問),下面筆者介紹在一臺vps,系統是ubuntu 17.10系統中安裝的過程, 如果沒有vps, 可以跳過這一部分。

首先在vps中,初始用戶一般是root。root是沒法安裝某些ruby的一些擴展包(考慮到安全問題),所以需要一個降權的用戶。

#創建一個beef的用戶
useradd -m -d /home/beef -s /bin/bash beef
#設置beef的密碼,最好使用強密碼
passwd beef
#把beef用戶加入sudo, root 組
usermod -aG root,sudo beef
#轉到beef用戶

su beef

接著就是安裝beef了

#進入家目錄
cd
#獲取源文件
wget https://github.com/beefproject/beef/archive/master.zip
sudo apt update && sudo apt upgrade -y && sudo apt install unzip ruby ruby-dev -y
#解壓master.zip
unzip master.zip
cd beef-master
#安裝beef
./install

筆者在安裝過程中遇到/var/lib/gems/2.3.0, /usr/local/bin 這兩個目錄沒有寫權限的錯誤,下面是解決方法:

sudo chmod g+w /var/lib/gems/2.3.0
sudo chmod g+w /usr/local/bin
#再次運行
./install

環境不同也許讀者會遇到別的錯誤。遇到錯誤可以先看一下錯誤信息,看看能否自行解決,如果不行,那麼就查找網上幫助。在互聯網中,想要找一個問題的答案,使用錯誤信息來搜索往往是最快的。

把beef從sudo, root 組中移除:

#運行

sudo chmod g-w /var/lib/gems/2.3.0 && sudo chmod g-w /usr/local/bin

sudo gpasswd -d beef root && gpasswd -d beef sudo

最後運行beef, 建議別使用root來運行beef服務器, 既然已經創建了一個id為beef的用戶,那麼以後都以這個用戶來運行beef服務器會更好。

#進入beef所在目錄
cd /home/beef/beef-master
#以後臺模式運行beef服務器,且即使ssh斷開了,也不影響beef 服務器。
nohup ./beef &

配置BeEF

kali下的BeEF配置文件在 /usr/share/beef-xss/config.yaml,其它的配置文件也在這個目錄的子目錄下,往後在使用某些功能時,需要修改對應的配置文件。自主安裝的BeEF配置文件會在BeEF的主目錄下config.yaml,建議修改幾個地方:

### 指定某個網段,只有在這個網段的瀏覽器才能被hook
permitted_hooking_subnet: "0.0.0.0/0"
### 指定某個網段,只有在這個網段的瀏覽器才能訪問管理UI
permitted_ui_subnet: "0.0.0.0/0"
### 上面這兩項都是可以被繞過的,只要使用X-Forwarded-For首部繞過,一般不需要設置
### 設置beef服務器的主機, 如果有自己的域名, 那麼可以設置自己的域名, 沒有就使用默認
host: "0.0.0.0"
### 設置beef服務器監聽的端口, 可以自己定一個,比如8080, 記得端口號需要大於1024

port: "3000"
### 受害瀏覽器輪詢beef主機的時間, 默認為1秒,可以設置為更低。
xhr_poll_timeout: 1000
#public: "" # public hostname/IP address
#public_port: "" # experimental
### 這是讓BeEF運行在一個反向代理或者NAT環境下才需要設置的。
### 管理頁面的URI, 默認是/ui, 建議修改,這樣就不會讓別人找到你的管理頁面
web_ui_basepath: "/ui"
### hook_file 的名稱, 建議修改, 可以修改為jquery.js之類的來提升隱蔽性
hook_file: "/hook.js"
### 管理頁面登錄的用戶名和密碼, 這個一定要改,兩個都改是最好的
credentials:
user: "beef"
passwd: "beef"

小試牛刀

接下來實際使用BeEF,體驗一下。先開啟BeEF服務器,接著用瀏覽器訪問管理頁面http://127.0.0.1:3000/ui/panel, 使用設置的用戶/密碼登錄。

接著訪問有勾子的頁面http://127.0.0.1:3000/demos/basic.html 這裡的主機名和端口號要按照你設置的來修改, 這裡要注意一下kali下beef版本的勾子不支持IE8,最新版或者舊一些的版本可以。所以要使用其他瀏覽器來訪問有勾子的頁面。

下面給出一個寫有勾子的頁面,把創建文件test.html,並把下面內容寫到其中:






Hello World


接著使用一個瀏覽器來打開,那麼這個瀏覽器就會被hook了。

查看管理頁面UI會是類似下面圖:

瀏覽器攻擊框架BeEF Part 1

瀏覽器攻擊框架BeEF Part 1

選一個簡單的模塊來試試, 下圖是選用了Host –> Detect Virtual Machine 模塊來查看受害瀏覽器是否在虛擬機上運行的:

瀏覽器攻擊框架BeEF Part 1

BeEF的入門使用就是這麼簡單,所有的功能都已經寫好了,我們只需要選擇模塊,設置參數(有時不需要),點擊Execute 就可以了。 當然必須知道這些模塊的作用才行。

讀者可能發現在每個模塊的前面都有一個有色(綠色,灰色,橙色,紅色)的小圓標誌。

瀏覽器攻擊框架BeEF Part 1

在內部,BeEF可以檢測出哪些命令模塊可以在當前受害的瀏覽器工作, 並用顏色表示:

綠色:命令模塊可以在目標瀏覽器上運行,且用戶不會感到任何異常

橙色:命令模塊可以在目標瀏覽器上運行,但是用戶可能會感到異常(比如可能會有彈窗,提示,跳轉等)

灰色:命令模塊尚未針對此目標進行驗證,即不知道能否可運行

紅色:命令模塊不適用於此目標


分享到:


相關文章: