# RPC Enumeration

A través del servicio RPC podemos recopilar bastante información. Podemos llegar a enumerar usuarios, grupos, servicios y otros recursos críticos del sistema.

#### Acceso sin credenciales

```
rpcclient -U "" <IP> -N
```

#### Acceso con credenciales

```
rpcclient -U 'user%contraseña' <IP>
```

#### Comandos importantes:

* `enumdomusers` Enumerar usuarios del dominio.

Para que nos guarde en un diccionario todo limpio:

```
rpcclient -U "" -N 10.211.11.10 -c 'enumdomusers' | grep -oP '\[.*?\]' | grep -v "0x" | tr -d '[]' > users
```

* `enumdomgroups` Enumerar grupos del dominio.
* `querygroupmem <RID>` Enumerar usuarios del grupo elegido
* `queryuser <RID>` Mostrar detalles de un usuario específico. Es importante tener en cuenta esto ya que algunos usuarios pueden tener Descripciones un tanto peculiar.
* `querydispinfo` Listar usuarios con información detallada (como nombres completos y comentarios).
* `netshareenum` Enumerar recursos compartidos.
* `srvinfo` Ver información general de la máquina.

> Esto puede ser una vía potencial ya que podemos enumerar que usuarios hay en el grupo Admins por ejemplo y si conseguimos credenciales con un usuario, pues sería potencial.

![](/files/YKeGBLSOfL65sCsp7nVx)

#### Cambiar contraseña de un usuario

Si un usuario está en el mismo grupo, podemos intentar cambiar la contraseña y luego intentar por otra vía, por ejemplo RDP.

```
rpcclient $> setuserinfo2 MOLLY.SMITH 23 'Password123!'
```

#### RID Cycling

Este ataque se basa en **adivinar RIDs (Relative Identifiers)** para descubrir usuarios, grupos y otros objetos de dominio que podrían estar ocultos o no listados mediante métodos normales de enumeración.

* **RIDs conocidos:**
  * **500**: Administrator
  * **501**: Guest
  * **502-1000**: System accounts
  * **1000+**: Usuarios y grupos normales

```
for i in $(seq 500 2000); do echo "queryuser $i" | rpcclient -U "" -N 10.211.11.10 2>/dev/null | grep -i "User Name"
done
```

#### Tabla de valores de políticas de contraseña

| **Valor del Bit** | **Propiedad**                           | **Descripción**                                                                                                                                                      |
| ----------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `0x00000000`      | **SIN RESTRICCIONES**                   | No se aplican restricciones de contraseña. Esto indica que no hay políticas de complejidad, no se requieren contraseñas seguras, y no hay restricciones adicionales. |
| `0x00000001`      | **DOMAIN\_PASSWORD\_COMPLEX**           | Las contraseñas deben cumplir con requisitos de complejidad (incluyendo caracteres especiales, mayúsculas, minúsculas, y números).                                   |
| `0x00000002`      | **DOMAIN\_PASSWORD\_NO\_ANON\_CHANGE**  | Los usuarios anónimos no pueden cambiar contraseñas.                                                                                                                 |
| `0x00000004`      | **DOMAIN\_PASSWORD\_NO\_CLEAR\_CHANGE** | Los cambios de contraseña no pueden enviarse en texto plano.                                                                                                         |
| `0x00000008`      | **DOMAIN\_LOCKOUT\_ADMINS**             | Las cuentas de administrador están sujetas a bloqueo si se detectan intentos fallidos de inicio de sesión.                                                           |
| `0x00000010`      | **DOMAIN\_PASSWORD\_STORE\_CLEARTEXT**  | Permitir que las contraseñas se almacenen en texto plano (esto es muy inseguro y generalmente no se utiliza en configuraciones modernas).                            |
| `0x00000020`      | **DOMAIN\_REFUSE\_PASSWORD\_CHANGE**    | Se rechazan las solicitudes de cambio de contraseña, lo que podría bloquear a los usuarios.                                                                          |


---

# Agent Instructions: 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://alv-fh.gitbook.io/alv-fh/active-directory-methodology/rpc-enumeration.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.
