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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
来自 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,但专为媒体流设计。其简单明了的规范可在此处找到:
设备可能允许 无需认证 或 需要认证 访问。要检查,发送一个 "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 script:
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 获取对内容的访问权限。
nmap -sV --script "rtsp-*" -p <PORT> <IP>
使用 ffplay 查看 RTSP 流
一旦你发现了有效的 RTSP 路径(例如 /mpeg4
、/live.sdp
)并确认可以访问(无需认证或使用凭证),你就可以使用 ffplay
来播放该媒体流:
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
- 在任何可访问的目标上检测开放的 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
参考资料
- https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol
- http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/
- https://github.com/Ullaakut/cameradar
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。