# 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://: RTSP/1.0\r\nCSeq: 2` 请记住,正确的格式包括一个双 "\r\n" 以确保一致的响应。"200 OK" 响应表示 **未认证访问**,而 "401 Unauthorized" 则表示需要认证,揭示是否需要 **Basic** 或 **Digest authentication**。 对于 **Basic authentication**,您将用户名和密码编码为 base64,并将其包含在请求中,如下所示: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==` 此示例使用 "admin" 和 "1234" 作为凭据。以下是一个 **Python 脚本** 用于发送这样的请求: ```python import socket req = "DESCRIBE rtsp://: 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 ``` #### 使用 [ffplay](https://ffmpeg.org/ffplay.html) 查看 RTSP 流 一旦你发现了有效的 RTSP 路径(例如,`/mpeg4`,`/live.sdp`)并确认了访问权限(未认证或使用凭据),你可以使用 `ffplay` 来流式传输该视频源: ```bash ffplay -rtsp_transport tcp rtsp:///mpeg4 -x 2560 -y 1440 ``` - `-rtsp_transport tcp`:使用 TCP 而不是 UDP 以获得更可靠的流媒体 - `-x`,`-y`:可选标志以控制视频分辨率 - 根据需要替换 `` 和路径 ### [暴力破解](../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}}