554,8554 - Pentesting RTSP

Reading time: 6 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

基本信息

来自 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,但专为媒体流设计。其简单明了的规范可在此处找到:

RTSP – RFC2326

设备可能允许 无需认证需要认证 访问。要检查,发送一个 "DESCRIBE" 请求。下面给出一个基本示例:

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2

请记住,正确的格式包含双重 "\r\n" 以获得一致的响应。返回 "200 OK" 表示 无需认证访问,而 "401 Unauthorized" 则表示需要认证,并会显示是否需要 BasicDigest authentication

对于 Basic authentication,将用户名和密码以 base64 编码并像下面这样包含在请求中:

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==

此示例使用 "admin" 和 "1234" 作为凭据。下面是一个用于发送该请求的 Python script

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)

Basic authentication 更简单且更受偏爱。Digest authentication 需要仔细处理在 "401 Unauthorized" 响应中提供的认证细节。

本概述简化了访问 RTSP 流的过程,重点关注 Basic authentication,因为它在初次尝试时更简单且更实用。

Enumeration

让我们收集有关支持的有效 methods 和 URLs 的信息,并在需要时尝试通过 brute-force 获取对内容的访问权限。

bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>

使用 ffplay 查看 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> 和路径

Brute Force

其他有用的程序

To bruteforce: https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

  • 在任何可访问的目标上检测开放的 RTSP 主机
  • 获取它们的公开信息(hostname、port、camera model 等)
  • 发起自动化的 dictionary attacks 以获取其 stream route(例如 /live.sdp)
  • 发起自动化的 dictionary attacks 以获取摄像头的 username 和 password
  • 从流中生成缩略图以检查流是否有效并快速预览其内容
  • 尝试创建一个 Gstreamer pipeline 以检查它们是否被正确编码
  • 打印 Cameradar 能获取的所有信息的摘要

See also

32100 Udp - Pentesting Pppp Cs2 P2p Cameras

参考资料

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