hacktricks/src/network-services-pentesting/554-8554-pentesting-rtsp.md

86 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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://<ip>:<port> 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://<ip>:<port> 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://<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)
```
**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 <PORT> <IP>
```
#### 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://<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](../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}}