mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-21 02:23:30 +00:00
103 lines
6.5 KiB
Markdown
103 lines
6.5 KiB
Markdown
|
# 554,8554 - Pentesting RTSP
|
|||
|
|
|||
|
{% hint style="success" %}
|
|||
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|||
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary>Support HackTricks</summary>
|
|||
|
|
|||
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|||
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|||
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|||
|
|
|||
|
</details>
|
|||
|
{% endhint %}
|
|||
|
|
|||
|
## Informações Básicas
|
|||
|
|
|||
|
De [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
|
|||
|
|
|||
|
> O **Protocolo de Streaming em Tempo Real** (**RTSP**) é um protocolo de controle de rede projetado para uso em sistemas de entretenimento e comunicações para controlar servidores de mídia em streaming. O protocolo é usado para estabelecer e controlar sessões de mídia entre pontos finais. Clientes de servidores de mídia emitem comandos no estilo VHS, como reproduzir, gravar e pausar, para facilitar o controle em tempo real da mídia transmitida do servidor para um cliente (Vídeo Sob Demanda) ou de um cliente para o servidor (Gravação de Voz).
|
|||
|
>
|
|||
|
> A transmissão de dados de streaming em si não é uma tarefa do RTSP. A maioria dos servidores RTSP usa o Protocolo de Transporte em Tempo Real (RTP) em conjunto com o Protocolo de Controle em Tempo Real (RTCP) para entrega de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software do servidor RTSP da RealNetworks, por exemplo, também usou o Transporte de Dados Real Proprietário (RDT) da RealNetworks.
|
|||
|
|
|||
|
**Portas padrão:** 554,8554
|
|||
|
```
|
|||
|
PORT STATE SERVICE
|
|||
|
554/tcp open rtsp
|
|||
|
```
|
|||
|
## Detalhes Chave
|
|||
|
|
|||
|
**RTSP** é semelhante ao HTTP, mas projetado especificamente para streaming de mídia. Está definido em uma especificação simples que pode ser encontrada aqui:
|
|||
|
|
|||
|
[RTSP – RFC2326](https://tools.ietf.org/html/rfc2326)
|
|||
|
|
|||
|
Os dispositivos podem permitir acesso **não autenticado** ou **autenticado**. Para verificar, uma solicitação "DESCRIBE" é enviada. Um exemplo básico é mostrado abaixo:
|
|||
|
|
|||
|
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
|
|||
|
|
|||
|
Lembre-se, a formatação correta inclui um duplo "\r\n" para uma resposta consistente. Uma resposta "200 OK" indica **acesso não autenticado**, enquanto "401 Unauthorized" sinaliza a necessidade de autenticação, revelando se a autenticação **Basic** ou **Digest** é necessária.
|
|||
|
|
|||
|
Para **autenticação Basic**, você codifica o nome de usuário e a senha em base64 e os inclui na solicitação assim:
|
|||
|
|
|||
|
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
|
|||
|
|
|||
|
Este exemplo usa "admin" e "1234" para as credenciais. Aqui está um **script Python** para enviar tal solicitação:
|
|||
|
```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)
|
|||
|
```
|
|||
|
**A autenticação básica** é mais simples e preferida. **A autenticação Digest** requer um manuseio cuidadoso dos detalhes de autenticação fornecidos na resposta "401 Unauthorized".
|
|||
|
|
|||
|
Esta visão geral simplifica o processo de acesso a streams RTSP, focando na **autenticação básica** por sua simplicidade e praticidade em tentativas iniciais.
|
|||
|
|
|||
|
## Enumeração
|
|||
|
|
|||
|
Vamos obter informações sobre os métodos válidos e URLs suportados e tentar forçar o acesso (se necessário) para obter acesso ao conteúdo.
|
|||
|
```bash
|
|||
|
nmap -sV --script "rtsp-*" -p <PORT> <IP>
|
|||
|
```
|
|||
|
### [Brute Force](../generic-methodologies-and-resources/brute-force.md#rtsp)
|
|||
|
|
|||
|
### **Outros programas úteis**
|
|||
|
|
|||
|
Para bruteforce: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
|
|||
|
|
|||
|
[**Cameradar**](https://github.com/Ullaakut/cameradar)
|
|||
|
|
|||
|
* Detectar hosts RTSP abertos em qualquer alvo acessível
|
|||
|
* Obter suas informações públicas (nome do host, porta, modelo da câmera, etc.)
|
|||
|
* Lançar ataques de dicionário automatizados para obter a rota do stream (por exemplo /live.sdp)
|
|||
|
* Lançar ataques de dicionário automatizados para obter o nome de usuário e a senha das câmeras
|
|||
|
* Gerar miniaturas a partir delas para verificar se os streams são válidos e ter uma prévia rápida de seu conteúdo
|
|||
|
* Tentar criar um pipeline Gstreamer para verificar se estão devidamente codificados
|
|||
|
* Imprimir um resumo de todas as informações que o Cameradar conseguiu obter
|
|||
|
|
|||
|
## Referências
|
|||
|
|
|||
|
* [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)
|
|||
|
|
|||
|
{% hint style="success" %}
|
|||
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|||
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary>Support HackTricks</summary>
|
|||
|
|
|||
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|||
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|||
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|||
|
|
|||
|
</details>
|
|||
|
{% endhint %}
|