In My Mind
← ciberseguridad

Rpcclient

rpcclient es una herramienta incluida en el conjunto de Samba que permite interactuar desde Linux con servicios MS-RPC (Microsoft Remote Procedure Call) de sistemas Windows.

En un entorno de Active Directory, puede utilizarse durante la fase de reconocimiento para obtener información sobre:

  • Usuarios.
  • Grupos.
  • Dominio.
  • SID.
  • Políticas de contraseñas.
  • Información de cuentas.
  • Relaciones y recursos del dominio.

Su utilidad depende de los permisos que tenga la cuenta utilizada y de la configuración del Domain Controller.

Nota: Los ejemplos deben ejecutarse únicamente contra laboratorios o sistemas donde tengas autorización.


1. Instalación

En Debian/Ubuntu:

sudo apt install smbclient

En Arch Linux:

sudo pacman -S samba

Comprobar instalación:

rpcclient --help

2. Conexión a un Domain Controller

La sintaxis básica es:

rpcclient -U usuario 10.10.10.10

Por ejemplo:

rpcclient -U alice 10.10.10.10

Después se solicitará la contraseña:

Enter WORKGROUP\alice's password:

Si la autenticación es correcta aparecerá:

rpcclient $>

3. Probar una Null Session

En algunos entornos mal configurados puede ser posible conectarse sin credenciales.

rpcclient -U "" -N 10.10.10.10

Donde:

-U "" → Usuario vacío
-N    → No solicitar contraseña

Si funciona, tendremos:

rpcclient $>

Esto no significa necesariamente que tengamos acceso administrativo. Lo importante es comprobar qué información puede consultarse con esa sesión.


4. Obtener información del dominio

Uno de los primeros comandos que podemos utilizar es:

rpcclient $> querydominfo

Puede proporcionar información relacionada con:

Domain name
Domain SID
Número de usuarios
Número de grupos
Número de servidores

También podemos consultar información de contraseñas:

rpcclient $> getdompwinfo

Dependiendo de la configuración, podemos obtener información sobre la política de contraseñas del dominio.


5. Enumerar usuarios

Uno de los comandos más importantes:

rpcclient $> enumdomusers

Una salida podría ser:

user:[Administrator] rid:[0x1f4]
user:[alice] rid:[0x451]
user:[bob] rid:[0x452]
user:[svc_backup] rid:[0x453]

Aquí obtenemos dos datos importantes:

Usuario
RID

El RID (Relative Identifier) identifica al objeto dentro del dominio.


6. Enumerar grupos

Podemos listar los grupos del dominio:

rpcclient $> enumdomgroups

Ejemplo:

group:[Domain Admins] rid:[0x200]
group:[Domain Users] rid:[0x201]
group:[IT] rid:[0x452]

Esto permite comenzar a entender cómo están organizados los privilegios dentro del dominio.


7. Consultar información de un usuario

Una vez conocemos el RID de un usuario podemos utilizar:

rpcclient $> queryuser 0x451

Dependiendo de los permisos, puede mostrar información como:

User name
Full name
Description
Account flags
Password information
Last logon
Group information

También podemos consultar un usuario mediante su RID hexadecimal:

rpcclient $> queryuser 0x1f4

El 0x1f4 corresponde normalmente al RID del usuario Administrator en muchos dominios Windows, aunque esto no debe asumirse para todos los entornos.


8. Enumerar miembros de un grupo

Primero podemos consultar el grupo:

rpcclient $> querygroup 0x200

Después podemos utilizar los RIDs obtenidos para investigar los miembros.

Este proceso permite pasar de:

Dominio
   │
   └── Grupo
        │
        └── Usuarios

y comenzar a identificar relaciones de privilegios.


9. Obtener el SID del dominio

Podemos utilizar:

rpcclient $> lsaquery

Una respuesta puede contener:

Domain Name: CORP
Domain Sid: S-1-5-21-123456789-987654321-111111111

El SID del dominio es especialmente importante porque los RIDs se agregan al SID para formar el identificador completo de los objetos.

