554,8554 - Pentesting RTSP
基本情報
wikipediaから:
リアルタイムストリーミングプロトコル(RTSP)は、エンターテイメントおよび通信システムで使用するために設計されたネットワーク制御プロトコルです。このプロトコルは、エンドポイント間のメディアセッションを確立および制御するために使用されます。メディアサーバのクライアントは、VHSスタイルのコマンド(再生、録画、一時停止など)を発行して、サーバからクライアントへのメディアストリーミング(ビデオオンデマンド)またはクライアントからサーバへのメディアストリーミング(音声録音)をリアルタイムで制御します。
ストリーミングデータの伝送自体は、RTSPのタスクではありません。ほとんどのRTSPサーバは、メディアストリームの配信にリアルタイムトランスポートプロトコル(RTP)とリアルタイムコントロールプロトコル(RTCP)を併用します。ただし、一部のベンダーは独自のトランスポートプロトコルを実装しています。たとえば、RealNetworksのRTSPサーバソフトウェアは、RealNetworksの独自のReal Data Transport(RDT)も使用しています。
デフォルトポート: 554,8554
主な詳細
RTSPはHTTPに似ていますが、メディアストリーミング用に特別に設計されています。こちらで定義されています:
デバイスは未認証または認証済みアクセスを許可する場合があります。確認するためには、「DESCRIBE」リクエストを送信します。基本的な例を以下に示します:
DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2
正しいフォーマットには、一貫した応答のために二重の"\r\n"が含まれていることを覚えておいてください。"200 OK"応答は未認証アクセスを示し、"401 Unauthorized"は認証が必要であることを示し、Basic認証またはDigest認証が必要かを明らかにします。
Basic認証の場合、ユーザー名とパスワードをbase64でエンコードし、次のようにリクエストに含めます:
DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==
この例では、資格情報として「admin」と「1234」を使用しています。以下はそのようなリクエストを送信するPythonスクリプトです:
基本認証はよりシンプルで好まれます。ダイジェスト認証は、「401 Unauthorized」レスポンスで提供される認証詳細の注意深い取り扱いが必要です。
この概要では、初期の試みにおいてシンプルさと実用性から基本認証に焦点を当て、RTSPストリームへのアクセスプロセスを簡略化します。
列挙
有効なメソッドとURLに関する情報を取得し、必要に応じてアクセスをブルートフォースしてコンテンツにアクセスしよう。
その他の便利なプログラム
Bruteforceに使用する: https://github.com/Tek-Security-Group/rtsp_authgrinder
任意のアクセス可能なターゲット上のオープンなRTSPホストを検出する
それらの公開情報を取得する(ホスト名、ポート、カメラモデルなど)
ストリームルートを取得するための自動辞書攻撃を実行する(例:/live.sdp)
カメラのユーザー名とパスワードを取得するための自動辞書攻撃を実行する
ストリームが有効かどうかを確認し、内容のクイックプレビューを取得するためにサムネイルを生成する
適切にエンコードされているかどうかを確認するためにGstreamerパイプラインを作成しようとする
Cameradarが取得できたすべての情報の要約を表示する
参考文献
Last updated