mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
86 lines
5.8 KiB
Markdown
86 lines
5.8 KiB
Markdown
# 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 Transport(RDT)も使用しています。
|
||
|
||
**デフォルトポート:** 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}}
|