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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2023-27216 — ファームウェアハッキングへの初心者のアプローチ | Kitploit
ツール/GitHubGitHub/hoangrealer/cve-2023-27216
組み込みシステムセキュリティIoTセキュリティ脆弱性分析リバースエンジニアリングデバッガハードウェアハッキング学習と教育ファームウェア解析バイナリエクスプロイト
GitHubhoangrealer/cve-2023-27216

CVE-2023-27216

ファームウェアハッキングへの初心者のアプローチ

リポジトリを見る
32年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2023-27216 - DLink ルーター

このドキュメントは、ファームウェアのリバースエンジニアリングとエクスプロイトの初心者である私の個人的な経験を記録したものです。 Firmwhere??

スコープ

デモンストレーションとして、CVE-2023-27216 を解析・再現します。

  • CVE番号: CVE-2023-27216
  • 脆弱性の説明: D-Link DSL-3782 v.1.03 で発見された問題。リモートの認証済みユーザーがネットワーク設定ページを介してルート権限で任意のコードを実行できる。
  • 機器モデル: D-Link DSL-3782
  • ファームウェアバージョン: DSL-3782_A1_EU_1.01
  • メーカー公式サイト: http://www.dlink.com.cn/
  • ファームウェアのアドレス: https://media.dlink.eu/support/products/dsl/dsl-3782/driver_software/dsl-3782_a1_eu_1.01_07282016.zip

タスク

ファームウェアをエクスプロイトするには、以下の手順があります:

  • ファームウェアを入手する。2つの方法があります:ハードウェア(カメラ、ルーター、プリンターなど)から直接抽出するか、メーカーのウェブサイトから入手する。これについては別のドキュメントで説明します。
  • ファームウェアを解析して脆弱性を見つける
  • ファームウェアをエミュレートする。
  • デバッグ用に gdbserver をスタティックにビルドする。

ファームウェアの解析

通常、ファームウェアのバイナリファイルには、ブートローダー(uBoot)、カーネルファイル、ブートローダー用のカーネルヘッダー(uImage)、圧縮ファイルシステム(一般的に SquashFS 形式)、CRC/MD5テーブル(ファイルの整合性を検証するため)、その他の雑多なファイルが含まれています。

まずファームウェアを解析する方法を調べ、調査を行い、いくつかのリソースを入手しました:

  • Binwalkを使用してファームウェアを解析・抽出する
  • エミュレーション方法: https://boschko.ca/qemu-emulating-firmware/ Binwalk check signature

重要なファイルの抽出

binwalkを使用してファームウェアを抽出する: binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin Binwalk extract

抽出された squashfs-root フォルダといくつかの奇妙なファイルが得られました。 Extracted files

ボーナス: squashfs-root フォルダが見当たらない場合は、表示されている ".squashfs" ファイルに対して unsquashfs を使用してください。それらはZIPファイルのようなものです 😅。

ファームウェアの動作を分析する

ファームウェアのアーキテクチャとエンディアンを確認します。これは、ファームウェアから抽出したバイナリを確認することでチェックできます。アーキテクチャとファームウェアを確認するには: file <binary> Firmware Architecture

ここで、ファームウェアがMIPS 32ビットMSBアーキテクチャで動作することをほぼ確認できます。「ほぼ」の理由は、一部のファームウェアが Lexra のような MIPS互換 の異なるアーキテクチャで動作する可能性があるためです。

squashfs-root フォルダを確認すると、いくつかの興味深いファイルが見つかりました:

  • usr/etc/init.d/rcS => これはファームウェアの起動時に実行されるスクリプトです
  • usr/etc/passwd => これはユーザー情報を含むファイルです
  • userfs/romfile.cfg => 認証情報 admin:admin があります

rcS ファイルを確認すると、いくつかの興味深いコードが見つかりました:

root@kitploit:~
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
  • このコードは、ユーザー情報を passwd ファイルに書き込むために使用されます
  • boa server というWebサーバーを実行します。Boa は古いWebサーバーで、主に2000年代のルーターなどの組み込みデバイスで使用されていました。しかし、boaサーバーの開発は2005年にすでに停止しています!Boaサーバーは約20年前に開発が終了しましたが、ベンダーのおかげで今日でも生き続けています。 Boa boot

