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

4.8 KiB
Raw Blame History

554,8554 - Pentesting RTSP

{{#include ../banners/hacktricks-training.md}}

Osnovne informacije

Iz wikipedia:

The Real Time Streaming Protocol (RTSP) je mrežni kontrolni protokol dizajniran za upotrebu u zabavnim i komunikacionim sistemima za kontrolu streaming media servera. Protokol se koristi za uspostavljanje i kontrolu media sesija između krajnjih tačaka. Klijenti media servera izdaju VHS-stil komande, kao što su play, record i pause, kako bi omogućili kontrolu strimovanja medija u realnom vremenu od servera ka klijentu (Video On Demand) ili od klijenta ka serveru (Voice Recording).

Prenos samih streaming podataka nije zadatak RTSP-a. Većina RTSP servera koristi Real-time Transport Protocol (RTP) u kombinaciji sa Real-time Control Protocol (RTCP) za isporuku media streama. Međutim, neki proizvođači implementiraju proprietarne transport protokole. RTSP server softver iz RealNetworks, na primer, takođe je koristio RealNetworks' proprietarni Real Data Transport (RDT).

Default ports: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Ključni detalji

RTSP je sličan HTTP-u, ali je dizajniran posebno za streamovanje medija. Definisan je u jednostavnoj specifikaciji koja se može naći ovde:

RTSP RFC2326

Uređaji mogu dozvoliti neautentifikovan ili autentifikovan pristup. Da biste proverili, šalje se zahtev "DESCRIBE". Osnovni primer je prikazan ispod:

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

Zapamtite, ispravan format uključuje dvostruki "\r\n" za konzistentan odgovor. Odgovor "200 OK" označava neautentifikovan pristup, dok "401 Unauthorized" signalizira potrebu za autentifikacijom, otkrivajući da li je potrebna Basic ili Digest authentication.

Za Basic authentication, enkodirate korisničko ime i lozinku u base64 i uključite ih u zahtev ovako:

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

U ovom primeru koriste se "admin" i "1234" kao kredencijali. Evo Python script za slanje takvog zahteva:

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 je jednostavnija i poželjnija. Digest authentication zahteva pažljivo rukovanje detaljima autentifikacije navedenim u odgovoru "401 Unauthorized".

Ovaj pregled pojednostavljuje proces pristupa RTSP streamovima, fokusirajući se na Basic authentication zbog njegove jednostavnosti i praktičnosti u početnim pokušajima.

Enumeration

Hajde da prikupimo informacije o validnim metodama i URL-ovima koji su podržani i, po potrebi, pokušamo brute-force pristup da bismo dobili pristup sadržaju.

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

Pregled RTSP streama pomoću ffplay

Kada otkrijete važeći RTSP put (npr. /mpeg4, /live.sdp) i potvrdite pristup (unauthenticated or with credentials), možete koristiti ffplay za reprodukciju feeda:

ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
  • -rtsp_transport tcp: Koristi TCP umesto UDP za pouzdanije streamovanje
  • -x, -y: Opcioni parametri za kontrolu rezolucije videa
  • Replace <IP> and path as needed

Brute Force

Drugi korisni programi

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

Cameradar

  • Otkriva otvorene RTSP hostove na bilo kojem dostupnom cilju
  • Dohvata njihove javne informacije (hostname, port, camera model, itd.)
  • Pokreće automatizovane dictionary attacks da dobije stream route (na primer /live.sdp)
  • Pokreće automatizovane dictionary attacks da dobije username i password kamera
  • Generiše thumbnails iz njih da bi proverio da li su streamovi validni i da bi imao brz pregled njihovog sadržaja
  • Pokušava da kreira Gstreamer pipeline da proveri da li su pravilno encoded
  • Ispisuje rezime svih informacija koje je Cameradar mogao da dobije

Pogledaj takođe

{{#ref}} 32100-udp-pentesting-pppp-cs2-p2p-cameras.md {{#endref}}

Reference

{{#include ../banners/hacktricks-training.md}}