# 554,8554 - Pentesting RTSP {{#include ../banners/hacktricks-training.md}} ## Osnovne informacije Sa [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): > **Real Time Streaming Protocol** (**RTSP**) je protokol za kontrolu mreže dizajniran za korišćenje u sistemima zabave i komunikacija za kontrolu servera za strimovanje medija. Protokol se koristi za uspostavljanje i kontrolu medijskih sesija između krajnjih tačaka. Klijenti medijskih servera izdaju komande u stilu VHS, kao što su reprodukcija, snimanje i pauza, kako bi olakšali real-time kontrolu medija koji se strimuje sa servera na klijenta (Video Na Zahtev) ili sa klijenta na server (Snimanje Glasa). > > Prenos strimovanih podataka sam po sebi nije zadatak RTSP-a. Većina RTSP servera koristi Protokol za prenos u realnom vremenu (RTP) u kombinaciji sa Protokolom za kontrolu u realnom vremenu (RTCP) za isporuku medijskog strima. Međutim, neki dobavljači implementiraju vlasničke transportne protokole. Softver RTSP servera od RealNetworks, na primer, takođe koristi vlasnički Real Data Transport (RDT) od RealNetworks. **Podrazumevani portovi:** 554,8554 ``` PORT STATE SERVICE 554/tcp open rtsp ``` ## Ključni detalji **RTSP** je sličan HTTP-u, ali je posebno dizajniran za strimovanje medija. Definisan je u jednostavnoj specifikaciji koja se može pronaći ovde: [RTSP – RFC2326](https://tools.ietf.org/html/rfc2326) Uređaji mogu omogućiti **neautentifikovani** ili **autentifikovani** pristup. Da biste proverili, šalje se "DESCRIBE" zahtev. Osnovni primer je prikazan ispod: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2` Zapamtite, ispravno formatiranje uključuje dupli "\r\n" za dosledan odgovor. Odgovor "200 OK" označava **neautentifikovani pristup**, dok "401 Unauthorized" signalizira potrebu za autentifikacijom, otkrivajući da li je potrebna **Basic** ili **Digest authentication**. Za **Basic authentication**, kodirate korisničko ime i lozinku u base64 i uključujete ih u zahtev na sledeći način: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==` Ovaj primer koristi "admin" i "1234" za akreditive. Evo **Python skripte** za slanje takvog zahteva: ```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) ``` **Osnovna autentifikacija** je jednostavnija i poželjnija. **Digest autentifikacija** zahteva pažljivo rukovanje detaljima autentifikacije koji su dati u "401 Unauthorized" odgovoru. Ovaj pregled pojednostavljuje proces pristupa RTSP tokovima, fokusirajući se na **Osnovnu autentifikaciju** zbog njene jednostavnosti i praktičnosti u početnim pokušajima. ## Enumeracija Hajde da dobijemo informacije o validnim metodama i URL-ovima koji su podržani i pokušamo da brute-force pristup (ako je potrebno) da bismo dobili pristup sadržaju. ```bash nmap -sV --script "rtsp-*" -p ``` #### Pregled RTSP strima sa [ffplay](https://ffmpeg.org/ffplay.html) Kada otkrijete validan RTSP put (npr., `/mpeg4`, `/live.sdp`) i potvrdite pristup (neautentifikovan ili sa kredencijalima), možete koristiti `ffplay` za strimovanje feed-a: ```bash ffplay -rtsp_transport tcp rtsp:///mpeg4 -x 2560 -y 1440 ``` - `-rtsp_transport tcp`: Koristite TCP umesto UDP za pouzdanije strimovanje - `-x`, `-y`: Opcione zastavice za kontrolu rezolucije videa - Zamenite `` i putanju po potrebi ### [Brute Force](../generic-hacking/brute-force.md#rtsp) ### **Ostali korisni programi** Za bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder) [**Cameradar**](https://github.com/Ullaakut/cameradar) - Otkrivanje otvorenih RTSP hostova na bilo kojem dostupnom cilju - Dobijanje njihovih javnih informacija (hostname, port, model kamere, itd.) - Pokretanje automatizovanih napada rečnikom za dobijanje njihove strim rute (na primer /live.sdp) - Pokretanje automatizovanih napada rečnikom za dobijanje korisničkog imena i lozinke kamera - Generisanje sličica iz njih kako bi se proverilo da li su strimovi validni i da bi se dobio brzi pregled njihovog sadržaja - Pokušaj kreiranja Gstreamer pipeline-a da se proveri da li su ispravno kodirani - Ispisivanje sažetka svih informacija koje je Cameradar mogao da dobije ## References - [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}}