mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
86 lines
4.8 KiB
Markdown
86 lines
4.8 KiB
Markdown
# 554,8554 - Pentesting RTSP
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## Osnovne informacije
|
||
|
||
Sa [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
|
||
|
||
> **Real Time Streaming Protocol** (**RTSP**) je protokol za kontrolu mreže dizajniran za korišćenje u sistemima zabave i komunikacija za kontrolu servera za strimovanje medija. Protokol se koristi za uspostavljanje i kontrolu medijskih sesija između krajnjih tačaka. Klijenti medijskih servera izdaju komande u stilu VHS, kao što su reprodukcija, snimanje i pauza, kako bi olakšali real-time kontrolu medija koji se strimuje sa servera na klijenta (Video Na Zahtev) ili sa klijenta na server (Snimanje Glasa).
|
||
>
|
||
> Prenos strimovanih podataka sam po sebi nije zadatak RTSP-a. Većina RTSP servera koristi Protokol za prenos u realnom vremenu (RTP) u kombinaciji sa Protokolom za kontrolu u realnom vremenu (RTCP) za isporuku medijskog strima. Međutim, neki dobavljači implementiraju vlasničke transportne protokole. Softver RTSP servera od RealNetworks, na primer, takođe koristi vlasnički Real Data Transport (RDT) od RealNetworks.
|
||
|
||
**Podrazumevani portovi:** 554,8554
|
||
```
|
||
PORT STATE SERVICE
|
||
554/tcp open rtsp
|
||
```
|
||
## Ključni detalji
|
||
|
||
**RTSP** je sličan HTTP-u, ali je posebno dizajniran za strimovanje medija. Definisan je u jednostavnoj specifikaciji koja se može pronaći ovde:
|
||
|
||
[RTSP – RFC2326](https://tools.ietf.org/html/rfc2326)
|
||
|
||
Uređaji mogu omogućiti **neautentifikovani** ili **autentifikovani** pristup. Da biste proverili, šalje se "DESCRIBE" zahtev. Osnovni primer je prikazan ispod:
|
||
|
||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
|
||
|
||
Zapamtite, ispravno formatiranje uključuje dupli "\r\n" za dosledan odgovor. Odgovor "200 OK" označava **neautentifikovani pristup**, dok "401 Unauthorized" signalizira potrebu za autentifikacijom, otkrivajući da li je potrebna **Basic** ili **Digest authentication**.
|
||
|
||
Za **Basic authentication**, kodirate korisničko ime i lozinku u base64 i uključujete ih u zahtev na sledeći način:
|
||
|
||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
|
||
|
||
Ovaj primer koristi "admin" i "1234" za akreditive. Evo **Python skripte** 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)
|
||
```
|
||
**Osnovna autentifikacija** je jednostavnija i poželjnija. **Digest autentifikacija** zahteva pažljivo rukovanje detaljima autentifikacije koji su dati u "401 Unauthorized" odgovoru.
|
||
|
||
Ovaj pregled pojednostavljuje proces pristupa RTSP tokovima, fokusirajući se na **Osnovnu autentifikaciju** zbog njene jednostavnosti i praktičnosti u početnim pokušajima.
|
||
|
||
## Enumeracija
|
||
|
||
Hajde da dobijemo informacije o validnim metodama i URL-ovima koji su podržani i pokušamo da brute-force pristup (ako je potrebno) da bismo dobili pristup sadržaju.
|
||
```bash
|
||
nmap -sV --script "rtsp-*" -p <PORT> <IP>
|
||
```
|
||
#### Pregled RTSP strima sa [ffplay](https://ffmpeg.org/ffplay.html)
|
||
Kada otkrijete validan RTSP put (npr., `/mpeg4`, `/live.sdp`) i potvrdite pristup (neautentifikovan ili sa kredencijalima), možete koristiti `ffplay` za strimovanje feed-a:
|
||
```bash
|
||
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
|
||
```
|
||
- `-rtsp_transport tcp`: Koristite TCP umesto UDP za pouzdanije strimovanje
|
||
- `-x`, `-y`: Opcione zastavice za kontrolu rezolucije videa
|
||
- Zamenite `<IP>` i putanju po potrebi
|
||
|
||
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
|
||
|
||
### **Ostali korisni programi**
|
||
|
||
Za bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
|
||
|
||
[**Cameradar**](https://github.com/Ullaakut/cameradar)
|
||
|
||
- Otkrivanje otvorenih RTSP hostova na bilo kojem dostupnom cilju
|
||
- Dobijanje njihovih javnih informacija (hostname, port, model kamere, itd.)
|
||
- Pokretanje automatizovanih napada rečnikom za dobijanje njihove strim rute (na primer /live.sdp)
|
||
- Pokretanje automatizovanih napada rečnikom za dobijanje korisničkog imena i lozinke kamera
|
||
- Generisanje sličica iz njih kako bi se proverilo da li su strimovi validni i da bi se dobio brzi pregled njihovog sadržaja
|
||
- Pokušaj kreiranja Gstreamer pipeline-a da se proveri da li su ispravno kodirani
|
||
- Ispisivanje sažetka svih informacija koje je Cameradar mogao da dobije
|
||
|
||
## 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}}
|