
Demander des jetons Entra ID au Web Account Manager (WAM)
askWAM demande silencieusement des jetons d'accès Microsoft Entra via Windows Web
Account Manager (WAM). Il est fourni sous forme de client .NET Framework, d'un client natif
x64 autonome et d'un Beacon Object File x64 avec un adaptateur de commande CNA.
Tous les frontends peuvent énumérer les comptes visibles par le client et cibler une identité par son ID de compte WAM opaque ou son nom d'utilisateur exact. Ils ne basculent jamais vers une authentification interactive.
Les jetons demandés via ce flux hériteront des détails suivants :
Cette façon de demander des jetons fonctionne également lorsque la protection des jetons est appliquée.
Les jetons CAE peuvent être demandés avec le flag --cae.
1fec8e78-bce4-4aaf-ab1b-5451cc387264https://graph.microsoft.com/.defaultorganizations--hide la supprimeLe scope Graph par défaut n'est sélectionné que lorsque ni --scope ni --resource
ne sont fournis.
Le mode scope accepte un ou plusieurs scopes v2. Il ajoute
openid offline_access profile et définit la propriété de requête wam_compat=2.0 de WAM.
askwam --scope https://graph.microsoft.com/.default
Le mode resource implémente le flux compatible v1 de WAM. Il envoie un scope vide, définit
la propriété de requête resource de WAM et ne définit pas wam_compat.
askwam --resource https://graph.microsoft.com
--scope et --resource sont mutuellement exclusifs.
--enum Énumérer les comptes sans demander de jeton
--account-id <id> Sélectionner un ID de compte WAM opaque exact
--username <username> Sélectionner un nom d'utilisateur exact et unique
--cae Envoyer l'objet de claims prédéfini xms_cc/cp1
--claims-json <json> Envoyer un objet de claims OAuth brut ou un challenge
Le client .NET prend également en charge --claims-file <path> pour lire un objet de claims
OAuth brut depuis un fichier UTF-8. --cae est mutuellement exclusif avec une entrée de claims
personnalisée. Incluez cp1 dans l'objet brut lorsqu'un challenge personnalisé nécessite également CAE.
Le déploiement nécessite Windows avec .NET Framework 4.8. Le répertoire de release contient l'application et sa configuration d'exécution ; il ne contient pas de runtime .NET ou WinRT privé.
La compilation nécessite le SDK .NET et les métadonnées du Windows SDK 10.0.26100.0 par défaut.
Définissez la propriété MSBuild WindowsMetadataPath lors de l'utilisation d'un autre SDK Windows 10 ou Windows 11 installé.
dotnet build .\src\dotnet\AskWAM.csproj --configuration Release
.\src\dotnet\bin\Release\net48\askwam.exe --enum
.\src\dotnet\bin\Release\net48\askwam.exe --resource https://graph.microsoft.com --hide
Le client écrit des lignes simples name=value. Il ne décode ni n'affiche les claims JWT.
La compilation nécessite Visual Studio 2022 C++ Build Tools et un SDK Windows 10 ou Windows 11. L'énumération des comptes nécessite Windows 10 version 1803 ou ultérieure.
.\src\native\build.ps1 -Configuration Release
.\src\native\bin\Release\askwam.exe --enum
.\src\native\bin\Release\askwam.exe --resource https://graph.microsoft.com --hide
L'exécutable de release est lié statiquement au runtime C et utilise la surface d'API WinRT intégrée. Son format de résultat lisible par machine est JSON.
Compilez le BOF x64 et chargez src\bof\askwam.cna dans Cobalt Strike :
.\src\bof\build.ps1 -Configuration Release
askwam --enum
askwam --account-id <id-from-enum>
askwam --resource https://graph.microsoft.com --hide
askwam --cae --hide
askwam --claims-json {"access_token":{"xms_cc":{"values":["cp1"]}}}
Le script de compilation vérifie le point d'entrée du BOF et la liste d'autorisation des
symboles non définis. Lorsque -BofLintPath ou BOFLINT_PATH désigne boflint.py d'Outflank,
il valide également l'objet de release pour les profils de loader Cobalt Strike, Outflank C2 et Core Impact.
Le projet fournit également src\bof\extension.json pour charger le BOF Release comme
extension Sliver. Mythic Apollo n'a pas besoin de fichier sidecar équivalent ; sa
commande execute_coff accepte l'objet et la même séquence d'arguments typés.
Voir src\bof\README.md pour les deux intégrations et le contrat d'arguments packés.
Documentation officielle :
Projets similaires :
Ce projet a été créé par Codex en utilisant GPT 5.6 Sol.