フルシステムファームウェアエミュレーション

エミュレーションプロセスには、Ubuntu や Kali などのDebianベースのOSを使用することをお勧めします。ファームウェアハッキングに特化した別のOSとして AttifyOS もあります。このドキュメントでは、Kali Linuxを使用しました。エミュレーションプロセスを始めるにあたり、2つのツールがあります:

  • QEMU => 車輪の再発明はしないでください 🙏 🛐
  • FAT- Firmware-analysis-toolkit => 動作します。ソースコードを読めば何をしているかわかります。

Stick with it

FAT を使用してファームウェアを完全にエミュレートする方法を見ていきましょう。まず、githubからリポジトリをKaliマシンにクローンします。そしてセットアッププロセスを進めます。fat.config ファイルも変更する必要があります。そうしないと機能しません。

root@kitploit:~
git clone https://github.com/attify/firmware-analysis-toolkit.git

cd firmware-analysis-toolkit

./setup.sh

vi fat.config # Modify to your sudo password.

次に、メーカーからダウンロードしたファームウェアバイナリをKaliマシンの FAT のフォルダにコピーして実行します。

root@kitploit:~
./fat.py DSL-3782_A1_EU_1.01_07282016.bin

注: FAT のセットアッププロセス中にエラーが発生する可能性があります。libmagicがないと表示されるかもしれません。 Fat run fail

単純に次のコマンドを実行してください

root@kitploit:~
pip unistall python-magic
pip install python-magic

これで問題が解決するはずです。その後、ビルドコマンドを再度実行します。今度は完璧に動作するはずです。

Fat run nice

Enter を押して実行します。エミュレーションプロセスが正常に動作し、http://192.168.1.1(Kaliマシン上)にブラウザでアクセスして動作を確認できます。

Router main page

認証情報があればコンソールにログインすることもできます。ここでは admin:admin です。

Console login

エミュレートされたファームウェアを停止する場合は、Ctrl+A X を押してください。再度実行する必要がある場合、ファームウェアはすでにイメージにビルドされているため、fat.py を再度実行しないでください。生成済みのスクリプトを実行するだけでOKです。

root@kitploit:~
cd firmadyne/scratch/<Image-ID>
./run.sh

Rerun the image

デバッガー

デバッグ目的で gdbserver をビルドします。gdbserver をビルドする方法はいくつかあります。静的にビルドされたサーバーをダウンロードすることもできます。静的にビルドされたものを保存しているリポジトリがあります。しかし、githubリポジトリのものはかなり古く、互換性の問題が発生する可能性があるため、私は自分で gdbserver をビルドする方を好みます。

参考としてこちらのブログ記事を参照してください https://sheran.sg/blog/cross-compile-gdb-for-mips/。ブログは2024年7月30日にアップロードされました。このプロジェクトの直前なので、完璧に動作します。 注: ブログは MIPS x32 LSB 用にビルドされていますが、私たちには MIPS x32 MSB が必要です。mipsel-linux-gnu を mips-linux-gnu に変更する必要があります。

ビルド手順

MIPS 用のツールチェーンをインストールする必要があります。幸い、Debianパッケージにすでに含まれています。

root@kitploit:~
**apt update && apt upgrade -y
apt install -y build-essential m4 gcc-mips-linux-gnu g++-mips-linux-gnu**

MIPS 用の gdbserver をビルドするには、ビルドしてインストールする必要があるパッケージがいくつかあります。ソースの入手先は以下の通りです。

  1. gdb 15.1 - https://sourceware.org/pub/gdb/releases/gdb-15.1.tar.xz
  2. GNU GMP lib v6.3.0 - https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
  3. GNU MPFR lib v4.2.1 - https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

ソースの入手

root@kitploit:~
wget https://sourceware.org/pub/gdb/releases/gdb-15.1.tar.xz
wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
wget https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