Por ejemplo:

Domain SID:
S-1-5-21-123456789-987654321-111111111

RID:
1105

El SID resultante sería:

S-1-5-21-123456789-987654321-111111111-1105

10. Automatizar comandos

También podemos ejecutar comandos directamente desde Bash utilizando -c:

rpcclient -U "" -N 10.10.10.10 -c "enumdomusers"

Enumerar grupos:

rpcclient -U "" -N 10.10.10.10 -c "enumdomgroups"

Consultar información del dominio:

rpcclient -U "" -N 10.10.10.10 -c "querydominfo"

Esto resulta útil para crear scripts de enumeración.


11. Flujo básico de reconocimiento

Durante un laboratorio de Active Directory podemos seguir este flujo:

             Domain Controller
                    │
                    ▼
             Puerto 445/139
                    │
                    ▼
               rpcclient
                    │
          ┌─────────┼─────────┐
          ▼         ▼         ▼
       Usuarios   Grupos    Dominio
          │         │         │
          └─────────┼─────────┘
                    ▼
             Analizar RIDs
                    │
                    ▼
          Identificar privilegios

Por ejemplo:

rpcclient -U "" -N 10.10.10.10

Dentro:

rpcclient $> querydominfo
rpcclient $> enumdomusers
rpcclient $> enumdomgroups
rpcclient $> lsaquery
rpcclient $> getdompwinfo

Si la sesión anónima no funciona, podemos utilizar credenciales autorizadas:

rpcclient -U alice 10.10.10.10

12. Comandos principales

ComandoFunción
querydominfoInformación del dominio
enumdomusersEnumerar usuarios
enumdomgroupsEnumerar grupos
queryuser <RID>Información de un usuario
querygroup <RID>Información de un grupo
lsaqueryObtener información del dominio/SID
getdompwinfoConsultar política de contraseñas
srvinfoInformación del servidor
netshareenumEnumerar recursos compartidos
helpMostrar comandos disponibles
exitSalir

13. rpcclient dentro de un pentest

rpcclient es especialmente útil durante la enumeración inicial de Active Directory.

Un flujo sencillo sería:

# Identificar SMB/RPC
nmap -p 139,445 10.10.10.10

# Intentar Null Session
rpcclient -U "" -N 10.10.10.10

# Enumerar dominio
rpcclient $> querydominfo

# Enumerar usuarios
rpcclient $> enumdomusers

# Enumerar grupos
rpcclient $> enumdomgroups

# Obtener SID
rpcclient $> lsaquery

La información obtenida puede combinarse posteriormente con herramientas como:

ldapsearch
NetExec
enum4linux-ng
BloodHound
Impacket

De esta manera, rpcclient se convierte en una pieza más dentro del proceso de reconocimiento de Active Directory.


Cheat Sheet

# Conexión autenticada
rpcclient -U alice 10.10.10.10

# Null Session
rpcclient -U "" -N 10.10.10.10

# Enumerar usuarios
rpcclient -U "" -N 10.10.10.10 -c "enumdomusers"

# Enumerar grupos
rpcclient -U "" -N 10.10.10.10 -c "enumdomgroups"

# Información del dominio
rpcclient -U "" -N 10.10.10.10 -c "querydominfo"

# SID del dominio
rpcclient -U "" -N 10.10.10.10 -c "lsaquery"

# Política de contraseñas
rpcclient -U "" -N 10.10.10.10 -c "getdompwinfo"

Conclusión

rpcclient es una herramienta sencilla pero muy útil para comprender cómo MS-RPC expone información de Active Directory. Aunque herramientas modernas como NetExec automatizan gran parte de estas tareas, conocer rpcclient permite entender qué información se está consultando realmente y cómo funcionan muchas de las técnicas de enumeración utilizadas durante un pentest de Windows.

El siguiente paso lógico después de rpcclient es estudiar NetExec, ya que permite combinar enumeración SMB/LDAP, autenticación y análisis de hosts de una forma mucho más automatizada.