554,8554 - Pentesting RTSP

Reading time: 5 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Z wikipedia:

The Real Time Streaming Protocol (RTSP) to protokół sterowania siecią zaprojektowany do użycia w systemach rozrywkowych i komunikacyjnych w celu kontroli serwerów strumieniowania mediów. Protokół jest używany do ustanawiania i kontrolowania sesji medialnych między punktami końcowymi. Klienci serwerów mediów wydają polecenia w stylu VHS, takie jak play, record i pause, aby ułatwić sterowanie w czasie rzeczywistym strumieniowaniem mediów z serwera do klienta (Video On Demand) lub od klienta do serwera (Voice Recording).

Przesyłanie samych danych strumieniowych nie jest zadaniem RTSP. Większość serwerów RTSP używa Real-time Transport Protocol (RTP) w połączeniu z Real-time Control Protocol (RTCP) do dostarczania strumieni mediów. Jednak niektórzy dostawcy implementują własne protokoły transportowe. Oprogramowanie serwera RTSP od RealNetworks, na przykład, również używało proprietarnego Real Data Transport (RDT) firmy RealNetworks.

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 multimediów. Jest zdefiniowany w prostej specyfikacji, którą można znaleźć tutaj:

RTSP – RFC2326

Urządzenia mogą umożliwiać dostęp bez uwierzytelniania lub z uwierzytelnianiem. Aby to sprawdzić, wysyła się żądanie "DESCRIBE". Poniżej pokazano podstawowy przykład:

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

Pamiętaj, prawidłowe formatowanie zawiera podwójne "\r\n" dla spójnej odpowiedzi. Odpowiedź "200 OK" wskazuje na dostęp bez uwierzytelniania, natomiast "401 Unauthorized" sygnalizuje konieczność uwierzytelnienia, ujawniając, czy wymagane jest Basic or Digest authentication.

Dla Basic authentication kodujesz nazwę użytkownika i hasło w base64 i umieszczasz je w żądaniu w ten sposób:

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

W tym przykładzie użyto "admin" i "1234" jako poświadczeń. Oto Python script do wysłania takiego żądania:

python
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 jest prostsze i zalecane. Digest authentication wymaga ostrożnego obchodzenia się z danymi uwierzytelniającymi podanymi w odpowiedzi "401 Unauthorized".

Niniejszy przegląd upraszcza proces dostępu do strumieni RTSP, koncentrując się na Basic authentication ze względu na jego prostotę i praktyczność przy pierwszych próbach.

Enumeracja

Zbierzmy informacje o obsługiwanych metodach i URLs oraz, w razie potrzeby, spróbujmy brute-force uzyskać dostęp do zawartości.

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

Oglądanie strumienia RTSP za pomocą ffplay

Gdy odkryjesz prawidłową ścieżkę RTSP (np. /mpeg4, /live.sdp) i potwierdzisz dostęp (bez uwierzytelnienia lub z credentials), możesz użyć ffplay, aby odtworzyć strumień:

bash
ffplay -rtsp_transport tcp rtsp://<IP>/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 <IP> i ścieżkę w razie potrzeby

Brute Force

Inne przydatne programy

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

Cameradar

  • Wykrywa otwarte hosty RTSP na każdym dostępnym celu
  • Pobiera ich publiczne informacje (nazwę hosta, port, model kamery itp.)
  • Uruchamia automatyczne ataki słownikowe, aby uzyskać ścieżkę strumienia (np. /live.sdp)
  • Uruchamia automatyczne ataki słownikowe, aby zdobyć nazwę użytkownika i hasło kamer
  • Generuje miniaturki, aby sprawdzić, czy strumienie są poprawne i uzyskać szybki podgląd ich zawartości
  • Próbuje utworzyć pipeline Gstreamer, aby sprawdzić, czy są poprawnie zakodowane
  • Wypisuje podsumowanie wszystkich informacji, które Cameradar mógł uzyskać

Zobacz także

32100 Udp - Pentesting Pppp Cs2 P2p Cameras

Referencje

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks