ridenum

Outil de cyclage de RID (Relative Identifier) pour l'énumération d'utilisateurs Windows. Itère sur les RID via des sessions null SMB ou des connexions authentifiées pour énumérer tous les comptes utilisateurs d'un domaine ou d'une base SAM locale. RID (Relative Identifier) cycling tool for Windows user enumeration. Iterates through RIDs over null sessions or authenticated SMB to enumerate all user accounts in a domain or local SAM database.

↗ https://github.com/trustedsec/ridenum

Overview

ridenum cycles through Windows RIDs (Relative Identifiers) using SMB null sessions or authenticated connections to enumerate user accounts. Every Windows user has a SID ending in a RID — by iterating through RIDs, you can discover all accounts even when SAMR enumeration is restricted.

Basic Usage

Basic RID cycling (null session)

ridenum.py 10.10.10.1 500 50000

With authentication

ridenum.py 10.10.10.1 500 50000 username password

Default range (500-50000)

ridenum.py 10.10.10.1 500 50000

Save output

ridenum.py 10.10.10.1 500 50000 > users.txt

RID Ranges

# Well-known RIDs:
# 500 = Administrator
# 501 = Guest
# 502 = KRBTGT (domain)
# 512 = Domain Admins (group)
# 513 = Domain Users (group)
# 514 = Domain Guests (group)

# User accounts start at 1000 (typically)
# Scan range 500-10000 for most environments

For large domains, scan up to 100000

ridenum.py 10.10.10.1 500 100000

Authentication Modes

Null session (may be restricted on modern Windows)

ridenum.py 10.10.10.1 500 50000

Authenticated with username/password

ridenum.py 10.10.10.1 500 50000 "DOMAIN\user" password

Local account

ridenum.py 10.10.10.1 500 50000 user password

Alternative Methods

Using rpcclient directly

rpcclient -U "" -N 10.10.10.1

→ > enumdomusers (if SAMR enumeration allowed) > queryuser RID (query specific RID)

# Automated RID cycling with rpcclient
for i in $(seq 500 1100); do
  rpcclient -U "" -N 10.10.10.1 -c "queryuser $(printf '%x' $i)" 2>/dev/null | grep "User Name"
done

# Using impacket-lookupsid
impacket-lookupsid guest@10.10.10.1
impacket-lookupsid domain/user:password@10.10.10.1

Tips

  • RID cycling works when standard SAMR enumeration is blocked
  • impacket-lookupsid is the preferred modern alternative — more reliable
  • Domain user RIDs are consistent domain-wide; local accounts only on that machine
  • Found usernames feed into Kerberoasting, AS-REP roasting, and spray attacks
  • impacket-lookupsid guest@target works on older Windows with null sessions
Help / Man page
ridenum.py target start_rid end_rid [username] [password]

target      IP address of Windows host
start_rid   Starting RID (usually 500)
end_rid     Ending RID (500-50000 covers most)
username    (optional) Authentication username
password    (optional) Authentication password

Output: Lists all discovered usernames with their RIDs

Vue d’ensemble

ridenum cycle à travers les RID (Relative Identifiers) Windows en utilisant des sessions null SMB ou des connexions authentifiées pour énumérer les comptes utilisateurs. Chaque utilisateur Windows possède un SID se terminant par un RID : en itérant sur les RID, il est possible de découvrir tous les comptes même quand l’énumération SAMR est restreinte.

Utilisation basique

# Cyclage de RID basique (session null)
ridenum.py 10.10.10.1 500 50000

# Avec authentification
ridenum.py 10.10.10.1 500 50000 username password

# Plage par défaut (500-50000)
ridenum.py 10.10.10.1 500 50000

# Sauvegarder la sortie
ridenum.py 10.10.10.1 500 50000 > users.txt

Plages de RID

# RID bien connus :
# 500 = Administrateur
# 501 = Invité
# 502 = KRBTGT (domaine)
# 512 = Domain Admins (groupe)
# 513 = Domain Users (groupe)
# 514 = Domain Guests (groupe)

# Les comptes utilisateurs commencent typiquement à 1000
# Scanner la plage 500-10000 pour la plupart des environnements

Pour les grands domaines, scanner jusqu’à 100000

ridenum.py 10.10.10.1 500 100000

Modes d’authentification

# Session null (peut être restreinte sur les Windows modernes)
ridenum.py 10.10.10.1 500 50000

# Authentifié avec utilisateur/mot de passe
ridenum.py 10.10.10.1 500 50000 "DOMAIN\user" password

# Compte local
ridenum.py 10.10.10.1 500 50000 user password

Méthodes alternatives

Utiliser rpcclient directement

rpcclient -U "" -N 10.10.10.1

→ > enumdomusers (si l’énumération SAMR est autorisée) > queryuser RID (interroger un RID spécifique)

# Cyclage de RID automatisé avec rpcclient
for i in $(seq 500 1100); do
  rpcclient -U "" -N 10.10.10.1 -c "queryuser $(printf '%x' $i)" 2>/dev/null | grep "User Name"
done

# Avec impacket-lookupsid
impacket-lookupsid guest@10.10.10.1
impacket-lookupsid domain/user:password@10.10.10.1

Conseils

  • Le cyclage de RID fonctionne quand l’énumération SAMR standard est bloquée
  • impacket-lookupsid est l’alternative moderne à privilégier : plus fiable
  • Les RID d’utilisateurs de domaine sont cohérents sur tout le domaine ; les comptes locaux uniquement sur cette machine
  • Les noms d’utilisateurs trouvés alimentent le Kerberoasting, l’AS-REP roasting et les attaques par spray
  • impacket-lookupsid guest@target fonctionne sur des Windows plus anciens avec sessions null
Aide / Page de manuel
ridenum.py target start_rid end_rid [username] [password]

target      IP address of Windows host
start_rid   Starting RID (usually 500)
end_rid     Ending RID (500-50000 covers most)
username    (optional) Authentication username
password    (optional) Authentication password

Output: Lists all discovered usernames with their RIDs