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

6 KiB
Raw Blame History

554,8554 - 渗透测试 RTSP

从零开始学习 AWS 黑客技术,成为专家 htARTEHackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

基本信息

来自 维基百科

实时流媒体传输协议RTSP)是一种网络控制协议,旨在用于娱乐和通信系统中控制流媒体服务器。该协议用于在端点之间建立和控制媒体会话。媒体服务器的客户端发出类似 VHS 样式的命令,如播放、录制和暂停,以便实时控制从服务器流媒体到客户端(视频点播)或从客户端到服务器(语音录制)的媒体流。

流媒体数据的传输本身不是 RTSP 的任务。大多数 RTSP 服务器与实时传输协议RTP结合使用实时控制协议RTCP进行媒体流传递。但是一些供应商实现了专有的传输协议。例如RealNetworks 的 RTSP 服务器软件还使用了 RealNetworks 的专有实时数据传输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

请记住,正确的格式包括双 "\r\n" 以获得一致的响应。"200 OK" 响应表示未经身份验证的访问,而 "401 Unauthorized" 表示需要进行身份验证,揭示了是否需要基本身份验证摘要身份验证

对于基本身份验证,您需要将用户名和密码进行 base64 编码,并将其包含在请求中,如下所示:

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

此示例使用 "admin" 和 "1234" 作为凭据。以下是一个用于发送此类请求的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未经授权”响应中提供的身份验证细节。

本概述简化了访问RTSP流的过程重点介绍了基本身份验证,因为在最初尝试中,它更简单且实用。

枚举

让我们获取有关支持的有效方法和URL的信息并尝试暴力破解访问如果需要以访问内容。

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

暴力破解

其他有用的程序

用于暴力破解:https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

  • 检测任何可访问目标上的开放RTSP主机
  • 获取它们的公共信息(主机名、端口、摄像头型号等)
  • 启动自动字典攻击以获取它们的流路由(例如/live.sdp
  • 启动自动字典攻击以获取摄像头的用户名和密码
  • 从中生成缩略图,以检查流是否有效,并快速预览其内容
  • 尝试创建一个Gstreamer管道以检查它们是否被正确编码
  • 打印Cameradar能获取的所有信息的摘要

参考资料

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式