如何使用PowerShell进行用户密码钓鱼攻击
伪造凭证提示是一种有效的权限提升和横向移动技术。在Windows环境中,用户经常会遇到Outlook、VPN及其他认证协议随机弹出的密码提示窗口。攻击者会滥用Windows和PowerShell的内置功能调用凭证弹窗以获取用户密码。
根据MITRE ATT&CK框架的定义:
“当需要额外权限的程序被执行时……操作系统通常会提示用户输入正确凭证以授权任务提升权限。攻击者可能模仿常见操作系统组件,通过PowerShell等语言显示看似合法的凭证提示。”
什么是CredPhish?
CredPhish是一个PowerShell脚本,用于调用凭证提示并外传密码。它依赖CredentialPicker API收集用户密码,使用PowerShell的Resolve-DnsName进行DNS外传,并利用Windows Defender的ConfigSecurityPolicy.exe执行任意GET请求。
下图展示了CredPhish的运行示例。注意在Windows安全提示中提交凭证后,凭据立即被发送到攻击者的DNS服务器。
默认情况下,CredPhish使用PowerShell内置的DNS解析器Resolve-DnsName外传凭证。它会将凭证中的每个字符转换为十六进制值,将转换后的值分割为预定义块,并将这些块放入热门网站的子域名中。以下截图展示了十六进制形式的外传凭证示例。注意google.com和office.com子域名中的“tokyoneon”十六进制值(746f6b796f6e656f6e)。
在解析DNS查询之前,DNS服务器会剥离十六进制子域名以避免产生大量错误响应。在下面的Wireshark截图中,注意“Answers”字段不再包含子域名,并成功解析到Google的一个IP地址。
CredPhish.ps1配置
credphish.ps1被设计为独立脚本,不需要Import-Module(常见的入侵指标)。可配置选项以变量形式位于PS1脚本顶部,以避免冗长的命令行参数。
第一行最为重要,它定义了外传数据的发送目的地(即攻击者的Kali服务器)。
|
|
接下来,几个变量定义了提示窗口如何显示给目标用户。$promptCaption定义了请求用户凭证的“应用程序”(如“Microsoft Office”)。$promptMessage通常指定与请求关联的账户。
|
|
$maxTries变量定义了提示窗口在目标提交凭证前显示的次数。为避免怀疑,默认值为1。$delayPrompts变量定义了每次提示之间的秒数(如果$maxTries大于1)。默认禁用的$validateCredentials会尝试在提升权限上下文中使用Start-Process本地验证提交的凭证。如果启用且凭证验证通过,则忽略$maxTries,并立即将数据发送到攻击者服务器。
外传方法
如前所述,DNS外传是向攻击者服务器传递密码的默认方法。$exfilDomains列表包含用于DNS查询的各种随机选择的域名。$subdomainLength变量决定了每个子域名的所需长度。
|
|
要拦截通过DNS外传功能发送的凭证,在Kali中执行dns_server.py脚本。按Ctrl + c终止DNS服务器,它将重建拦截的明文凭证。
CredPhish内置的另一种外传方法是HTTP请求。它利用Windows Defender中包含的二进制文件“ConfigSecurityPolicy.exe”将凭证传递到攻击者服务器。将$enableHttpExfil变量设置为$true以启用它。
|
|
要拦截通过ConfigSecurityPolicy.exe发送的凭证,在Kali中启动一个简单的HTTP服务器,在日志中捕获它们。
在网络上,外传的凭证将如下所示。
|
|
由于凭证在传输前进行了URL编码,使用Burp的Decoder模块观察数据或使用Python的urllib库通过命令行进行URL解码。
|
|
CredPhish.ps1执行
要快速测试CredPhish,将credphish.ps1移动到目标Windows 10机器并使用PowerShell执行。
一种持久化执行方法可能涉及任务计划程序(Task Scheduler),这是Windows的一个组件,能够在预定间隔调度脚本执行。以下schtasks示例将每2分钟执行一次credphish.ps1。
|
|
缓解与检测
CredPhish源自Invoke-LoginPrompt、CredsLeaker和Stitch等项目,并非密码钓鱼的万能解决方案。由于这类攻击通常非常有针对性且用户特定,总有改进空间。更激进的方法可能涉及使用Cobalt Strike伪造整个Windows 10锁屏并通过这种方式捕获凭证。
这类攻击技术滥用系统功能,不易通过预防性控制缓解。MITRE ATT&CK框架建议:
- 开展用户培训,提高对潜在恶意事件和对话框(如Office文档提示输入凭证)的意识和怀疑。
- 监控进程执行,查找异常程序和恶意的“命令和脚本解释器”实例,这些实例会提示用户输入凭证。
- 检查并仔细审查输入提示的非法指标,如非传统横幅、文本、时间和/或来源。