Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
OutOfTune — 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. | Kitploit
Outils/GitHubGitHub/stra-x/outoftune
Authentification et AutorisationEscalade de PrivilègesAnalyse des VulnérabilitésMouvement LatéralAudit de ConfigurationCollecte d'InformationsPost-ExploitationTests d'IntrusionSécurité CloudSécurité MobileGestion des Identités et des Accès (IAM)
313il y a 4 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Red Teaming
GitHubstra-x/outoftune

OutOfTune

Voir le dépôt

À propos

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.

Partager

OutOfTune

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 :

  • https://stra-x.github.io/Re-Engineering-Pytune-Rogue-devices-in-the-age-of-conditional-access/
  • https://stra-x.github.io/Re-Engineering-Pytune-Rogue-devices-in-the-age-of-conditional-access-pt-2/

Prérequis

root@kitploit:~
pip install -r requirements.txt

Fonctionnement

La chaîne s'exécute en phases, chacune s'appuyant sur l'état sauvegardé dans chain_state.json.

root@kitploit:~
drs-token  ->  device-join  ->  device-token  ->  mdm-enroll  ->  mdm-checkin
  1. drs-token - obtenir un jeton d'accès DRS (ROPC ou pré-phishé)
  2. device-join - enregistrer un nouvel objet appareil dans Entra ID, obtenir un certificat d'appareil
  3. device-token - s'authentifier en tant qu'appareil principal, obtenir un jeton d'inscription Intune
  4. mdm-enroll - découverte SOAP + inscription WS-Trust, obtenir un certificat client MDM
  5. mdm-checkin - OMA-DM SyncML checkin, récupérer les politiques, éventuellement définir un utilisateur principal

Utilisation

1. Obtenir un jeton DRS

ROPC (identifiants connus) :

root@kitploit:~
python OutOfTune.py drs-token -u [email protected] -p Password1!

Jeton pré-obtenu :

root@kitploit:~
python OutOfTune.py drs-token -u [email protected] -t <drs_access_token>

2. Joindre un appareil à Entra ID

root@kitploit:~
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.


3. Obtenir un jeton d'appareil principal

root@kitploit:~
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.


4. S'inscrire dans Intune MDM

root@kitploit:~
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).


5. Checkin OMA-DM

root@kitploit:~
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.

Options

Informations utiles extraites


Analyser les tours SyncML sauvegardés

Réanalysez les tours XML bruts sauvegardés avec --save-syncml sans exécuter un checkin en direct.

root@kitploit:~
python OutOfTune.py parse-checkin --dir ./output/raw -O ./output2
python OutOfTune.py parse-checkin --file ./output/raw/round_001.xml -O ./output2

Vérifier l'état de conformité

root@kitploit:~
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.


Télécharger les applications et scripts

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.

root@kitploit:~
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
  • Les scripts PowerShell sont sauvegardés dans scripts/<PolicyId>.ps1
  • Les applications Win32 sont téléchargées depuis le CDN, déchiffrées et extraites dans apps/<NomApp>/

Télécharger les scripts de correction

Récupère les scripts de correction proactive (paires détection + correction) assignés à l'appareil.

root@kitploit:~
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étection
  • remediation.ps1 — le script de correction
  • params.json — ID de la politique et éventuels paramètres du script

Nettoyage

Si 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 :

root@kitploit:~
python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>

Supprimer l'objet appareil d'Entra ID :

root@kitploit:~
python OutOfTune.py entra-delete

Vérifier la progression de la chaîne

root@kitploit:~
python OutOfTune.py status

Profils d'appareil

Les attributs d'appareil envoyés à Intune lors de l'inscription et du checkin sont entièrement usurpables via un profil JSON. Cela inclut les identifiants matériels, la version de l'OS, le fabricant et toutes les valeurs CSP de conformité auto-déclarées (BitLocker, Pare-feu, Defender, TPM, Secure Boot).

root@kitploit:~
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
python OutOfTune.py mdm-checkin   # le profil est sauvegardé dans l'état et réutilisé automatiquement

Profils inclus

FichierAppareil
profiles/default.jsonValeurs par défaut (VMware / Win10 Enterprise)
profiles/dell_win11_ent.jsonDell Latitude 5540 / Windows 11 Enterprise 23H2

Champs du profil

Toutes les valeurs CSP DeviceStatus sont auto-déclarées et considérées comme fiables par Intune sans vérification indépendante. Les vérifications de conformité attestées par HAS (BitLockerEnabled, SecureBootEnabled via la CSP HealthAttestation) nécessitent un TPM réel et ne peuvent pas être usurpées de cette manière.


