554,8554 - Pentesting RTSP
Reading time: 7 minutes
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
出典: wikipedia:
Real Time Streaming Protocol (RTSP) は、エンターテインメントや通信システムでストリーミングメディアサーバーを制御するために設計されたネットワーク制御プロトコルです。プロトコルはエンドポイント間でメディアセッションを確立・制御するために使用されます。メディアサーバーのクライアントは、VHSスタイルのコマンド(play、record、pause など)を発行して、サーバーからクライアントへのメディアストリーミング(Video On Demand)やクライアントからサーバーへの送信(Voice Recording)をリアルタイムで制御します。
ストリーミングデータ自体の送信は RTSP の役割ではありません。ほとんどの RTSP サーバーは、メディアストリーム配信に Real-time Transport Protocol (RTP) と Real-time Control Protocol (RTCP) を併用します。ただし、ベンダーによっては独自のトランスポートプロトコルを実装している場合があります。例えば、RealNetworks の RTSP サーバーソフトウェアは、RealNetworks の独自プロトコルである Real Data Transport (RDT) を使用していました。
既定のポート: 554,8554
PORT STATE SERVICE
554/tcp open rtsp
重要なポイント
RTSP は HTTP に似ていますが、メディアストリーミング向けに特化して設計されています。仕様は次のドキュメントに定義されています:
デバイスは**未認証(unauthenticated)または認証あり(authenticated)**のアクセスを許可している場合があります。確認するには "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 script です:
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)
Basic authentication の方がシンプルで推奨されます。Digest authentication は、"401 Unauthorized" レスポンスで提供される認証情報を注意深く扱う必要があります。
この概要では、RTSP ストリームへのアクセス手順を簡略化し、初期の試行における簡便性と実用性のために Basic authentication に焦点を当てます。
列挙
有効なメソッドやサポートされている URLs に関する情報を取得し、必要に応じて brute-force でアクセスを試みてコンテンツに到達できるか確認します。
nmap -sV --script "rtsp-*" -p <PORT> <IP>
ffplay を使って RTSP ストリームを表示する
有効な RTSP パス(例: /mpeg4, /live.sdp)を見つけ、アクセス権(未認証または資格情報によるもの)を確認したら、ffplay を使ってフィードをストリーミングできます:
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
-rtsp_transport tcp: より信頼性の高いストリーミングのために UDP の代わりに TCP を使用する-x,-y: ビデオ解像度を制御する任意のフラグ- 必要に応じて
<IP>とパスを置き換える
Brute Force
その他の便利なプログラム
Bruteforceするには: https://github.com/Tek-Security-Group/rtsp_authgrinder
- アクセス可能な任意のターゲット上でオープンな RTSP ホストを検出する
- ホストの公開情報(hostname、port、camera model など)を取得する
- ストリームのルート(例: /live.sdp)を取得するために自動化された dictionary attacks を起動する
- カメラの username と password を取得するために自動化された dictionary attacks を起動する
- それらからサムネイルを生成して、ストリームが有効か確認し、内容を素早くプレビューする
- 正しくエンコードされているか確認するために Gstreamer パイプラインを作成しようとする
- Cameradar が取得できたすべての情報のサマリを出力する
参照
32100 Udp - Pentesting Pppp Cs2 P2p Cameras
参考
- https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol
- http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/
- https://github.com/Ullaakut/cameradar
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks