Skip to content
KitploitKITPLOIT
ツールブログ
Log in
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/baldassarrefe/fep3370-advanced-ethical-hacking
脆弱性分析エクスプロイトネットワークセキュリティペネトレーションテスト学習と教育ラボと実践
GitHubbaldassarrefe/fep3370-advanced-ethical-hacking

FEP3370-advanced-ethical-hacking

DynoRoot (CVE-2018-1111) を使用した DHCP の悪用

リポジトリを見るウェブサイト
85年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

DynoRoot CVE-2018-1111

KTHストックホルムのコース高度な倫理的ハッキングの最終プロジェクト

このプロジェクトは、Dynamic Host Configuration Protocol (DHCP) の安全でないクライアント側実装に関連する、FedoraおよびRedHatマシンの既知の脆弱性を示しています。悪意のあるDHCPサーバーは、被害者マシンのルートシェルで実行される悪意のあるペイロードを含むDHCPオファーを巧みに作成できます。

この脆弱性はFelix Wilhelmによって報告され、CVE-2018-1111または「DynoRoot」として知られています。

目次:

  • はじめに
    • 背景
    • 脆弱性
    • 出典
  • セットアップ
    • 前提条件
    • ゲートウェイマシン
    • 攻撃者
    • Fedora被害者
  • 攻撃の実行
    • ゲートウェイ
    • 攻撃者
    • 被害者
    • 分析
  • 将来の作業
  • クレジット

はじめに

背景

Dynamic Host Configuration Protocol (DHCP) は、ネットワークシステムにおいてしばしば見落とされがちなコンポーネントです。その役割は、既存のネットワークに接続するホストマシンの動的な設定を可能にすることです。最も一般的な使用例は、新しく接続されたホストにIPアドレスを割り当て、他のネットワークにアクセスするための既存のルートを通知することです。ローカルDNSサーバーのアドレスやそのサーバーが提供するゾーン、ブートファイルの場所など、追加のオプションを指定することもできます。

新しいホストがイーサネットや無線接続を介してネットワークに物理的に接続した後、ネットワークに参加しようとする際に従う4ウェイプロトコルを分析してみましょう。

  1. IPアドレスを持たないクライアントは、DISCOVERメッセージをネットワークにブロードキャストします。
  2. そのネットワークを担当するDHCPサーバーは、IPアドレス、ネットワークサブマスク、ルーターアドレス、その他のオプションを含むOFFERで応答します。
  3. クライアントはREQUESTで応答し、提供されたIPアドレスを正式にリースするよう要求します。
  4. サーバーはACKで交換を終了し、クライアントが指定された期間そのIPアドレスを使用することを許可します。

初期交換後、クライアントは単に別のREQUESTメッセージを送信することでリースを更新できます。サーバーはクライアントのIPアドレスとMACアドレスによるリースの存在を確認し、ACKで応答します。

DHCPセッション(図はWikimedia Commons、CC BY-SA 4.0ライセンスに基づく)。

注意すべき点:

  • クライアントはDISCOVERフェーズをスキップして直ちにアドレスをREQUESTすることもできます。これは、クライアントが以前にネットワークに接続しており以前のアドレスを覚えている場合によく見られます。この場合、サーバーはアドレスの可用性を確認し、リクエストをACKするか、リースが利用できない場合はNACKを送信します。
  • 切断時、クライアントはRELEASEメッセージを送信してアドレスが利用可能になったことをサーバーに知らせることができます。ただし、これはプロトコルによって義務付けられておらず、サーバーは定期的に期限切れのリースを回収します。
  • 各DHCPサーバーは限られたIPアドレスのプールを管理しており、すべて割り当てられると、サーバーは新しいクライアントにOFFERリースを提供できなくなります。
  • 同じネットワーク上に複数のDHCPサーバーが存在する場合があります。クライアントが複数のOFFERを受け取った場合、1つだけを受け入れ、他のサーバーはブロードキャストされたREQUESTを観測してオファーを無効にします。

脆弱性

脆弱性は、/etc/NetworkManager/dispatcher.d/11-dhclientにあり、これはクライアントがDHCP経由で受信したオプションを解析および設定するために実行されます。

  • declareはbashの組み込み関数で、引数なしで使用するとすべての宣言された変数をリストします。
  • grepはすべてのDHCP関連変数をフィルタリングします。
  • while read optはDHCP変数を1つずつ繰り返し処理し、いくつかの解析を行い、各オプションに対してexport new_optionname=valueのような行を出力します。
  • そのエクスポート文は、evalによってシェルで評価されます。```bash eval "$( declare | LC_ALL=C grep '^DHCP4_[A-Z_]=' | while read opt; do optname=${opt%%=} optname=${optname,,} optname=new_${optname#dhcp4_} optvalue=${opt#*=} echo "export $optname=$optvalue" done )"
<!-- omit in toc -->
#### 通常の動作
通常、コードは問題なく動作し、新しいDHCPオプションを解析します。
例として、次のコード:```bash
DHCP4_OPTION_ONE=42
DHCP4_OPTION_TWO="bla bla"

declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
  optname=${opt%%=*}
  optname=${optname,,}
  optname=new_${optname#dhcp4_}
  optvalue=${opt#*=}
  echo "export $optname=$optvalue"
done

これら2つの export 文を表示し、eval で評価します:```bash export new_option_one=42 export new_option_two='bla bla'

<!-- omit in toc -->
#### コードインジェクション
しかし、安全でない `eval` のため、bashコマンドを注入することが可能です。```bash
DHCP4_OPTION_ONE="x'& echo Hacked! #"
DHCP4_OPTION_TWO='bla bla'

eval "$(                             
  declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
    optname=${opt%%=*}
    optname=${optname,,}
    optname=new_${optname#dhcp4_}
    optvalue=${opt#*=}
    echo "export $optname=$optvalue"
  done
)"

これにより、echo Hacked! が評価されます:```text [1] 1541 Hacked!

### ソース
- [Exploit database エントリ](https://www.exploit-db.com/exploits/44890)
- [RedHat アナウンス](https://access.redhat.com/security/vulnerabilities/3442151)
- [Tenable ブログ記事](https://www.tenable.com/blog/advisory-red-hat-dhcp-client-command-injection-trouble)
- [GitHub リポジトリ](https://github.com/kkirsche/CVE-2018-1111)
- [Twitter アナウンス](https://twitter.com/_fel1x/status/996388421273882626?lang=en)

## セットアップ
このエクスプロイトを実証するための最小限のセットアップは、`victim`マシン(Fedora 28 を実行)と`attacker`マシンの2台だけです。このセットアップでは、攻撃者はDHCPサービスを提供し、被害者の接続を待つだけで済みます。

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network_simple.svg" style="max-width:400px;" width="90%"/>
  <figcaption>最小限のエクスプロイトセットアップ。</figcaption>
</figure>

より現実的なセットアップでは、マシンをプライベートネットワーク上に配置し、3台目のマシンである`gateway`を、良性のDHCPサーバーとして、また外部インターネットへのゲートウェイとして設定します。このセットアップでは、攻撃者は攻撃を実行する前に、被害者が正規のDHCPサーバーに接続するのを防ぐ必要があります。

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network.svg" style="max-width:800px;" width="90%"/>
  <figcaption>ゲートウェイマシンがDHCP、ルーター、ファイアウォールとして動作するプライベートネットワークのセットアップ。</figcaption>
</figure>

以下のセクションでは、次のことを行います。
1. VirtualBox をインストールします。
2. 3台の仮想マシンを作成します:`gateway`、`attacker`、`victim`
3. マシンにOSをインストールします (ユーザー、ネットワーク、SSHアクセス)
4. VirtualBox が提供する仮想内部ネットワーク用に、良性のDHCPサーバーをホストするようにゲートウェイを設定します。
5. 攻撃に必要なPythonの依存関係をインストールします。

手動セットアップをスキップして [すぐにアクションに飛び込む](#performing-the-attack) には、`ansible`フォルダ内の [`setup.sh`](https://github.com/baldassarrefe/fep3370-advanced-ethical-hacking/blob/main/ansible/setup.sh) スクリプトを実行することができます。このスクリプトは、[Ansible Roles](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html) を使用して仮想マシンを(ほぼ)自動的に作成し、設定します。`setup.sh` を起動する前に、Ansible と VirtualBox がインストールされていることを確認してください。

### 前提条件

#### VirtualBox のインストール
以下の手順は、[公式インストールガイド](https://www.virtualbox.org/wiki/Downloads) からのものです。

次の行を `/etc/apt/sources.list` に追加します:```bash
deb [arch=amd64] 'https://download.virtualbox.org/virtualbox/debian' bionic contrib

virtualbox と extension pack をインストールしてください:```bash wget -q 'https://www.virtualbox.org/download/oracle_vbox_2016.asc' -O- | sudo apt-key add - wget -q 'https://www.virtualbox.org/download/oracle_vbox.asc' -O- | sudo apt-key add -

sudo apt-get update sudo apt-get -y install gcc make linux-headers-$(uname -r) dkms virtualbox-6.1

wget 'https://download.virtualbox.org/virtualbox/6.1.16/Oracle_VM_VirtualBox_Extension_Pack-6.1.16.vbox-extpack' sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.16.vbox-extpack VBoxManage list extpacks

#### Ansibleのインストール(オプション)
「[Ubuntu用公式ガイド](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-ubuntu)」より:```bash
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

共通SSHセットアップ

このセクションでは、マシンにログインするために使用するSSH認証情報を作成します。 SSH設定ファイルにホストエントリを追加すると、後でタイピングを節約できます。

パスフレーズなしのSSHキーを作成します:```bash ssh-keygen -f ~/.ssh/ethhack -t ed25519 -N ''

SSH config (`~/.ssh/config`) に以下のエントリを追加してください:```
Host gateway.ethhack
  Port 6001
  User gateway   

Host victim.ethhack
  Port 6002
  User victim

Host attacker.ethhack
  Port 6003
  User attacker
ツールをダウンロード