mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
86 lines
5.0 KiB
Markdown
86 lines
5.0 KiB
Markdown
# 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}}
|