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

86 lines
4.2 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}}
## 基本信息
来自 [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
> **实时流媒体协议** (**RTSP**) 是一种网络控制协议旨在用于娱乐和通信系统以控制流媒体服务器。该协议用于在端点之间建立和控制媒体会话。媒体服务器的客户端发出类似于VHS的命令如播放、录制和暂停以便实时控制从服务器到客户端视频点播或从客户端到服务器语音录制的媒体流。
>
> 流数据的传输本身不是RTSP的任务。大多数RTSP服务器使用实时传输协议RTP与实时控制协议RTCP结合进行媒体流传输。然而一些供应商实现了专有的传输协议。例如RealNetworks的RTSP服务器软件也使用RealNetworks的专有实时数据传输RDT
**默认端口:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## 关键细节
**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>
```
#### 使用 [ffplay](https://ffmpeg.org/ffplay.html) 查看 RTSP 流
一旦你发现了有效的 RTSP 路径(例如,`/mpeg4``/live.sdp`)并确认了访问权限(未认证或使用凭据),你可以使用 `ffplay` 来流式传输该视频源:
```bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
```
- `-rtsp_transport tcp`:使用 TCP 而不是 UDP 以获得更可靠的流媒体
- `-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}}