hacktricks/network-services-pentesting/554-8554-pentesting-rtsp.md
2023-07-07 23:42:27 +00:00

10 KiB
Raw Blame History

554,8554 - RTSPのペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

リアルタイムストリーミングプロトコルRTSPは、エンターテイメントや通信システムで使用するために設計されたネットワーク制御プロトコルであり、ストリーミングメディアサーバーの制御に使用されます。このプロトコルは、エンドポイント間のメディアセッションの確立と制御に使用されます。メディアサーバーのクライアントは、VHSスタイルのコマンド再生、録画、一時停止などを発行して、サーバーからクライアントへのメディアストリーミングビデオオンデマンドまたはクライアントからサーバーへのメディアストリーミング音声録音をリアルタイムに制御します。

ストリーミングデータの送信自体は、RTSPのタスクではありません。ほとんどのRTSPサーバーは、メディアストリームの配信にリアルタイムトランスポートプロトコルRTPとリアルタイム制御プロトコルRTCPを併用しています。ただし、一部のベンダーは独自のトランスポートプロトコルを実装しています。たとえば、RealNetworksのRTSPサーバーソフトウェアは、RealNetworksの独自のReal Data TransportRDTも使用しています。

wikipediaから。

デフォルトポート: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

詳細情報

まず、RTSPはHTTPのようなプロトコルです。構造と制御コマンドは異なりますが、テキスト形式であり、コマンドの基本と相互作用の方法を学べば、かなり簡単に使用できます。RTSPの仕様は非常にわかりやすいです。以下にリンクを示します

RTSP - RFC2326

RTSPは、認証なしでアクセスできる場合市販のデバイスでは一般的と、認証が必要な場合があります。認証されたアクセスは、HTTPと同様にBasic認証とDigest認証があり、どちらもHTTPとほぼ同じです。デバイスが認証されているかどうかを確認するには、単純な「DESCRIBE」リクエストを送信します。単純なDESCRIBEリクエストは次のようになります

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\n\r

注意:信頼性のある応答のために、追加の「\r\n」が必要です。一部のシステムは単一の「\r\n」を受け入れますが、ほとんどのシステムは受け入れません。

これは生のソケットに送信できます。HTTPと同様に、認証されていないアクセスが利用可能であることを示す成功した応答には「200 OK」が含まれます。DESCRIBEの場合、ビデオフィードのすべての操作パラメータも含まれます。

デバイスが認証を必要とする場合、応答には「401 Unauthorized」が含まれます。応答には、利用可能な認証メカニズムも示されます。Basic認証が利用可能な場合、応答文字列には「WWW-Authenticate: Basic」という情報行が含まれます。Basic認証に関連するその他の情報は、基本的な認証を実行するためにはほとんど関係ありません。

Digest認証が必要な場合、応答の「401 Unauthorized」には「WWW-Authenticate: Digest」という情報行が含まれます。Digest仕様の情報は、Digest認証を行う場合に非常に重要ですので、無視しないでください。

Basic認証が利用可能であることを示す応答が得られれば、Basic認証を使用します。利用できない場合、Digest認証要素を組み立てるための3つの異なる方法がありますので、Digest認証は特にブラインド認証なしの場合には問題が発生する可能性があります。この記事の残りの部分では、Basic認証に焦点を当てます。Digest認証の秘密のソースを解読した後に、後続の記事を書くかもしれません。

Basic認証要素を作成するには、単純に<username> ":" <password>をBase64エンコードしてリクエストに追加するだけです。したがって、新しいリクエストは次のようになります

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r

再度、リクエストは二重の「\r\n」で終了することに注意してください。

値YWRtaW46MTIzNA==は、ユーザー名とパスワードを「:」で連結したものをBase64エンコードしたものです。この場合、私は「admin」/「1234」を使用しました。これを試すための簡単なPythonスクリプトは次のようになります

import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.1", 554))
s.sendall(req)
data = s.recv(1024)
print(data)

以下は、RTSPのペネトレーションテストに関する情報です。

From: http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/

列挙

有効なメソッドとURLがサポートされているかどうかの情報を取得し、必要に応じてアクセスをブルートフォースしてコンテンツにアクセスします。

nmap -sV --script "rtsp-*" -p <PORT> <IP>

ブルートフォース

その他の便利なプログラム

ブルートフォース攻撃に使用する: https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

Cameradarを使用すると、以下のことができます

  • アクセス可能なターゲット上のオープンなRTSPホストを検出する
  • パブリック情報(ホスト名、ポート、カメラモデルなど)を取得する
  • ストリームルート(例:/live.sdpを取得するための自動辞書攻撃を実行する
  • カメラのユーザー名とパスワードを取得するための自動辞書攻撃を実行する
  • ストリームが有効かどうかを確認し、その内容のクイックプレビューのためにサムネイルを生成する
  • 正しくエンコードされているかを確認するためにGstreamerパイプラインを作成しようとする
  • Cameradarが取得できたすべての情報の要約を表示する
  • https://github.com/Ullaakut/cameradar
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