3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Binary Ninja MCPでPwnするぞ

Last updated at Posted at 2025-12-20

これは ZOZO Advent Calendar 2025 カレンダーVol.12の21日目の記事です。昨日の投稿は@chichi1091さんでした。

はじめに

こちらはBinary NinjaのMCP機能を試してみる記事です。CTFの問題をBinaryNinjaとAIでどれだけ解けるか頑張ってみたいと思います!

使用するToolたちは以下です。

環境準備

MCP Server on Binary Ninja

まずMCPサーバの設定をします。
Free以上を利用している場合は「Plugin Manager」があるので、そこからMCPを検索します。
スクリーンショット 2025-12-16 21.46.38.png
スクリーンショット 2025-12-16 21.51.06.png

「Binary Ninja MCP」を選択してInstallします。
Binary Ninjaを再起動すると「Plugins」のタブの中に「MCP Server」の欄ができると思いますので、そこで「Start MCP Server」とかクリックするとMCPサーバがlocalhost:9009で起動します。

MCP Client

以下のリポジトリをクローンしてきます。

次にClient用のPython仮想環境を作成します。Python3.12以上が必要です。
以下コマンドで適当にvenv環境作りましょう。

python3.12 -m venv .venv

source ./.venv/bin/activate

pip install -r ./bridge/requirements.txt

あとはこのToolをClaude CodeのMCPの設定に突っ込むだけですね。

Claude Code

以下でMCPの設定を入れます。

{
  "mcpServers": {
    "binary_ninja_mcp": {
      "command": "[PATH to]/binary_ninja_mcp/.venv/bin/python",
      "args": [
        "[PATH to]/binary_ninja_mcp/bridge/binja_mcp_bridge.py"
      ]
    }
  }
}

Claude Codeの「設定」から「開発者」タブで以下のようにうまく読み込めていたら設定OKです!
スクリーンショット 2025-12-16 22.34.31.png

Pwn - CTFの問題を解かせる

Daily AlpacaHack

今回解いてもらう問題は、以下のAlpacaHackの「Daily AlpacaHack」の問題です。

初心者に楽しんでもらえるようなシンプルな問題・教育的問題を毎日1問出題します。
月〜金は新規の問題、土日は新たに移植したCTFの過去問を公開します。

上記のような趣旨のイベントで、初心者にも取り組みやすい問題が1日1つ出題される感じです!
Writeupも出題から24時間後に投稿できるので、猛者の回答などをみつつ取り組めたりするのもいいですね!素晴らしいイベントです!

Integer Writer

Claude Codeさんにはこの5日目の問題「Integer Writer」に取り組んでもらいます。
スクリーンショット 2025-12-16 222517.png
提供ファイルにはCソースコードがありますが、バイナリだけで頑張ってもらいます。

Let's MCP

ではやっていきます!
バイナリをBinary Ninjaさんに食わせます。
スクリーンショット 2025-12-16 22.52.22.png
パッと見たところ、pos >で上限100までを見ており書き込むポインタ(Stack)の位置を制限しています。
ただ上限は制限していますが、負の値など下限は設定されていません。負の値を入れてStackのreturnアドレスをwinのアドレス0x4011d6などに書き換えてあげればShellが取れそうですね。

これをAIさんが見つけることができるのか!
Claude Codeに聞いてみます。

AIが解けるってマジ???

とりあえず脆弱性有無を聞きます。
スクリーンショット 2025-12-17 8.45.52.png
スクリーンショット 2025-12-17 8.48.22.png
スクリーンショット 2025-12-17 8.48.39.png
おお!脆弱な部分だけじゃなくExploit方針まで提案してくれてる!
優秀すぐる。
BinaryNinjaのログも見てみる。
スクリーンショット 2025-12-17 9.29.11.png
おお、きておる!
もう少し踏み込んで聞いてみる。
スクリーンショット 2025-12-17 9.30.43.png
スクリーンショット 2025-12-17 9.40.16.png

Stack領域内から出ちゃう位置を提案してきちゃった。。。
Canaryを気にして上手くExploitできてなさそうな気ガス。
__stack_chk_fail()がデコンパイル結果から見えてしまってるのが良くないのかな?
ヒントは与えずに何もわからない体で聞き直してみる。
スクリーンショット 2025-12-17 9.42.36.png
スクリーンショット 2025-12-17 9.44.21.png
Oh、Stackの位置からGOTのアドレスに飛び込もうとしている...
違う違うそうじゃない!
ただ、DisassemblyでStackレイアウトを見てくれるのはとても良いですね!

しょうがない、特大ヒントを与えましょう。
スクリーンショット 2025-12-17 9.48.00.png
スクリーンショット 2025-12-17 9.48.47.png
お、今度はうまくいきそうな答えを出してきました。
試してみます。
スクリーンショット 2025-12-17 9.50.38.png
うまくいきました!Pwnedです。
Exploitの考案まではヒントとなる情報提供など人の介入が必要そうですね。

最後に

BinaryNinja MCPを用いてCTF Pwnの問題をAIに解かせてみました!
脆弱性の調査までくらいなら良い感じに提案してくれそうですね!後のExploit考案は若干軌道修正が必要そうです。

Pwnは初心者には難しい部分もあるかもしれませんが、AIに手助けしてもらえればある程度説明もしてくれて知識を補完しながら、Chat形式で学べる良い体験になるかもなと思いました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?