> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/ataques/windows/services/msrpc.md).

# Remote Procedure Call (RPC / MSRPC)

### RPCClient

#### Acessando host

Acessando o hos&#x74;**.** Caso dê certo, seu terminal deve ficar com o seguinte PS1: **`rpcclient $>`**

```bash
# Com autenticação
rpcclient -U '<user>%<pass>' <ip>

# Sem autenticação (Sessão Nula)
rpcclient -U "" -N <ip>
```

Caso o alvo esteja em um Domínio, é preciso deixar o comando da seguinte forma:

```
rpcclient -U '<user>' -P '<pass>' -W '<domain>' -I <ip>
```

#### Informações sobre o servidor

Retorna detalhes como IP, versão do SO, Wk (Workstation), Sv (Server), etc

```bash
srvinfo
```

#### Informações sobre o usuário atual

```
getusername
```

#### Enumerando Active Directory

Informações sobre o domí­nio

```bash
querydominfo
```

Quando for enumerar um domí­nio, pode trazer um `Builtin` na saí­da, que é um álias para `groups`

```bash
enumdomains
```

Detalhes de login, nomes dos usuários e descrição

```bash
querydispinfo 
```

Após o comando acima, iremos ter o RID dos usuários, então podemos pegar esse RID (por exemplo 0x465) e executar o seguinte comando:

```bash
queryuser 0x464
```

Exibindo os compartilhamentos

```bash
netshareenumall
```

Enumerando o domí­nio do AD

```bash
enumalsgroups builtin
enumalsgroups domain
```

Podemos também realizar alguns tipos de enumeração com os seguintes comandos:

```bash
# Grupos
enumdomgroups

# Usuários do sistema local
enumdomusers

# Impressoras
enumprinters
```

Agora que já conhecemos os usuários podemos utilizá-los no seguinte comando para retornar algumas informações:&#x20;

```bash
lookupnames <user>
```

&#x20;O retorno deve ser algo como  `<user> S-1-5-21-4254423774-1266059056-3197185112-1012 (User: 1)`.  Feito isso vamos ir mudando somente o último dígito, que no nosso exemplo seria o `2` de `1012`. Então podemos executar os sequintes comandos (até recebermos um `*unknown\unknown*` como resposta).

```bash
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1012
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1013
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1014
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1015
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1016
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1017
lookupsids S-1-5-21-4254423774-1266059056-3197185112-1018
etc...
```

Quebrando essa "chave" em partes, temos o seguinte:

| PARTE                              | DESCRIÇÃO                                     |
| ---------------------------------- | --------------------------------------------- |
| `S-1-5-21`                         | SID                                           |
| `4254423774-1266059056-3197185112` | Domínio ou  Identificador do Computador Local |
| `1015`                             | RID                                           |

#### Enumerando Informações de Usuário

```bash
queryuser <user>
queryuser <rid-user>
```

Caso queira fazer um brute force para descoberta de usuários através de uma wordist, utilize o comando abaixo:

```bash
cat <users.txt> | while read line ; do rpcclient -U "" --no-pass -c="queryuser $line" <ip_target> ; sleep 1 ; done
```

#### Enumerando Informações de Grupo

Pegue o `<rid>` com o comando acima ou com `enumdomusers` como vimos anteriormente.

```bash
queryusergroups <rid>
querygroup <rid-group>
```

A partir da saída do comando acima, iremos ver no resultado, o(s) `group rid`,  que iremos utilizar no comando abaixo para cada group rid:

```bash
querygroup <group_rid>
```

#### Enumerando Usuários de determinado Grupo

É sempre uma boa idéia verificar os usuários que pertecem ao grupo "Administrators".

```bash
querygroupmem <rid-group>
```

### Rpcdump

```bash
rpcdump.py <ip>
```

### Rpcinfo

#### Instalando

```bash
sudo apt-get install rpcbind nfs-common
```

#### Enumeração RPC

```bash
rpcinfo <ip>
rpcinfo -p <ip>
```

Na última coluna pode sair informações como `rusersd`, `NFS` e `NIS` (porta 778 que pode ser o nome do servidor). Se encontrar um serviço `NFS`, provavelmente você será capaz de listar, fazer e talvez até realizar upload de arquivos.

#### Enumeração RPC (com determinado aplicativo)

Caso queira enumerar o alvo que está executando o TTDB (ToolTalk Database), que tem um conhecido problema de segurança, execute:

```bash
rpcinfo -n 32776 -t <ip> 100083
```

**EXPLICAÇÃO:** O número 100083 é o "número do programa" do RPC para o TTDB.\
A opção `-n` é útil quando está sendo barrado pelo firewall.

**OBS.:** Utilize NMAP caso não saiba o "número do programa" e utilize o parâmetro `-sR`, assim o NMAP irá fazer todo o "trabalho sujo".

### Rusers

Enumerando Usuários conectados (UNIX)

```bash
rusers -l <ip>
```

**OBS.:** O parâmetro `-l`, serve para deixar a saída mais detalhada, incluindo a quantidade de tempo desde que o usuário digitou. Essas informações são fornecidas pelo `rpc.rusersd` (RPC), caso esteja em execução.

### nmap

```bash
nmap -sV -p 111 --script=rpcinfo <ip>
nmap -p 111 --script nfs* <ip>
nmap -p 111 -sSUC <ip>
```
