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