> 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>
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/ataques/windows/services/msrpc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
