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

4.9 KiB
Raw Blame History

554,8554 - Pentesting RTSP

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

Informazioni di base

From wikipedia:

Il Protocollo di streaming in tempo reale (RTSP) è un protocollo di controllo di rete progettato per l'uso in sistemi di intrattenimento e comunicazione per controllare server di streaming multimediale. Il protocollo viene utilizzato per stabilire e controllare sessioni multimediali tra endpoint. I client dei server multimediali inviano comandi in stile VHS, come play, record e pause, per facilitare il controllo in tempo reale dello streaming multimediale dal server al client (Video On Demand) o dal client al server (Voice Recording).

La trasmissione dei dati di streaming in sé non è compito di RTSP. La maggior parte dei server RTSP utilizza il Real-time Transport Protocol (RTP) in combinazione con il Real-time Control Protocol (RTCP) per la consegna dello stream multimediale. Tuttavia, alcuni fornitori implementano protocolli di trasporto proprietari. Il software server RTSP di RealNetworks, per esempio, utilizzava anche il Real Data Transport (RDT) proprietario di RealNetworks.

Porte predefinite: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Dettagli chiave

RTSP è simile a HTTP ma progettato specificamente per lo streaming multimediale. È definito in una specifica semplice che può essere trovata qui:

RTSP RFC2326

I dispositivi potrebbero consentire accesso non autenticato o autenticato. Per verificare, viene inviata una richiesta "DESCRIBE". Un esempio di base è mostrato di seguito:

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

Ricorda che il formato corretto include una doppia "\r\n" per una risposta coerente. Una risposta "200 OK" indica accesso non autenticato, mentre "401 Unauthorized" segnala la necessità di autenticazione, rivelando se è richiesta Basic o Digest authentication.

Per Basic authentication, codifica nome utente e password in base64 e includili nella richiesta in questo modo:

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

Questo esempio usa "admin" e "1234" come credenziali. Ecco uno script Python per inviare tale richiesta:

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 è più semplice e preferibile. Digest authentication richiede un'attenta gestione dei dettagli di autenticazione forniti nella risposta "401 Unauthorized".

Questa panoramica semplifica il processo di accesso agli stream RTSP, concentrandosi su Basic authentication per la sua semplicità e praticità nei tentativi iniziali.

Enumeration

Raccogliamo informazioni su quali metodi e URLs sono supportati e proviamo a brute-force l'accesso (se necessario) per ottenere il contenuto.

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

Visualizzare lo stream RTSP con ffplay

Una volta che hai scoperto un percorso RTSP valido (ad esempio /mpeg4, /live.sdp) e confermato l'accesso (unauthenticated or with credentials), puoi usare ffplay per visualizzare il feed:

ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
  • -rtsp_transport tcp: Usa TCP invece di UDP per uno streaming più affidabile
  • -x, -y: Flag opzionali per controllare la risoluzione video
  • Replace <IP> and path as needed

Brute Force

Altri programmi utili

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

Cameradar

  • Detect open RTSP hosts on any accessible target
  • Get their public info (hostname, port, camera model, etc.)
  • Launch automated dictionary attacks to get their stream route (for example /live.sdp)
  • Launch automated dictionary attacks to get the username and password of the cameras
  • Generate thumbnails from them to check if the streams are valid and to have a quick preview of their content
  • Try to create a Gstreamer pipeline to check if they are properly encoded
  • Print a summary of all the informations Cameradar could get

Vedi anche

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

Riferimenti

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