O **RPC (Remote Procedure Call)** é um **protocolo de comunicação** que permite que um programa execute procedimentos (funções) em outro computador na rede como se fossem locais. Esse protocolo é amplamente utilizado em sistemas distribuídos, especialmente em ambientes cliente-servidor, para facilitar a comunicação entre processos em diferentes máquinas.
## Portas Utilizadas pelo RPC
O RPC utiliza diferentes portas para estabelecer e gerenciar conexões:
- **Porta 135 (TCP/UDP)**: Conhecida como **Endpoint Mapper** ou **Portmapper**, é a porta padrão usada inicialmente para localizar os serviços RPC disponíveis em uma máquina.
- **Portas Dinâmicas (Ephemeral Ports)**: Após a conexão inicial via porta 135, o RPC aloca dinamicamente portas para comunicação adicional. O intervalo dessas portas varia conforme o sistema operacional.
Essas portas dinâmicas são atribuídas conforme necessário e podem ser configuradas para se adequar a políticas de segurança e firewall.
### RPC Client
Se conectando ao RPC usando RPCClient:
```
rcpclient -W dominio -U usuario <IP>
```
```shell
# Enumerando usuários do computador:
rcpclient
gt; enumdomusers
# Visualizar os dados do usuário atual que está logado:
rcpclient gt; getusername
# Visualizar informações do usuário:
rcpclient gt; queryuser 0x45a
# Visualizar os grupos do computador:
rcpclient gt; enumdomgroups
# Visualizar informações do grupo:
rcpclient gt; querygroup 0x100a
# Visualizar os membros do grupo:
rcpclient gt; querygroupmen 0x100a
# Obter informações do domínio:
rpcclient gt; querydominfo
# Criar um usuário no domínio:
rpcclient gt; createdomuser novo_usuario
# Deletar um usuário do domínio:
rpcclient gt; deletedomuser 0x3e8
# Obter SID a partir de um nome de usuário:
rpcclient gt; lookupnames usuario
# Obter nome de usuário a partir de um SID:
rpcclient gt; lookupsids S-1-5-21-XXXXX-XXXXX-XXXXX-500
# Adicionar direitos de conta a um usuário:
rpcclient gt; lsaaddacctrights usuario SeRemoteInteractiveLogonRight
# Remover direitos de conta de um usuário:
rpcclient gt; lsaremoveacctrights usuario SeRemoteInteractiveLogonRight
# Enumerar domínios confiáveis em uma floresta AD:
rpcclient gt; dsenumdomtrusts
```