hacktricks/src/network-services-pentesting/554-8554-pentesting-rtsp.md

86 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 554,8554 - Pentesting RTSP
{{#include ../banners/hacktricks-training.md}}
## 基本情報
From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
> The **Real Time Streaming Protocol** (**RTSP**) は、ストリーミングメディアサーバーを制御するためにエンターテインメントおよび通信システムで使用されるネットワーク制御プロトコルです。このプロトコルは、エンドポイント間のメディアセッションを確立し、制御するために使用されます。メディアサーバーのクライアントは、サーバーからクライアントへのメディアストリーミングVideo On DemandやクライアントからサーバーへのメディアストリーミングVoice Recordingをリアルタイムで制御するために、再生、録画、一時停止などのVHSスタイルのコマンドを発行します。
>
> ストリーミングデータ自体の伝送はRTSPのタスクではありません。ほとんどのRTSPサーバーは、メディアストリームの配信のためにリアルタイムトランスポートプロトコルRTPとリアルタイム制御プロトコルRTCPを併用しています。ただし、一部のベンダーは独自のトランスポートプロトコルを実装しています。たとえば、RealNetworksのRTSPサーバーソフトウェアは、RealNetworksの独自のReal Data TransportRDTも使用しています。
**デフォルトポート:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Key Details
**RTSP**はHTTPに似ていますが、メディアストリーミング専用に設計されています。これは、ここにある簡潔な仕様で定義されています
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
デバイスは**未認証**または**認証済み**のアクセスを許可する場合があります。確認するために、「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スクリプト**です:
```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)
```
**基本認証**はより簡単で好まれます。**ダイジェスト認証**は、「401 Unauthorized」レスポンスで提供される認証詳細を慎重に扱う必要があります。
この概要は、RTSPストリームへのアクセスプロセスを簡素化し、初期の試行におけるそのシンプルさと実用性のために**基本認証**に焦点を当てています。
## 列挙
有効なメソッドとサポートされているURLに関する情報を取得し、必要に応じてコンテンツへのアクセスを得るためにブルートフォースを試みましょう。
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
#### RTSPストリームの表示 [ffplay](https://ffmpeg.org/ffplay.html)を使用して
有効なRTSPパス`/mpeg4``/live.sdp`)を発見し、アクセスを確認したら(認証なしまたは資格情報を使用)、`ffplay`を使用してフィードをストリーミングできます:
```bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
```
- `-rtsp_transport tcp`: より信頼性の高いストリーミングのためにUDPの代わりにTCPを使用
- `-x`, `-y`: 動画解像度を制御するためのオプションフラグ
- 必要に応じて`<IP>`とパスを置き換える
### [ブルートフォース](../generic-hacking/brute-force.md#rtsp)
### **その他の便利なプログラム**
ブルートフォース用: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
- アクセス可能なターゲット上のオープンRTSPホストを検出
- それらの公開情報を取得(ホスト名、ポート、カメラモデルなど)
- ストリームルートを取得するために自動辞書攻撃を実行(例: /live.sdp
- カメラのユーザー名とパスワードを取得するために自動辞書攻撃を実行
- ストリームが有効かどうかを確認し、その内容のクイックプレビューを得るためにサムネイルを生成
- 適切にエンコードされているかを確認するためにGstreamerパイプラインを作成しようとする
- Cameradarが取得できたすべての情報の概要を印刷
## 参考文献
- [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol)
- [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
- [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
{{#include ../banners/hacktricks-training.md}}