4.9 KiB
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:
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
- 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
- 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
{{#include ../banners/hacktricks-training.md}}