Options globales

root@kitploit:~
--debug          journalisation verbeuse HTTP + tokens
--proxy <url>    acheminer le trafic via un proxy (ex. http://127.0.0.1:8080)

Ces options se placent avant la commande :

root@kitploit:~
python OutOfTune.py --debug device-token
python OutOfTune.py --proxy http://127.0.0.1:8080 mdm-checkin

Remplacement de certificats

Si vous avez des certificats d'une exécution précédente ou souhaitez utiliser des fichiers PFX spécifiques :

root@kitploit:~
python OutOfTune.py device-token      --cert chemin/vers/appareil.pfx
python OutOfTune.py mdm-enroll        --cert chemin/vers/appareil.pfx
python OutOfTune.py mdm-checkin       --cert chemin/vers/mdm.pfx
python OutOfTune.py check             --cert chemin/vers/appareil.pfx
python OutOfTune.py download-apps     --cert chemin/vers/mdm.pfx
python OutOfTune.py get-remediations  --cert chemin/vers/mdm.pfx

Fichier d'état

Toutes les sorties de phase sont sauvegardées dans chain_state.json dans le répertoire de travail. Supprimez-le pour repartir à zéro. Utilisez status pour inspecter l'état actuel sans rien exécuter. Si vous manipulez plusieurs appareils, assurez-vous que chacun possède son propre fichier d'état. Le fichier d'état par défaut peut être modifié au début du script pour l'appareil que vous traitez. Soyez prudent avec les options de remplacement de certificat, elles sont principalement destinées au débogage.

Crédits

Un grand merci à @temp43487580 qui a créé l'original Pytune et dont les recherches originales ont rendu cela possible

  • https://i.blackhat.com/EU-24/Presentations/EU-24-Chudo-Unveiling-the-Power-of-Intune-Leveraging-Intune-for-Breaking-Into-Your-Cloud-and-On-Premise.pdf
  • https://temp43487580.github.io/intune/bypass-enrollment-restictions-to-break-byod-barriers-in-intune/
  • https://github.com/secureworks/pytune
Télécharger l’outil
OptionDescription
--cert FICHIERPFX MDM à utiliser — le nom de l'appareil est dérivé automatiquement du nom de fichier
-r RTJeton d'actualisation utilisateur — définit l'utilisateur principal (nécessaire une seule fois)
-O RÉPSauvegarder les artefacts extraits dans RÉP (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json)
--save-syncml RÉPSauvegarder 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égorieSauvegardé dansRemarques
Profils Wi-Fiwifi/<SSID>.xml + _psk.txtPSK en clair extrait si présent
Profils VPNvpn/<nom>.xmlProfileXML complet
Charges utiles de certificatscerts/cert_N.b64Blobs PFX chiffrés (bruts, pas encore déchiffrés)
Défis SCEPaffichéNom du modèle CA, URL du défi
Scriptsscripts/<nom>.ps1Scripts PowerShell poussés via OMA-DM
URLs de téléchargement MSIaffichéLiens CDN directs pour les applications LOB
Blob ODJodj_blob.b64 + odj_strings.txtJonction de domaine hors ligne — chaînes lisibles extraites
Valeurs d'ajoutadd_values.jsonToutes les autres commandes Add (certificats racine CA, intégration MDE, configuration de politique)
Valeurs de remplacementpolicy_values.jsonValeurs de la CSP Policy définies par Intune
ChampCSPRemarques
os_versionDevDetail/SwVVérifications de conformité de version OS min/max
os_edition_syncmlWindowsLicensing/Edition4 = Enterprise, 48 = Pro
manufacturerDevInfo/ManCertaines politiques autorisent les fabricants
mac_addressSOAP AdditionalContext/MACTous des zéros est un indicateur évident
hw_dev_id_enrollSOAP AdditionalContext/HWDevID64 caractères hexadécimaux
bitlocker_statusBitLocker/Status/DeviceEncryptionStatus2 = chiffré (auto-déclaré)
encryption_complianceDeviceStatus/Compliance/EncryptionCompliance1 = conforme (auto-déclaré)
firewall_statusDeviceStatus/Firewall/Status0 = activé (auto-déclaré)
secure_boot_stateDeviceStatus/SecureBootState1 = activé (auto-déclaré, non attesté par HAS)
tpm_versionDeviceStatus/TPM/SpecificationVersionAucune preuve cryptographique
defender_enabledDefender/Health/DefenderEnabledtrue = en cours d'exécution
defender_versionDefender/Health/DefenderVersionCertaines politiques imposent une version minimale