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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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:
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:
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.
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ń:
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
- 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
- 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
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
HackTricks