ツールチェーンでライブラリをビルドする これらのライブラリをビルドする際にroot権限を持つことが重要です。MPFRをビルドするための要件であるため、最初にGMPをビルドする必要があります。

root@kitploit:~
tar xvf gmp-6.3.0.tar.xz && cd gmp-6.3.0
./configure --host=mips-linux-gnu
make -j$((`nproc`+1))
make install
cd ..

次にMPFRをビルドします:

root@kitploit:~
tar xvf mpfr-4.2.1.tar.xz && cd mpfr-4.2.1
./configure --host=mipsel-linux-gnu --with-gmp-build=<YOUR-FOLDER>/gmp-6.3.0
make -j$((`nproc`+1))
make install
cd ..

これでようやくgdbserverをビルドできます:

root@kitploit:~
tar xvf gdb-15.1.tar.xz && cd gdb-15.1
./configure --host=mipsel-linux-gnu --with-gmp-lib=/usr/local/lib --with-mpfr-lib=/usr/local/lib --with-gmp-include=<YOUR-FOLDER>/gmp-6.3.0 --with-mpfr-include=<YOUR-FOLDER>/mpfr-4.2.1/src
make -j$((`nproc`+1)) LDFLAGS=-static

ビルドされたバイナリ gdbserver は gdb-15.1/gdbserver フォルダにあります。

gdbserverをファームウェアイメージにプッシュする

エミュレートされたファームウェアには wget、nc、curl、/dev/tcp などがありません。ファイル転送用のPython HTTPサーバーをホストすることはできません。ssh もありません。しかし、イメージをマウントすることで gdbserver をエミュレートされたマシンに配置できます。

  • sudo ./scripts/mount.sh 1
  • 静的にビルドされた gdbserver をマウントされたフォルダ内の任意の場所にコピーします。
  • sudo ./scripts/umount.sh 1
  • qemuを再起動します(念のため ./run.sh を再度実行)。

Push gdbserver to image

Test gdbserver

ポートフォワーディング

これでKaliマシン内でデバッグとハッキングを実行できます。しかし、さらに一歩進んで、エミュレートされたマシンをホストマシン(WindowsやMac)にポートフォワーディングすることもできます。

ネットワークを確認する

まず ifconfig を使用してネットワークを確認しましょう。 ifconfig

結果から、eth0 と tap1_0 の2つのインターフェースがあることがわかります。知られているように、eth0 はホストとの共有ネットワークのインターフェースで、tap1_0 はエミュレートされたファームウェアマシンのインターフェースです。

理解を容易にするために、eth0 のネットワークはパブリックネットワークのようなもので、ホストマシンからKaliマシンにアクセスできます。tap1_0 はプライベートネットワークのようなもので、Kaliマシンからしかアクセスできません。eth0 から tap1_0 インターフェースのポート 192.168.1.1:80 への接続をフォワーディングする必要があります。

ポートフォワーディングを許可する

これを支援するツールはたくさんあります。しかし、設定方法を知っていれば iptables が最もよく機能するようです。

まずポートフォワーディングを許可する必要があります。次のコマンドを実行します:

root@kitploit:~
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

これは1セッションのみに適用されます。永続的に適用する場合は、/etc/sysctl.conf の内容を変更します。

root@kitploit:~
net.ipv4.ip_forward=1 # Find this line, uncomment it.

完了したらファイルを保存して閉じます。

次に、このファイルの設定を適用します。次のコマンドを実行します:

root@kitploit:~
sudo sysctl -p
sudo sysctl --system

iptablesでのポートフォワーディング

通常、一連の iptables コマンドを実行できます。しかし、それは非常に面倒です 😵‍💫。iptables-persistent ツールをインストールできます。これにより、設定ファイルを作成してロードしたり、チェーンをファイルに抽出したりできます。すべて迅速に実行できます。

root@kitploit:~
apt install iptables-persistent

ここで変更したい設定ファイルは /etc/iptables/rules.v4 です。ファイルの内容を以下の内容に変更します。

