# 554,8554 - Pentesting RTSP {{#include ../banners/hacktricks-training.md}} ## Informazioni di base From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): > 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](https://tools.ietf.org/html/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://: 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://: 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: ```python import socket req = "DESCRIBE rtsp://: 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. ```bash nmap -sV --script "rtsp-*" -p ``` #### Visualizzare lo stream RTSP con [ffplay](https://ffmpeg.org/ffplay.html) 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: ```bash ffplay -rtsp_transport tcp rtsp:///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 `` and path as needed ### [Brute Force](../generic-hacking/brute-force.md#rtsp) ### **Altri programmi utili** Per effettuare bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder) [**Cameradar**](https://github.com/Ullaakut/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 - [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol) - [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/) - [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar) {{#include ../banners/hacktricks-training.md}}