554,8554 - Pentesting RTSP
Reading time: 4 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 지원하기
- 구독 계획 확인하기!
 - **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
 - HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
 
기본 정보
출처: wikipedia:
Real Time Streaming Protocol (RTSP)는 엔터테인먼트 및 통신 시스템에서 스트리밍 미디어 서버를 제어하기 위해 사용하도록 설계된 네트워크 제어 프로토콜이다. 이 프로토콜은 종단 간 미디어 세션을 설정하고 제어하는 데 사용된다. 미디어 서버의 클라이언트는 VHS 스타일 명령(예: 재생, 녹화, 일시정지)을 발행하여 서버에서 클라이언트로의 미디어 스트리밍(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와 유사하지만 미디어 스트리밍 전용으로 설계되었습니다. 명확한 사양은 다음에서 확인할 수 있습니다:
장치에 따라 unauthenticated 또는 authenticated 접근을 허용할 수 있습니다. 확인하려면 "DESCRIBE" 요청을 보냅니다. 기본 예시는 아래와 같습니다:
DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2
정확한 포맷은 일관된 응답을 위해 이중 "\r\n"을 포함해야 합니다. "200 OK" 응답은 unauthenticated access를 의미하고, "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: 더 신뢰할 수 있는 스트리밍을 위해 UDP 대신 TCP 사용-x,-y: 비디오 해상도를 제어하는 선택적 플래그- 필요에 따라 
<IP>및 경로를 교체하세요 
Brute Force
기타 유용한 프로그램
To bruteforce: https://github.com/Tek-Security-Group/rtsp_authgrinder
- 접근 가능한 대상에서 열린 RTSP 호스트를 탐지
 - 공개 정보(hostname, port, camera model 등) 획득
 - 스트림 경로(예: /live.sdp)를 찾기 위한 자동 사전(dictionary) 공격 실행
 - 카메라의 username 및 password를 얻기 위한 자동 사전 공격 실행
 - 스트림이 유효한지 확인하고 빠르게 내용을 미리보기할 수 있도록 썸네일 생성
 - 올바르게 인코딩되었는지 확인하기 위해 Gstreamer 파이프라인 생성 시도
 - 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 지원하기
- 구독 계획 확인하기!
 - **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
 - HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
 
HackTricks