
Outil d'inscription d'appareil rogue pour Entra ID et Intune MDM. Automatise l'adhésion de l'appareil, l'acquisition de jetons, l'inscription MDM et la vérification OMA-DM pour extraire les politiques, les identifiants Wi-Fi, les scripts et les applications tout en contournant l'accès conditionnel.
Inspiré par l'original Pytune, OutOfTune enregistre un appareil non autorisé dans Entra ID, l'inscrit dans Intune MDM et vérifie l'état de conformité résultant.
Ne prend en charge que les appareils Windows car c'était mon objectif principal, pourrait en ajouter d'autres à l'avenir.
Blog d'accompagnement :
pip install -r requirements.txt
La chaîne s'exécute en phases, chacune s'appuyant sur l'état sauvegardé dans chain_state.json.
drs-token -> device-join -> device-token -> mdm-enroll -> mdm-checkin
ROPC (identifiants connus) :
python OutOfTune.py drs-token -u [email protected] -p Password1!
Jeton pré-obtenu :
python OutOfTune.py drs-token -u [email protected] -t <drs_access_token>
python OutOfTune.py device-join
python OutOfTune.py device-join -n CORP-LAPTOP-01
Produit <NOM_APPAREIL>.pfx - le certificat d'appareil. Le mot de passe est password.
python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx
S'authentifie auprès d'AAD en tant qu'objet appareil (pas en tant qu'utilisateur). Contourne les politiques CA limitées à l'utilisateur.
python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
Exécute la découverte SOAP contre le point de terminaison MDM, puis soumet une demande d'inscription PKCS10 WS-Trust. Produit <NOM_APPAREIL>_mdm.pfx.
Utilisez --profile pour usurper les attributs matériels/OS de l'appareil envoyés à Intune (voir Profils d'appareil).
python OutOfTune.py mdm-checkin
python OutOfTune.py mdm-checkin -r <refresh_token>
python OutOfTune.py mdm-checkin --cert CORP-LAPTOP-01_mdm.pfx
python OutOfTune.py mdm-checkin -O ./output
python OutOfTune.py mdm-checkin -O ./output --save-syncml ./output/raw
Exécute la boucle SyncML OMA-DM contre r.manage.microsoft.com. Intune poussera les profils de configuration, les affectations d'applications et toutes autres politiques ciblant l'appareil. Une fois la boucle terminée, les informations sont automatiquement extraites et affichées.
Si -r est fourni, le jeton d'actualisation est échangé contre un jeton d'accès manage.microsoft.com et envoyé comme Authorization: Bearer dans chaque requête SyncML. Intune lit l'UPN de ce jeton et le définit comme utilisateur principal de l'appareil, ce qui entraîne la liaison des politiques de conformité limitées à l'utilisateur. Vous n'avez besoin d'exécuter qu'une seule fois avec -r pour qu'un utilisateur soit assigné ; tous les checkins ultérieurs peuvent être exécutés sans jeton d'actualisation.
Sans -r, l'appareil n'aura pas d'utilisateur principal.
Après ce premier checkin, si vous ne vous reconnectez pas pendant une période prolongée (généralement 5 à 7 jours), l'appareil pourrait devenir non conforme en raison de la politique par défaut "Is Active". Selon la configuration d'Intune, l'appareil peut entrer dans une période de grâce avant d'être marqué comme non conforme. Si cela se produit, relancez mdm-checkin. Si vous avez déjà utilisé un jeton d'actualisation pour assigner un utilisateur principal, vous n'avez pas besoin de le soumettre à nouveau car l'utilisateur principal est désormais stocké dans le backend Intune.
| Option | Description |
|---|---|
--cert FICHIER | PFX MDM à utiliser — le nom de l'appareil est dérivé automatiquement du nom de fichier |
-r RT | Jeton d'actualisation utilisateur — définit l'utilisateur principal (nécessaire une seule fois) |
-O RÉP | Sauvegarder les artefacts extraits dans RÉP (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json) |
--save-syncml RÉP | Sauvegarder le XML SyncML brut par tour dans RÉP pour une réanalyse hors ligne |
-o FICHIER | Écrire la sortie complète de la console dans FICHIER |
| Catégorie | Sauvegardé dans | Remarques |
|---|---|---|
| Profils Wi-Fi | wifi/<SSID>.xml + _psk.txt | PSK en clair extrait si présent |
| Profils VPN | vpn/<nom>.xml | ProfileXML complet |
| Charges utiles de certificats | certs/cert_N.b64 | Blobs PFX chiffrés (bruts, pas encore déchiffrés) |
| Défis SCEP | affiché | Nom du modèle CA, URL du défi |
| Scripts | scripts/<nom>.ps1 | Scripts PowerShell poussés via OMA-DM |
| URLs de téléchargement MSI | affiché | Liens CDN directs pour les applications LOB |
| Blob ODJ | odj_blob.b64 + odj_strings.txt | Jonction de domaine hors ligne — chaînes lisibles extraites |
| Valeurs d'ajout | add_values.json | Toutes les autres commandes Add (certificats racine CA, intégration MDE, configuration de politique) |
| Valeurs de remplacement | policy_values.json | Valeurs de la CSP Policy définies par Intune |
Réanalysez les tours XML bruts sauvegardés avec --save-syncml sans exécuter un checkin en direct.
python OutOfTune.py parse-checkin --dir ./output/raw -O ./output2
python OutOfTune.py parse-checkin --file ./output/raw/round_001.xml -O ./output2
python OutOfTune.py check -u [email protected] -r <refresh_token>
python OutOfTune.py check -u [email protected] -p Password1!
Frappe un PRT à partir du certificat d'appareil, l'échange contre un jeton IWService, et interroge IWService/Devices pour l'état de conformité de l'appareil et les éventuelles règles de non-conformité.
Utilisez -r avec un jeton d'actualisation de session MFA si le CA du locataire exige MFA pour la ressource d'inscription.
Récupère les applications Win32 et les scripts PowerShell assignés à l'appareil via le IME SideCarGateway. Utilise uniquement le certificat client MDM — aucun jeton utilisateur requis.
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
scripts/<PolicyId>.ps1apps/<NomApp>/Récupère les scripts de correction proactive (paires détection + correction) assignés à l'appareil.
python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx
Chaque politique est sauvegardée dans remediations/<PolicyId>/ contenant :
detection.ps1 — le script de détectionremediation.ps1 — le script de correctionparams.json — ID de la politique et éventuels paramètres du scriptSi la suppression de l'appareil d'Intune échoue, supprimez-le d'Entra. Il entrera alors dans une période de grâce dans Intune et sera automatiquement réévalué ultérieurement.
Supprimer l'appareil d'Intune :
python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>
Supprimer l'objet appareil d'Entra ID :
python OutOfTune.py entra-delete