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

92 lines
4.8 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}}
## Osnovne informacije
Iz [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
> The **Real Time Streaming Protocol** (**RTSP**) je mrežni kontrolni protokol dizajniran za upotrebu u zabavnim i komunikacionim sistemima za kontrolu streaming media servera. Protokol se koristi za uspostavljanje i kontrolu media sesija između krajnjih tačaka. Klijenti media servera izdaju VHS-stil komande, kao što su play, record i pause, kako bi omogućili kontrolu strimovanja medija u realnom vremenu od servera ka klijentu (Video On Demand) ili od klijenta ka serveru (Voice Recording).
>
> Prenos samih streaming podataka nije zadatak RTSP-a. Većina RTSP servera koristi Real-time Transport Protocol (RTP) u kombinaciji sa Real-time Control Protocol (RTCP) za isporuku media streama. Međutim, neki proizvođači implementiraju proprietarne transport protokole. RTSP server softver iz RealNetworks, na primer, takođe je koristio RealNetworks' proprietarni Real Data Transport (RDT).
**Default ports:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Ključni detalji
**RTSP** je sličan HTTP-u, ali je dizajniran posebno za streamovanje medija. Definisan je u jednostavnoj specifikaciji koja se može naći ovde:
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
Uređaji mogu dozvoliti **neautentifikovan** ili **autentifikovan** pristup. Da biste proverili, šalje se zahtev "DESCRIBE". Osnovni primer je prikazan ispod:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
Zapamtite, ispravan format uključuje dvostruki "\r\n" za konzistentan odgovor. Odgovor "200 OK" označava **neautentifikovan pristup**, dok "401 Unauthorized" signalizira potrebu za autentifikacijom, otkrivajući da li je potrebna **Basic** ili **Digest authentication**.
Za **Basic authentication**, enkodirate korisničko ime i lozinku u base64 i uključite ih u zahtev ovako:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
U ovom primeru koriste se "admin" i "1234" kao kredencijali. Evo **Python script** za slanje takvog zahteva:
```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** je jednostavnija i poželjnija. **Digest authentication** zahteva pažljivo rukovanje detaljima autentifikacije navedenim u odgovoru "401 Unauthorized".
Ovaj pregled pojednostavljuje proces pristupa RTSP streamovima, fokusirajući se na **Basic authentication** zbog njegove jednostavnosti i praktičnosti u početnim pokušajima.
## Enumeration
Hajde da prikupimo informacije o validnim metodama i URL-ovima koji su podržani i, po potrebi, pokušamo brute-force pristup da bismo dobili pristup sadržaju.
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
#### Pregled RTSP streama pomoću [ffplay](https://ffmpeg.org/ffplay.html)
Kada otkrijete važeći RTSP put (npr. `/mpeg4`, `/live.sdp`) i potvrdite pristup (unauthenticated or with credentials), možete koristiti `ffplay` za reprodukciju feeda:
```bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
```
- `-rtsp_transport tcp`: Koristi TCP umesto UDP za pouzdanije streamovanje
- `-x`, `-y`: Opcioni parametri za kontrolu rezolucije videa
- Replace `<IP>` and path as needed
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
### **Drugi korisni programi**
To bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
- Otkriva otvorene RTSP hostove na bilo kojem dostupnom cilju
- Dohvata njihove javne informacije (hostname, port, camera model, itd.)
- Pokreće automatizovane dictionary attacks da dobije stream route (na primer /live.sdp)
- Pokreće automatizovane dictionary attacks da dobije username i password kamera
- Generiše thumbnails iz njih da bi proverio da li su streamovi validni i da bi imao brz pregled njihovog sadržaja
- Pokušava da kreira Gstreamer pipeline da proveri da li su pravilno encoded
- Ispisuje rezime svih informacija koje je Cameradar mogao da dobije
### Pogledaj takođe
{{#ref}}
32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
## Reference
- [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}}