Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
pyrdp — RDP monster-in-the-middle (mitm) e biblioteca para Python com a capacidade de observar conexões ao vivo ou posteriormente | Kitploit
Ferramentas/GitHubGitHub/gosecure/pyrdp
ExploraçãoForensia de RedeColeta de InformaçõesSegurança de RedeAnálise de MalwareCTFTestes de PenetraçãoAprendizado e EducaçãoRed TeamingResposta a IncidentesDesenvolvimento de PayloadsLabs e Prática
1.8k27222há 3 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHubgosecure/pyrdp

pyrdp

RDP monster-in-the-middle (mitm) e biblioteca para Python com a capacidade de observar conexões ao vivo ou posteriormente

Ver RepositórioSite

PyRDP

Tests Black Hat Arsenal 2019 Black Hat Arsenal 2021 Black Hat Arsenal 2022

PyRDP é uma ferramenta e biblioteca Python de Monstro-no-Meio (MITM) do Protocolo de Área de Trabalho Remota (RDP).

PyRDP Logo

Ele apresenta algumas ferramentas:

  • RDP Monster-in-the-Middle
    • Registra credenciais em texto simples ou hashes NetNTLM usados ao conectar
    • Rouba dados copiados para a área de transferência
    • Salva uma cópia dos arquivos transferidos pela rede
    • Varre unidades compartilhadas em segundo plano e as salva localmente
    • Salva reproduções das conexões para que você possa vê-las mais tarde
    • Executa comandos de console ou payloads PowerShell automaticamente em novas conexões
  • RDP Player:
    • Veja conexões RDP ao vivo vindo do MITM
    • Veja reproduções de conexões RDP
    • Assuma o controle de sessões RDP ativas enquanto oculta suas ações
    • Liste as unidades mapeadas do cliente e baixe arquivos delas durante sessões ativas
  • Converter tool:
    • Converta reproduções RDP em vídeos para compartilhamento mais fácil
    • Converta reproduções RDP em uma sequência de eventos de baixo nível serializados em formato JSON
    • Converta PCAPs em reproduções, vídeos ou eventos JSON
    • Converta PCAPs descriptografados (PDUs L7) em reproduções, vídeos ou eventos JSON
  • RDP Certificate Cloner:
    • Crie um certificado X509 autoassinado com os mesmos campos que o certificado de um servidor RDP

PyRDP foi apresentado em 2018 no qual demonstramos que podemos capturar um ator de ameaça real em ação. Esta ferramenta está sendo desenvolvida com casos de uso de pesquisa em pentest e malware em mente.

PyRDP Player Replaying an RDP session

Table of Contents

  • Sistemas Suportados
  • Instalação
    • Usando pipx
    • Usando a Imagem Docker
  • Usando PyRDP
    • Usando o PyRDP Monster-in-the-Middle
    • Usando o PyRDP Player
    • Usando o PyRDP Certificate Cloner
    • Usando PyRDP Convert
    • Configurando PyRDP
    • Uso Avançado
    • Instruções de Uso Específicas para Docker
  • PyRDP Lore
  • Contribuindo para o PyRDP
  • Agradecimentos

Sistemas Suportados

PyRDP deve funcionar em Python 3.7 e superior nas plataformas x86-64, ARM e ARM64.

Esta ferramenta foi testada para funcionar em Python 3.7 no Linux (Ubuntu 20.04, 22.04), Raspberry Pi e Windows. Não foi testada no macOS.

Instalação

Duas técnicas de instalação são recomendadas: via pipx ou usando contêineres Docker. A instalação a partir do código fonte ou a construção de contêineres Docker por conta própria é abordada na documentação de desenvolvimento.

Usando pipx

Dependências

Linux

