554,8554 - Pentesting RTSP

Support HackTricks

Basic Information

From wikipedia:

실시간 스트리밍 프로토콜 (RTSP)는 스트리밍 미디어 서버를 제어하기 위해 엔터테인먼트 및 통신 시스템에서 사용하도록 설계된 네트워크 제어 프로토콜입니다. 이 프로토콜은 엔드 포인트 간의 미디어 세션을 설정하고 제어하는 데 사용됩니다. 미디어 서버의 클라이언트는 서버에서 클라이언트로의 미디어 스트리밍(주문형 비디오) 또는 클라이언트에서 서버로의 미디어 스트리밍(음성 녹음)을 실시간으로 제어하기 위해 재생, 녹화 및 일시 정지와 같은 VHS 스타일의 명령을 발행합니다.

스트리밍 데이터 자체의 전송은 RTSP의 작업이 아닙니다. 대부분의 RTSP 서버는 미디어 스트림 전송을 위해 실시간 전송 프로토콜(RTP)과 실시간 제어 프로토콜(RTCP)을 함께 사용합니다. 그러나 일부 공급업체는 독점 전송 프로토콜을 구현합니다. 예를 들어, RealNetworks의 RTSP 서버 소프트웨어는 RealNetworks의 독점적인 실시간 데이터 전송(RDT)도 사용했습니다.

기본 포트: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Key Details

RTSP는 HTTP와 유사하지만 미디어 스트리밍을 위해 특별히 설계되었습니다. 간단한 사양이 정의되어 있으며, 여기에서 찾을 수 있습니다:

RTSP – 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 스크립트입니다:

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에 대한 정보를 얻고, 콘텐츠에 접근하기 위해 (필요한 경우) 무차별 대입 공격을 시도해 봅시다.

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

기타 유용한 프로그램

Bruteforce를 위해: https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

  • 접근 가능한 대상에서 열린 RTSP 호스트 감지

  • 그들의 공개 정보(호스트 이름, 포트, 카메라 모델 등) 가져오기

  • 스트림 경로를 얻기 위해 자동화된 사전 공격 시작(예: /live.sdp)

  • 카메라의 사용자 이름과 비밀번호를 얻기 위해 자동화된 사전 공격 시작

  • 스트림이 유효한지 확인하고 콘텐츠의 빠른 미리보기를 위해 썸네일 생성

  • 제대로 인코딩되었는지 확인하기 위해 Gstreamer 파이프라인 생성 시도

  • Cameradar가 얻을 수 있는 모든 정보의 요약 인쇄

References

Support HackTricks

Last updated