root@kitploit:~
*filter
:INPUT ACCEPT [37:22880]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [35:2330]
# Forward HTTP Port
-A FORWARD -i eth0 -o tap1_0 -p tcp --dport 80 -d 192.168.1.1 -j ACCEPT
-A FORWARD -i tap1_0 -o eth0 -p tcp --sport 80 -s 192.168.1.1 -j ACCEPT
# Forward Debugger port
-A FORWARD -i eth0 -o tap1_0 -p tcp --dport 31337 -d 192.168.1.1 -j ACCEPT
-A FORWARD -i tap1_0 -o eth0 -p tcp --sport 31337 -s 192.168.1.1 -j ACCEPT

COMMIT
# Completed on Wed Aug  7 09:32:11 2024
# Generated by iptables-save v1.8.10 (nf_tables) on Wed Aug  7 09:32:11 2024
*nat
:PREROUTING ACCEPT [60:5405]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [1096:50947]
-A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 192.168.1.1
-A POSTROUTING -o tap1_0 -p tcp -d 192.168.1.1 -j MASQUERADE

注意: すべてのポートを許可すると、多くのセキュリティ問題が発生します。すべてのポートを DROP してから、必要な数だけ FORWARD することをお勧めします。

保存してiptablesチェーンを更新します。

root@kitploit:~
service netfilter-persistent reload

これでホストの外部からアクセスできます。 Access outside host

脆弱性

エクスプロイト可能なエンドポイントが複数あります。そのうち2つは cfg_manager バイナリ内にあります。そのうちの1つだけをデモンストレーションします。もう1つは自分で見つけてください。

お気に入りのデコンパイラにバイナリを投げて、すべての system コマンドを確認すると、これが表示されるかもしれません。このコマンドは /etc/lanconfig.sh というファイルを実行します。

System command runs a file

このファイルを使用する可能性のある他の場所を確認したところ、ファイルを書き込める場所を見つけました。

File write

その動作を説明します:

  • 関数は /etc/lanconfig.sh を開きます
  • mxmlElementGetAttr という関数を呼び出します。これは、オブジェクトから属性を見つける関数だと思います。HTTPリクエストから直接または間接的に取得される可能性があり、XMLの可能性もあります。
  • sprintf を使用して、mxmlElementGetAttr から取得した属性から文字列を作成します。
  • 次に fputs を使用してファイルに書き込みます。

すぐに、Webフォルダ boaroot 内で IP、netmask に関連するものを検索し、これを見つけました。boaウェブサーバーのドキュメントは非常に限られているため、POSTパラメータ lan_ip1 をバイナリから呼び出されるXMLの IP パラメータに渡しているのだと推測するしかありません。

Bug entrypoint

インターフェース上で、バグを引き起こすリクエストを見つけることができます。それは 設定 > ネットワーク にあります。

Network Setting location Network Setting UI

Save を押したときにBurpsuiteでリクエストをインターセプトします。

Burp intercept and hack

ペイロード 192.168.1.1;utelnetd -p 8090 -l /bin/sh; はリバースシェルです。接続して実行できます。

alt text

ボーナス

似たようなもので、FAT より優れているかもしれません。試したことはありません -> FirmAE。

Binary Ninja は学生ステータスがあれば74ドルです。ライセンスは誰とでも共有できます。

CVE に関連するその他のバグ:

CVE

これもRCEにつながる可能性があります。自分で試してみてください。その場所 data_4c0160 のメモリはどこかに注入できる可能性があります 🫡。

CVE2

Thank you

参考

  • https://bbs.kanxue.com/thread-278413.htm
  • https://secnigma.wordpress.com/2022/01/18/a-beginners-guide-into-router-hacking-and-firmware-emulation/
  • https://www.ringzerolabs.com/2018/03/the-wonderful-world-of-mips.html
  • https://sheran.sg/blog/cross-compile-gdb-for-mips/
  • https://boschko.ca/qemu-emulating-firmware/
  • https://wiki.bi0s.in/hardware/firmware/firmware-re/
  • https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables
  • https://www.youtube.com/watch?v=7W5YC8kenZE
ツールをダウンロード