Primeiro, certifique-se de instalar os pacotes pré-requisitos (estes estão listados para Ubuntu 22.04, você pode precisar ajustar para outras distribuições). Fornecemos dois tipos de instalação: uma completa e uma enxuta. Instale as dependências de acordo com seu caso de uso.```sh

Full install (GUI, convert captures to video)

sudo apt install python3 python3-pip python3-venv
build-essential python3-dev openssl
libegl1 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-keysyms1
libnotify-bin
libavcodec58 libavdevice58

Slim install (no GUI, no conversion to video possible)

sudo apt install python3 python3-pip python3-venv
build-essential python3-dev git openssl

root@kitploit:~
Isto deve instalar as dependências necessárias para executar o PyRDP. Se optar por
instalar sem as dependências de GUI ou conversão de vídeo, não será possível usar
`pyrdp-player` sem o modo headless (`--headless`) ou `pyrdp-convert` para produzir saída de vídeo.

Certifique-se de que tem o `pipx` instalado. No Ubuntu 22.04:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Windows

Certifique-se de ter o Python instalado. O Python da Windows Store não funcionou para mim no Windows 11. Recomendamos instalar o Python via Scoop.```sh scoop install python # if not installed already scoop install pipx pipx ensurepath

root@kitploit:~
Faça logout e login novamente (para atualizar seu PATH).

##### Outros SOs

Para instalar o `pipx` em outros sistemas operacionais, veja aqui: <https://github.com/pypa/pipx#install-pipx>

#### Instalação

Para a experiência completa do PyRDP com a interface gráfica QT e a capacidade de converter capturas em vídeo:```sh
pipx install pyrdp-mitm[full]

Para a versão compacta destinada a ser executada em ambientes headless (servidores, RaspberryPi):```sh pipx install pyrdp-mitm

