
POC de la reciente vulnerabilidad de fuerza bruta de contraseñas de Azure Active Directory de SecureWorks.
POC de la vulnerabilidad de fuerza bruta de contraseñas de Azure Active Directory recientemente revelada por SecureWorks
Este código es una prueba de concepto de la vulnerabilidad de fuerza bruta de contraseñas de Azure Active Directory revelada recientemente, anunciada por Secureworks (aquí está el artículo de Ars Technica que precedió a la publicación oficial por aproximadamente un día, pero es prácticamente idéntico).
En teoría, este enfoque permitiría realizar ataques de fuerza bruta o rociado de contraseñas contra una o más cuentas de AAD sin provocar el bloqueo de la cuenta ni generar datos de registro, haciendo así que el ataque sea invisible.
El uso básico es sencillo:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
Llamar al código de esta manera le permitirá obtener el resultado para el nombre de usuario y la contraseña especificados.
Aprovechando foreach, puede utilizar esto fácilmente para rociado de contraseñas:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
Tenga en cuenta que usar este método requerirá convertir el archivo resultante de UTF-16 a UTF-8 si desea trabajar con él en Linux:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
Si solo le interesa la enumeración, simplemente ejecute el comando como se indicó anteriormente para el rociado de contraseñas. Cualquier valor de retorno de "bad password", o cualquier valor distinto de "no user", significaría que ha encontrado un nombre de usuario válido.
Un retorno de "True" para un nombre de usuario significa que la contraseña proporcionada es válida.
Un retorno de "locked" puede significar que la cuenta está bloqueada, o que Smart Lockout le está impidiendo temporalmente interactuar con la cuenta.
Para aprovechar el código para fuerza bruta, simplemente itere sobre el campo de contraseña en lugar del campo de nombre de usuario:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
Si descubre uno o más pares de nombre de usuario/contraseña válidos, puede modificar este código para obtener el DesktopSSOToken que se devuelve. El DesktopSSOToken puede intercambiarse luego por un OAuth2 Access Token usando este método.
El OAuth2 Access Token puede usarse entonces con varios endpoints de API de Azure, M365 y O365.
Sin embargo, es posible que MFA le cause problemas en este punto. Su mejor opción aquí sería aprovechar el acceso sin MFA, como Outlook Web Access o ActiveSync. MFASweep de Dafthack es útil aquí.
La función Smart Lockout de Microsoft comenzará a afirmar falsamente que las cuentas están bloqueadas si accede al endpoint de API demasiado rápido desde la misma dirección IP. Para evitar esto, recomiendo encarecidamente usar fireprox de ustayready para evitar este problema. Simplemente cambie la variable $url de la siguiente manera:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
Sin embargo, esto no evitará Smart Lockout si está intentando forzar por fuerza bruta la contraseña de una cuenta específica.
Casi todo el código de esto fue tomado del excelente proyecto AADInternals del Dr. Nestori Syynimaa.