# 554,8554 - Pentesting RTSP {{#include ../banners/hacktricks-training.md}} ## Основна інформація З [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): > **Протокол потокового відео в реальному часі** (**RTSP**) - це протокол управління мережею, розроблений для використання в системах розваг і зв'язку для контролю серверів потокового медіа. Протокол використовується для встановлення та контролю медіа-сесій між кінцевими точками. Клієнти медіа-серверів видають команди у стилі VHS, такі як відтворення, запис і пауза, щоб полегшити реальний контроль над медіа-потоком від сервера до клієнта (Video On Demand) або від клієнта до сервера (Voice Recording). > > Передача потокових даних сама по собі не є завданням RTSP. Більшість RTSP серверів використовують Протокол передачі в реальному часі (RTP) у поєднанні з Протоколом контролю в реальному часі (RTCP) для доставки медіа-потоку. Однак деякі постачальники реалізують власні транспортні протоколи. Програмне забезпечення RTSP сервера від RealNetworks, наприклад, також використовує власний протокол Real Data Transport (RDT) від RealNetworks. **Порт за замовчуванням:** 554,8554 ``` PORT STATE SERVICE 554/tcp open rtsp ``` ## Ключові деталі **RTSP** подібний до HTTP, але спеціально розроблений для потокового медіа. Він визначений у простій специфікації, яку можна знайти тут: [RTSP – RFC2326](https://tools.ietf.org/html/rfc2326) Пристрої можуть дозволяти **неаутентифікований** або **аутентифікований** доступ. Щоб перевірити, надсилається запит "DESCRIBE". Основний приклад наведено нижче: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2` Пам'ятайте, що правильне форматування включає подвійну "\r\n" для послідовної відповіді. Відповідь "200 OK" вказує на **неаутентифікований доступ**, тоді як "401 Unauthorized" сигналізує про необхідність аутентифікації, вказуючи, чи потрібна **Basic** або **Digest authentication**. Для **Basic authentication** ви кодуєте ім'я користувача та пароль у base64 і включаєте його в запит ось так: `DESCRIBE rtsp://: RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==` Цей приклад використовує "admin" і "1234" для облікових даних. Ось **Python script** для надсилання такого запиту: ```python import socket req = "DESCRIBE rtsp://: 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) ``` **Базова аутентифікація** є простішою і переважною. **Дайджест-аутентифікація** вимагає обережного поводження з деталями аутентифікації, наданими у відповіді "401 Unauthorized". Цей огляд спрощує процес доступу до RTSP потоків, зосереджуючись на **Базовій аутентифікації** через її простоту та практичність у початкових спробах. ## Перерахування Давайте отримати інформацію про дійсні методи та URL, які підтримуються, і спробувати брутфорсити доступ (якщо потрібно), щоб отримати доступ до вмісту. ```bash nmap -sV --script "rtsp-*" -p ``` #### Перегляд RTSP потоку за допомогою [ffplay](https://ffmpeg.org/ffplay.html) Якщо ви виявили дійсний RTSP шлях (наприклад, `/mpeg4`, `/live.sdp`) і підтвердили доступ (без аутентифікації або з обліковими даними), ви можете використовувати `ffplay` для потокового відео: ```bash ffplay -rtsp_transport tcp rtsp:///mpeg4 -x 2560 -y 1440 ``` - `-rtsp_transport tcp`: Використовуйте TCP замість UDP для більш надійного потокового відео - `-x`, `-y`: Додаткові параметри для контролю роздільної здатності відео - Замініть `` та шлях за потребою ### [Brute Force](../generic-hacking/brute-force.md#rtsp) ### **Інші корисні програми** Щоб здійснити брутфорс: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder) [**Cameradar**](https://github.com/Ullaakut/cameradar) - Виявляйте відкриті RTSP хости на будь-якій доступній цілі - Отримуйте їхню публічну інформацію (ім'я хоста, порт, модель камери тощо) - Запускайте автоматизовані атаки словником, щоб отримати їхній маршрут потоку (наприклад, /live.sdp) - Запускайте автоматизовані атаки словником, щоб отримати ім'я користувача та пароль камер - Генеруйте ескізи з них, щоб перевірити, чи є потоки дійсними, і щоб швидко переглянути їхній вміст - Спробуйте створити конвеєр Gstreamer, щоб перевірити, чи правильно вони закодовані - Друкуйте підсумок усієї інформації, яку може отримати Cameradar ## 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}}