root@kitploit:~
Você está pronto para começar! Consulte as [instruções de uso](#using-pyrdp).

### Usando a Imagem Docker

Este é o método de instalação mais fácil se você tiver o docker instalado e funcionando.```sh
docker pull gosecure/pyrdp:latest

Como alternativa, temos uma imagem mais enxuta sem as dependências de GUI e ffmpeg. Esta é a única imagem fornecida em plataformas ARM.```sh docker pull gosecure/pyrdp:latest-slim

root@kitploit:~
Você pode encontrar a lista de todas as nossas imagens Docker [na página gosecure/pyrdp no DockerHub](https://hub.docker.com/r/gosecure/pyrdp/tags).
A tag `latest` refere-se à versão mais recente lançada, enquanto a tag `devel` é a imagem Docker construída a partir do nosso branch `main`.

## Usando PyRDP

### Usando o PyRDP Monster-in-the-Middle

Use `pyrdp-mitm <ServerIP>` ou `pyrdp-mitm <ServerIP>:<ServerPort>` para executar o MITM.

Supondo que você tenha um servidor RDP rodando em `192.168.1.10` e ouvindo na porta 3389, você executaria:```sh
pyrdp-mitm 192.168.1.10

Ao executar o MITM pela primeira vez, um diretório chamado pyrdp_output/ será criado em relação ao diretório de trabalho atual. Aqui está um exemplo da estrutura desse diretório:```sh pyrdp_output/ ├── certs │   ├── WinDev2108Eval.crt │   └── WinDev2108Eval.pem ├── files │   ├── e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c │   ├── b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700 ├── filesystems │   ├── romantic_kalam_8214773 │   │   └── device1 │   │   └── clipboard | └── priv-esc.exe -> ../../../files/b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700 │   └── happy_stonebraker_1992243 │   ├── device1 │   └── device2 | └── Users/User/3D Objects/desktop.ini -> ../../../../../../e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c ├── logs │   ├── crawl.json │   ├── crawl.log │   ├── mitm.json │   ├── mitm.log │   ├── mitm.log.2021-08-26 │   ├── ntlmssp.log │   ├── player.log │   └── ssl.log └── replays ├── rdp_replay_20231214_01-20-28_965_happy_stonebraker_1992243.pyrdp └── rdp_replay_20231214_00-42-24_295_romantic_kalam_8214773.pyrdp

root@kitploit:~
* `certs/` contém os certificados gerados armazenados usando o `CN` do certificado como nome do arquivo
* `files/` contém todos os arquivos capturados e são desduplicados salvando-os usando o hash SHA-256 do conteúdo como nome do arquivo
* `filesystems/` contém uma recriação do sistema de arquivos dos alvos classificados por IDs de sessão.
   Para economizar espaço em sessões semelhantes, os arquivos são links simbólicos para os arquivos reais em `files/`.
* `logs/` contém todos os vários logs, a maioria nos formatos JSON e texto puro:
  * `crawl`: o log do rastreador de arquivos
  * `mitm`: o log principal do MITM
  * `ntlmssp.log`: os hashes NetNTLM capturados
  * `player.log`: o log do player
  * `ssl.log`: os segredos mestre TLS armazenados em um formato compatível com Wireshark
* `replays/` contém todas as sessões PyRDP gravadas anteriormente, com carimbos de data/hora e IDs de sessão no nome do arquivo

#### Especificando a chave privada e o certificado

Se a geração de chave não funcionou ou você deseja usar uma chave e certificado personalizados, pode especificá-los usando os argumentos
`-c` e `-k`:```sh
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
Conexões Monster-in-the-Middle com Network Level Authentication (NLA)

Network Level Authentication (NLA) é um recurso de segurança disponível desde o Windows Vista que adiciona segurança às conexões RDP. NLA depende do novo provedor de suporte de segurança CredSSP e é às vezes referido por esse nome. Um servidor que impõe NLA é mais difícil de atacar. Existem três estratégias diferentes que podem ser usadas:

  • Obter o certificado e a chave privada do servidor
  • Usar um recurso de redirecionamento de host
  • Capturar o hash NetNTLMv2 do cliente e quebrá-lo
Monster-in-the-Middle NLA

Se tivermos acesso ao certificado e à chave privada do servidor, podemos realizar com sucesso um ataque MITM no RDP mesmo que o NLA esteja em vigor. Nós documentamos este ataque em nosso post de lançamento da versão 1.0. Instruções para extrair o certificado RDP e a chave privada estão disponíveis em nosso GitHub.

Com o certificado e a chave privada acessíveis, você só precisa definir a autenticação para ssp adicionando isso na linha de comando do pyrdp-mitm:```sh --auth ssp -c <certificate.pem> -k <private-key.pem>

root@kitploit:~
Isto permitirá a possibilidade de interceptar conexões que exigem NLA.

###### Redirecionamento alternativo de host quando o servidor exige NLA

![Diagrama que explica o redirecionamento NLA](https://assets.kitploit.com/production/public/readmes/2804/e74aa87cc1cfb892b9070fe387c9530e4e99973b2d780b72f6c118abf1ec8a5b.png)

Quando o PyRDP se conecta ao servidor RDP de destino (1), se esse servidor exigir NLA, então o PyRDP (2) substituirá a conexão para ir para outro host de sua escolha (3).

Por exemplo, isso pode ser usado para redirecionar para um servidor que se sabe que não exige NLA, ou poderia até redirecionar para uma VM sob o controle de um atacante.

Para ativar este recurso, especifique o endereço e a porta do host alternativo assim:

pyrdp-mitrdp.py <listen_port> <target_host>:<target_port> --alternative-host <alternative_host>:<alternative_port>

root@kitploit:~
--nla-redirection-host 192.168.1.12 --nla-redirection-port 3389
```
Esta funcionalidade foi introduzida no PyRDP 1.1.0.

###### Capturando hashes NetNTLMv2

Os hashes NetNTLMv2 são úteis para um invasor, pois podem ser quebrados com relativa facilidade, permitindo que invasores aproveitem o acesso legítimo ao RDP ou tentem um ataque de reutilização de credenciais (credentials stuffing).
A partir da versão 1.1.0, o PyRDP tem a capacidade de capturar os hashes NetNTLMv2 do cliente através de uma conexão NLA (CredSSP) realizando a negociação e capturando as mensagens de autenticação NTLMSSP.
Na versão 1.2.0, esse suporte foi estendido para funcionar mesmo que não tenhamos o certificado e a chave privada do servidor, o que significa que a conexão não será um MITM bem-sucedido.
Isso é semelhante ao que o [Responder](https://github.com/lgandx/Responder) faz com o RDP.
O hash NetNTLMv2 capturado pode ser encontrado no arquivo de log `ntlmssp.log` e está
formatado para que ferramentas de cracking como [John The Ripper](https://www.openwall.com/john/) ou [hashcat](https://hashcat.net/hashcat/) possam ingeri-lo.

Esta técnica foi descrita em detalhes em uma postagem de blog: [Capturing RDP NetNTLMv2 Hashes: Attack details and a Technical How-To Guide](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/)

Esta funcionalidade é compatível com `--auth ssp`, mas incompatível com `--nla-redirection-host`.

#### Conectando-se ao player do PyRDP

Se você quiser ver conexões RDP ao vivo através do player do PyRDP, precisará especificar o endereço IP e a porta na qual o player está ouvindo usando os argumentos `-i` e `-d`. Nota: o argumento da porta é opcional, a porta padrão é 3000.```sh
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 3000
```
##### Conectando a um player PyRDP quando o MITM está sendo executado em um servidor

Se você está executando o MITM em um servidor e ainda deseja ver conexões RDP ao vivo, você deve usar
[SSH remote port forwarding](https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/)
para encaminhar uma porta no seu servidor para a porta do player na sua máquina. Depois disso, você passa `127.0.0.1` e a porta encaminhada
como argumentos para o MITM. Por exemplo, se a porta 4000 no servidor estiver encaminhada para a porta do player na sua máquina,
este seria o comando a ser usado:

```
python bin/pyrdp-mitm.py 127.0.0.1 4000
``````sh
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 4000
```
#### Executando payloads em novas conexões

O PyRDP suporta a execução de comandos de console ou payloads do PowerShell automaticamente quando novas conexões são feitas.
Devido à natureza do RDP, o processo é um pouco improvisado e nem sempre 100% confiável. Veja como funciona:

1. Aguardar a autenticação do usuário.
2. Bloquear a entrada/saída do cliente para ocultar o payload e evitar interferências.
3. Enviar uma sequência falsa Windows+R e executar `cmd.exe`.
4. Executar o payload como um comando de console e sair do console. Se um payload do PowerShell estiver configurado, ele é executado com `powershell -enc <PAYLOAD>`.
5. Aguardar um pouco para permitir que o payload seja concluído.
6. Restaurar a entrada/saída do cliente.

Para que isso funcione, você precisa definir 3 argumentos:

- o payload
- o atraso antes do início do payload
- a duração do payload

##### Definindo o payload

Você pode usar um dos seguintes argumentos para definir o payload a ser executado:

- `--payload`, uma string contendo comandos de console
- `--payload-powershell`, uma string contendo comandos do PowerShell
- `--payload-powershell-file`, um caminho para um script do PowerShell

##### Escolhendo quando iniciar o payload

No momento, o PyRDP não detecta quando o usuário está logado.
Você deve fornecer um tempo de espera antes de executar o payload.
Após esse tempo ter passado, ele enviará as sequências de teclas falsas e esperará que o payload seja executado corretamente.
Para fazer isso, você usa o argumento `--payload-delay`. O atraso é em milissegundos.
Por exemplo, se você espera que o usuário faça login nos primeiros 5 segundos, você usaria os seguintes argumentos:```sh
--payload-delay 5000
```
Isto poderia ser mais preciso aproveitando algumas mensagens trocadas durante a inicialização do RDPDR.
Veja [esta issue](https://github.com/GoSecure/pyrdp/issues/98) se estiver interessado em fazer isso funcionar melhor.

##### Escolhendo quando retomar a atividade normal

Como não há uma forma direta de saber quando o console parou de ser executado, você deve informar ao PyRDP por quanto tempo deseja
que a entrada/saída do cliente seja bloqueada. Recomendamos que defina este valor como o tempo máximo que você esperaria que o
console que está executando seu payload ficasse visível. Em outras palavras, o tempo que você esperaria que seu payload levasse para
ser concluído.
Para definir a duração do payload, utilize o argumento `--payload-duration` com um valor em milissegundos.
Por exemplo, se você espera que seu payload leve até 5 segundos para ser concluído, usaria o seguinte argumento:```sh
--payload-duration 5000
```
Isto bloqueará a entrada/saída do cliente por 5 segundos para ocultar o console e evitar interferências.
Após 5 segundos, a entrada/saída é restaurada ao normal.

#### Outros argumentos do MITM

Execute `pyrdp-mitm --help` para uma lista completa de argumentos.

##### `--no-downgrade`

Este argumento é útil ao executar PyRDP em cenários de Honeypot para evitar a identificação por scanners.
Quando a opção está ativada, o PyRDP não fará downgrade de extensões não suportadas e deixará o tráfego passar
de forma transparente. O player provavelmente não conseguirá reproduzir com sucesso o tráfego de vídeo, mas os seguintes
canais suportados ainda devem estar acessíveis:

- Gravação de teclas
- Atualizações de posição do mouse
- Acesso à área de transferência (passivamente)
- Acesso a unidades (passivamente)

Esta funcionalidade ainda está em desenvolvimento e algum downgrade é atualmente inevitável para permitir o estabelecimento
da conexão. Os seguintes não são atualmente afetados por esta opção e continuarão desativados:

- Criptografia FIPS
- Protocolos de criptografia não TLS
- Compressão ClientInfo
- Compressão de Canal Virtual

**NOTA**: Se poder eventualmente reproduzir a sessão completa for importante, uma boa solução é gravar o tráfego RDP bruto
usando Wireshark e manter os segredos mestre TLS. Sempre que o PyRDP adicionar suporte para extensões adicionais,
será então possível extrair um arquivo de reprodução RDP válido da captura de rede bruta.

##### `--transparent`

Diz ao PyRDP para tentar falsificar o endereço IP de origem do cliente para que o servidor veja o endereço IP real
em vez do do MITM. Esta opção só é útil em certos cenários onde o MITM é fisicamente um gateway entre clientes e o servidor
e vê todo o tráfego.
[Exemplos específicos podem ser encontrados aqui.](https://github.com/gosecure/pyrdp/blob/main/docs/transparent-proxy.md)

**NOTA**: Isto requer privilégios de root, funciona apenas em Linux e requer configuração manual de firewall para garantir
que o tráfego seja roteado corretamente.

##### `--no-gdi`: Desabilitar Pipeline de Gráficos Acelerados

PyRDP faz downgrade de vídeo para o pipeline de gráficos mais recente que suporta. Esta opção diz explicitamente ao
MITM para não usar as extensões de [Aceleração de Interface de Dispositivo Gráfico][gdi] para transmitir vídeo. A vantagem deste modo
é uma redução significativa na largura de banda necessária para conexões de alta resolução.

Note que algumas ordens de desenho do GDI estão atualmente não implementadas porque parecem não ser usadas. Se você tiver uma reprodução
que contenha alguma ordem não suportada ou não testada, não hesite em compartilhá-la com os mantenedores do projeto para que
o suporte possa ser adicionado conforme necessário. (Certifique-se de que o rastreio não contém informações sensíveis)

[gdi]: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpegdi/745f2eee-d110-464c-8aca-06fc1814f6ad

### Usando o PyRDP Player

Use `pyrdp-player` para executar o player.

#### Reproduzindo um arquivo de reprodução

Você pode usar o menu para abrir um novo arquivo de reprodução: File > Open.

Você também pode abrir arquivos de reprodução ao iniciar o player:```sh
pyrdp-player <FILE1> <FILE2> ...
```
#### Escutando por conexões ao vivo

O player sempre escuta por conexões ao vivo. Por padrão, a porta de escuta é 3000, mas pode ser alterada:```sh
pyrdp-player -p <PORT>
```
#### Alterando o endereço de escuta

Por padrão, o player só ouve conexões vindas da máquina local. Não recomendamos abrir o player
para outras máquinas. Se ainda assim quiser alterar o endereço de escuta, pode fazê-lo com `-b`:```sh
pyrdp-player -b <ADDRESS>
```
#### Outros argumentos do player

Execute `pyrdp-player --help` para uma lista completa de argumentos.

### Usando o Clonador de Certificados do PyRDP

NOTA: O uso desta ferramenta é opcional.
Desde a versão 1.0, o PyRDP gera certificados dinamicamente exatamente como esta ferramenta faria.

O clonador de certificados do PyRDP cria um novo certificado X509 usando os valores de um certificado existente de um servidor RDP.
Ele se conecta a um servidor RDP, baixa seu certificado, gera uma nova chave privada e substitui a chave pública e a assinatura do certificado usando a nova chave privada. Isso pode ser usado em um pentest se, por exemplo, você estiver tentando enganar um usuário legítimo para passar pelo seu MITM. Usar um certificado que se parece com um certificado legítimo pode aumentar sua taxa de sucesso.

#### Clonando um certificado

Você pode clonar um certificado usando `pyrdp-clonecert`:```sh
pyrdp-clonecert 192.168.1.10 cert.pem -o key.pem
```
O parâmetro `-o` define o nome do caminho a ser usado para a chave privada gerada.

#### Usando uma chave privada personalizada

Se quiser usar sua própria chave privada em vez de gerar uma nova:```sh
pyrdp-clonecert 192.168.1.10 cert.pem -i input_key.pem
```
#### Outros argumentos do clonador

Execute `pyrdp-clonecert --help` para ver uma lista completa de argumentos.

### Usando o PyRDP Convert

`pyrdp-convert` é um script auxiliar que realiza várias conversões úteis de vários formatos de entrada para vários formatos de saída.
O script tem maior chance de funcionar em tráfego capturado pelo PyRDP devido a recursos de protocolo RDP não suportados que podem ser usados em uma conexão não interceptada.

As seguintes entradas são suportadas:

- Captura de rede (PCAP) com segredos mestre TLS (menos confiável)
- Captura de rede (PCAP) no formato Exported PDUs Layer 7 (mais confiável)
- Arquivo de replay gerado pelo PyRDP

As seguintes saídas são suportadas:

- Arquivo de vídeo MP4
- JSON: uma sequência de eventos de baixo nível serializados em formato JSON
- Arquivo de replay compatível com `pyrdp-player`

Capturas de rede criptografadas (TLS) exigem que os segredos mestre TLS sejam fornecidos usando `--secrets ssl.log`.```sh
# Export the session coming client 10.2.0.198 to a .pyrdp file.
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output capture.pcap

# Or as an MP4 video
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 capture.pcap

# List the sessions in a network trace, along with the decryptable ones.
pyrdp-convert --list-only capture.pcap
```
Observe que a conversão MP4 requer libavcodec e ffmpeg, portanto, pode exigir etapas extras no Windows.

Os rastros de rede descriptografados manualmente podem ser exportados do Wireshark selecionando `File > Export PDUs` e selecionando `OSI Layer 7`.

Primeiro, certifique-se de ter configurado o Wireshark para carregar segredos TLS:

![Configure TLS secrets log](https://assets.kitploit.com/production/public/readmes/2804/a1879de263d379e8ddd92a3136aa71696eed7b5e6d08627c235f1ae002bbdebd.png)

Em seguida, exporte PDUs da Camada 7 OSI:

![Export OSI Layer 7](https://assets.kitploit.com/production/public/readmes/2804/1ad4cf5aac57e4c9cde86cd9e66ab816421d47e7700ff7a233171d0c9e651db1.png)

E opcionalmente, filtre o rastro para conter apenas a(s) conversa(ões) de interesse aplicando um filtro de exibição e clicando em `File > Export Specified Packets...`

![Optionally filtering the exported trace](https://assets.kitploit.com/production/public/readmes/2804/5eec655f453a4ab364f63d6fa374ede3bfc66c17ba5b13671c362956bdae089b.png)

Agora, este rastro pode ser usado diretamente no `pyrdp-convert`.

### Configurando o PyRDP

A maior parte da configuração do PyRDP é feita através de opções de linha de comando, mas também é possível usar um arquivo de configuração para determinadas configurações, como a configuração de log.

Os arquivos de configuração padrão usados pelo PyRDP estão localizados em [mitm.default.ini](https://github.com/gosecure/pyrdp/blob/main/pyrdp/mitm/mitm.default.ini) e [player.default.ini](https://github.com/gosecure/pyrdp/blob/main/pyrdp/player/player.default.ini). Ambos os arquivos são minuciosamente documentados e podem servir como base para configurações adicionais.

No futuro, há planos de suportar outros aspectos da configuração do PyRDP através desses arquivos de configuração.

### Uso Avançado

#### Usando PyRDP como Biblioteca

Se você está interessado em experimentar com RDP e criar suas próprias ferramentas, acesse nossa [seção de documentação](https://github.com/gosecure/pyrdp/blob/main/docs/README.md) para mais informações.

#### Usando PyRDP com twistd

O componente MITM do PyRDP também foi implementado como um plugin do twistd. Isso permite executá-lo em modo de depuração e obter um repl interativo de depuração (pdb) se você enviar um `SIGUSR2` para o processo twistd. Veja a [documentação do twistd](https://github.com/gosecure/pyrdp/blob/main/docs/twistd.md) para mais informações.

#### Usando PyRDP com Bettercap

Desenvolvemos nosso próprio módulo do Bettercap, `rdp.proxy`, para interceptar todas as conexões RDP em uma determinada LAN. Confira [este documento](https://github.com/gosecure/pyrdp/blob/main/docs/bettercap-rdp-mitm.md) para mais informações.

### Instruções Específicas de Uso com Docker

Como o Docker restringe as interações com o sistema host (sistema de arquivos e rede), a imagem Docker do PyRDP deve ser executada com alguns parâmetros dependendo do seu caso de uso. Esta seção documenta esses parâmetros.

Referimo-nos à imagem Docker fornecida publicamente, mas se você [construiu a sua própria](https://github.com/gosecure/pyrdp/blob/main/docs/devel.adoc), substitua `gosecure/pyrdp` pelo nome da sua imagem construída localmente.

#### Mapeando uma Porta de Escuta

Na maioria dos casos de interceptação, você precisará mapear uma porta do seu host para a imagem Docker. Isso é feito com os parâmetros `--publish` (`-p`) aplicados ao `docker run`.

Por exemplo, para escutar na porta 3389 (porta padrão do RDP) em todas as interfaces, use:```sh
docker run -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### Armazenamento de Logs e Artefatos

Para armazenar permanentemente a saída do PyRDP (logs, arquivos, etc.), adicione a opção `--volume` (`-v`) ao comando anterior. Neste exemplo, armazenamos os arquivos relativamente ao diretório atual em `pyrdp_output`:```sh
docker run -v $PWD/pyrdp_output:/home/pyrdp/pyrdp_output -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
Certifique-se de que seu diretório de destino pertence a um usuário com UID 1000, caso contrário, você receberá erros de permissão negada.
Se você for o único usuário não-root no sistema, geralmente seu usuário receberá o UID 1000.

#### Registrando o endereço IP do host

Se você quiser que o PyRDP registre o endereço IP do host em seus logs, você pode definir a variável de ambiente `HOST_IP` ao usar `docker run`:```sh
docker run -p 3389:3389 -e HOST_IP=192.168.1.9 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### Usando o Player GUI no Docker

Usar o player exigirá que você exporte a variável de ambiente `DISPLAY` do host para o docker.
Isso redireciona a GUI do player para a tela do host.
Você também precisa expor a rede do host e impedir que o Qt use a Extensão de Memória Compartilhada MIT-SHM X11.
Para isso, adicione as opções `-e` e `--net` ao comando run:```sh
docker run -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 --net=host gosecure/pyrdp pyrdp-player
```
Lembre-se de que expor a rede do host ao docker pode comprometer o isolamento entre o seu contêiner e o host.
Se você planeja usar o player, o encaminhamento X11 usando uma conexão SSH seria uma maneira mais segura.

#### Convertendo vídeos no Docker

O processo de conversão de vídeo depende de PyAV, ffmpeg e QT, então você precisa da imagem docker normal, não a slim.

Você precisa de uma montagem de volume (`-v`) para compartilhar arquivos com o contêiner.
Aqui mapeamos nosso diretório local com `/shared/` no contêiner.```sh
docker run -e QT_QPA_PLATFORM=offscreen -v $PWD/:/shared gosecure/pyrdp pyrdp-convert -f mp4 <filename-relative-to-volume-in-/shared/> -o /shared/
```
A variável de ambiente `QT_QPA_PLATFORM=offscreen` é necessária [devido a um bug documentado aqui](https://github.com/GoSecure/pyrdp/issues/428).
Ela informa ao QT que é correto que nenhum ambiente de exibição está disponível.

## Histórico do PyRDP

* [Postagem do blog de introdução](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera) na qual [demonstramos que podemos capturar um ator de ameaça real em ação](https://www.youtube.com/watch?v=eB7RC9FmL6Q)
* [Palestra no NorthSec 2019](https://docs.google.com/presentation/d/1avcn8Sh2b3IE7AA0G9l7Cj5F1pxqizUm98IbXUo2cvY/edit#slide=id.g404b70030f_0_581) onde duas demonstrações foram realizadas:
  * [Primeira demonstração](https://youtu.be/5JztJzi-m48): registro de credenciais, roubo de área de transferência, navegação de arquivos do lado do cliente e tomada de sessão
  * [Segunda demonstração](https://youtu.be/bU67tj1RkMA): a execução de payloads de cmd ou powershell quando um cliente autentica com sucesso
* [Logotipo do PyRDP](https://github.com/gosecure/pyrdp/blob/main/docs/pyrdp-logo.png) licenciado sob CC-BY-SA 4.0.
* [Slides do BlackHat USA Arsenal 2019](https://docs.google.com/presentation/d/17P_l2n-hgCehQ5eTWilru4IXXHnGIRTj4ftoW4BiX5A/edit?usp=sharing)
* [Slides do DerbyCon 2019](https://docs.google.com/presentation/d/1UAiN2EZwDcmBjLe_t5HXB0LzbNclU3nnigC-XM4neIU/edit?usp=sharing) ([Vídeo](https://www.youtube.com/watch?v=zgt3N6Nrnss))
* [Blog: PyRDP no Piloto Automático](https://www.gosecure.net/blog/2020/02/26/pyrdp-on-autopilot-unattended-credential-harvesting-and-client-side-file-stealing/)
* [Blog: PyRDP 1.0](https://www.gosecure.net/blog/2020/10/20/announcing-pyrdp-1-0/)
* [DefCon 2020 Demo Labs](https://www.youtube.com/watch?v=1q2Eo3x3u0g)
* [Blog: Capturando Hashes NetNTLMv2 do RDP: Detalhes do ataque e um guia técnico prático](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/)
* [Slides do BlackHat USA Arsenal 2021](https://gosecure.github.io/presentations/2021-08-05_blackhat-usa/BlackHat-USA-21-Arsenal-PyRDP-OlivierBilodeau.pdf)
* [Apresentação: Eu Vi Você Jogar os Dados: Monitoramento RDP Sem Precedentes Revela as Táticas dos Atacantes](http://i.blackhat.com/BH-US-23/Presentations/US-23-Bilodeau-I-Watched-You-Roll-the-Die-Unparalleled-RDP-Monitoring.pdf) no BlackHat USA 2023

## Contribuindo para o PyRDP

Veja nossas [diretrizes de contribuição](https://github.com/gosecure/pyrdp/blob/main/CONTRIBUTING.md).

## Agradecimentos

O PyRDP utiliza código dos seguintes softwares de código aberto:

- [RC4-Python](https://github.com/bozhu/RC4-Python) para a implementação do RC4.
- [rdesktop](https://github.com/rdesktop/rdesktop) para descompressão de bitmap.
- [rdpy](https://github.com/citronneur/rdpy) para chaves RC4, as ligações de descompressão de bitmap e o código GUI base para o player do PyRDP.
- [FreeRDP](https://github.com/FreeRDP/FreeRDP) para a enumeração de códigos de varredura.
Baixar ferramenta