# 554,8554 - Pentesting RTSP {{#include ../banners/hacktricks-training.md}} ## Podstawowe informacje Z [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): > **Real Time Streaming Protocol** (**RTSP**) to protokół kontroli sieci zaprojektowany do użycia w systemach rozrywkowych i komunikacyjnych w celu kontrolowania serwerów mediów strumieniowych. Protokół jest używany do ustanawiania i kontrolowania sesji mediów między punktami końcowymi. Klienci serwerów mediów wydają polecenia w stylu VHS, takie jak odtwarzanie, nagrywanie i pauza, aby ułatwić kontrolę w czasie rzeczywistym nad strumieniowaniem mediów z serwera do klienta (Video On Demand) lub z klienta do serwera (Voice Recording). > > Transmisja danych strumieniowych nie jest zadaniem RTSP. Większość serwerów RTSP używa protokołu Real-time Transport Protocol (RTP) w połączeniu z Real-time Control Protocol (RTCP) do dostarczania strumieni mediów. Jednak niektórzy dostawcy wdrażają własne protokoły transportowe. Oprogramowanie serwera RTSP od RealNetworks, na przykład, również używa własnego protokołu Real Data Transport (RDT). **Domyślne porty:** 554,8554 ``` PORT STATE SERVICE 554/tcp open rtsp ``` ## Kluczowe szczegóły **RTSP** jest podobny do HTTP, ale zaprojektowany specjalnie do strumieniowania mediów. Jest zdefiniowany w prostych specyfikacjach, które można znaleźć tutaj: [RTSP – RFC2326](https://tools.ietf.org/html/rfc2326) Urządzenia mogą umożliwiać **nieautoryzowany** lub **autoryzowany** dostęp. Aby to sprawdzić, wysyłane jest żądanie "DESCRIBE". Podstawowy przykład przedstawiono poniżej: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2` Pamiętaj, że poprawne formatowanie obejmuje podwójne "\r\n" dla spójnej odpowiedzi. Odpowiedź "200 OK" wskazuje na **nieautoryzowany dostęp**, podczas gdy "401 Unauthorized" sygnalizuje potrzebę autoryzacji, ujawniając, czy wymagana jest **autoryzacja Basic** czy **Digest**. Dla **autoryzacji Basic** kodujesz nazwę użytkownika i hasło w base64 i dołączasz je do żądania w ten sposób: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==` Ten przykład używa "admin" i "1234" jako poświadczeń. Oto **skrypt Python** do wysłania takiego żądania: ```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) ``` **Podstawowa autoryzacja** jest prostsza i preferowana. **Autoryzacja z użyciem skrótu** wymaga starannego zarządzania szczegółami autoryzacji podanymi w odpowiedzi "401 Unauthorized". Ten przegląd upraszcza proces uzyskiwania dostępu do strumieni RTSP, koncentrując się na **Podstawowej autoryzacji** ze względu na jej prostotę i praktyczność w początkowych próbach. ## Enumeracja Zdobądźmy informacje o obsługiwanych metodach i adresach URL oraz spróbujmy przeprowadzić atak brute-force (jeśli to konieczne), aby uzyskać dostęp do treści. ```bash nmap -sV --script "rtsp-*" -p ``` #### Oglądanie strumienia RTSP za pomocą [ffplay](https://ffmpeg.org/ffplay.html) Gdy odkryjesz ważną ścieżkę RTSP (np. `/mpeg4`, `/live.sdp`) i potwierdzisz dostęp (bez uwierzytelnienia lub z danymi logowania), możesz użyć `ffplay`, aby przesyłać strumień: ```bash ffplay -rtsp_transport tcp rtsp:///mpeg4 -x 2560 -y 1440 ``` - `-rtsp_transport tcp`: Użyj TCP zamiast UDP dla bardziej niezawodnego strumieniowania - `-x`, `-y`: Opcjonalne flagi do kontrolowania rozdzielczości wideo - Zastąp `` i ścieżkę w razie potrzeby ### [Brute Force](../generic-hacking/brute-force.md#rtsp) ### **Inne przydatne programy** Aby przeprowadzić brute force: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder) [**Cameradar**](https://github.com/Ullaakut/cameradar) - Wykryj otwarte hosty RTSP na dowolnym dostępnym celu - Uzyskaj ich publiczne informacje (nazwa hosta, port, model kamery itp.) - Uruchom zautomatyzowane ataki słownikowe, aby uzyskać ich trasę strumienia (na przykład /live.sdp) - Uruchom zautomatyzowane ataki słownikowe, aby uzyskać nazwę użytkownika i hasło kamer - Generuj miniatury z nich, aby sprawdzić, czy strumienie są ważne i mieć szybki podgląd ich zawartości - Spróbuj stworzyć potok Gstreamer, aby sprawdzić, czy są poprawnie zakodowane - Wydrukuj podsumowanie wszystkich informacji, które Cameradar mógł uzyskać ## 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}}