trustedinstaller权限获取(获取TrustedInstaller权限的详细方法)
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

本文将带您了解TI的本质,并进一步探讨如何在powershell和NtObjectManager模块的帮助下获得TI权限,以便在操作系统中做任何您想做的事情。
如果您曾经管理过windows系统,那么您应该熟悉trustedInstaller (TI)组的概念,它需要TI特权才能对系统文件和注册表进行大多数操作。例如,您可以查看System32文件夹中文件的属性。在安全选项下,TI和file Owner可以删除和修改文件(甚至管理员也不能),因此您不能直接修改安全选项。
但是,如果您查看本地用户和组选项,您将无法找到TI用户或组。本文将带您了解TI组的本质,然后进一步学习如何在Powershell和NtObjectManager模块的帮助下获得TI组权限,以便在操作系统中做任何您想做的事情。
什么是TrustedInstaller
如果TI既不是用户也不是组,它是什么?查询ACL可以让我们了解一些情况。您可以使用Get-Acl读取文件的安全性描述,并且我们可以列出TI信息。
从上图中可以看到,在IdentityReference项中我们看到了TI组,它有一个NT SERVICE前缀。因此,它是一个Windows服务SID,这是Vista中添加的一个功能,允许在操作系统上运行的每个服务都有一个检查权限的组。通过这种机制,操作系统不必承担添加单独的实际组的额外开销。
SID本身是服务名称的大写SHA1值,下面的代码计算真实的SID值:
123456789$name='TrustedInstaller'#计算服务SID$bytes=[Text.Encoding]:Unicode.GetBytes($name. toupper ())$sha1=[System.Security.Cryptography.SHA1]:Create()$hash=$sha1. computehash ($bytes)$rid=New-Object UInt32[] 5[Buffer]:BlockCopy($hash, 0, $rid, 0, $hash。长度)[string]:格式(' S - 1-5-80 -- -- -- -- --, ' $rids [0], $rids [1], $rids [2], $rids [3], $rids[4]),当然,你不需要实现这个方法,NTDLL有一个RtlCreateServiceSid方法来做这个,而LSASS也转换服务名称为sid。也就是说,当系统资源发生变化时,必须运行一个名为TrustedInstall的系统服务。我们也可以使用SC模块找到这一点。
如果我们打开TI服务并查看访问令牌,我们可以看到TI组已启用。
以上就是背景知识。如果您是管理员,如何利用TrustedInstaller?
成为TrustedInstaller
如果您搜索如何删除由TI拥有的资源,您通常会得到这样的结果:它告诉您首先获得文件或密钥的所有权,然后更改DACL以添加管理组。这是因为即使是与IFileOperation UAC COM兼容的组件通常也不会自动运行,并且会弹出以下对话框:
更改系统文件的权限不是一个好主意,因为如果您做错了,您可能会将您的操作系统暴露给EOP,特别是对于目录。资源管理器可以轻松地将所有子文件和文件夹的安全属性更改为初始值。当然,TI会阻止您这样做,但是总是有人出于某种目的想要这样做。
您可能会想,我可以将当前用户添加到TI组。不幸的是,像NetLocalGroupAddMembers这样的LSASS api不使用sid,并且更改NT SERVICE\TrustedInstaller的注册表值也是无效的。因为它根本不是一个真正的组,所以它是使用其他方法创建的。也许您可以通过说一个魔咒,或者至少使用低级RPC调用来做到这一点,但我认为不值得这样做。
因此,修改TI服务设置的最快方法是通过更改设置来运行额外的二进制文件。奇怪的是,TI服务使随意修改系统上的文件变得困难,但它不保护自己,并且可以通过普通管理员的权限进行修改。因此,可以使用以下命令删除任何文件
1sc config TrustedInstaller binPath='cmd.exe /C del path\to\file'启动TI服务,文件就不见了。这个命令起作用的另一个原因是TI不是一个受保护的进程灯(PPL),这也是一个奇怪的事情,因为TI组被赋予了删除和停止PPL服务的权利。我向MSRC指出了这一点(亚历克斯隆内斯库在2013年也指出了这一点),但微软没有采取任何措施来解决这个问题。微软似乎也不认为PPL是一个安全的前沿。
完成后,您必须将TI服务恢复到原始状态,否则Windows Update等服务将无法正常工作。由于TI服务有一个令牌,我们可以借用这个令牌来创建一个新流程吗?
作为管理员,我们可以调用SeDebugPrivilege函数来打开TI进程及其令牌。然后我们可以做任何事情。试试吧:
这很简单,所以是时候尝试一些其他的TI操作了。
看起来我们不能使用这个令牌创建或模拟进程,这不是很好。我们可以从上图底部看出原因。我们只有TOKEN_QUERY权限,但是我们至少需要TOKEN_DUPLICATE权限来获得创建新进程所需的令牌。检查令牌的安全性描述,并使用Process Hacker查看为什么我们的访问权限如此之低(我们甚至没有READ_CONTROL)。
如您所见,管理员组只有TOKEN_QUERY权限。这与我们通过令牌获得的访问权限一致。您可能想知道为什么SeDebugPrivilege没有生效,因为调试特权只绕过对进程和线程对象的安全检查,并且它对令牌没有做任何事情,因为我们无法获得它的帮助。这可能看起来很麻烦,但是除了野蛮地更改服务二进制文件之外,没有其他方法可以做到这一点吗?
当然不是。有一些例子可以说明我们如何让像TI这样的服务发挥作用。通常,您可以安装一个服务来运行代码,窃取TI令牌,然后创建一个新进程。很容易理解,如果我想创建一个服务,我只需要修改Trusted Installer服务。
因此,有两种非常简单的方法可以绕过此权限限制,而不需要任何新的或修改的或代码注入的服务。让我们从创建新流程的问题开始。进程的父进程调用CreateProcess来提升子进程的特权,这对UAC来说似乎很奇怪。为了支持微软在Vista中引入的最小特权原则,在创建新进程时显式指定父进程,以便增强的特权仍然是调用者的子进程。
通常在启用UAC的情况下,您可以显示指定子新进程的令牌。但是,如果没有指定令牌,则新进程将从父进程继承令牌。因此,我们这样做的唯一要求是获得父进程句柄的PROCESS_CREATE_PROCESS权限。因为我们已经拥有了SeDebugPrivilege特权,所以我们可以获得TI进程的全部特权,包括创建它的子进程的特权。这样做的额外好处是,在内核中创建进程的代码甚至可以直接将正确的会话ID分配给调用者,以便可以创建交互式进程。我们利用这个特性,使用TI服务的令牌通过New-Win32Process在当前桌面上创建任何进程,并通过-ParentProcess参数传递进程对象。
在不创建新进程的情况下模拟令牌也很有用。有办法做到吗?是的。我们可以使用NtImpersonateThread API,它允许从现有线程捕获上下文并应用于另一个线程。模拟上下文工作的过程是,内核首先尝试捕获线程的令牌,如果线程没有令牌,那么内核通过模拟复制与线程关联的进程的令牌。NtImpersonateThread API的美妙之处在于,设置父进程不需要访问令牌的权限,它只需要THREAD_DIRECT_IMPERSONATION来模拟线程,我们可以只使用SeDebugPrivilege来做到这一点。因此,您可以通过以下步骤获得一个不生成新进程的模拟线程:
至少以PROCESS_QUERY_INFORMATION的权限打开一个进程,并枚举其线程
使用THREAD_DIRECT_IMPERSONATION权限打开进程中的第一个线程
调用NtImpersonate线程获取模拟令牌
现在,只要其他线程没有设置主线程的模拟令牌(并且您没有对分离线程执行任何操作),那么PowerShell控制台就具有TI组状态。
总结
希望本文能让您深入了解TrustedInstaller是什么,以及如何作为管理员获得TI组令牌,这在正常情况下是不可能的。这种方法适用于现代Windows操作系统上的不同系统服务,如果您希望与它们的资源进行交互以进行测试,例如使用沙箱工具访问它们拥有的资源,则可以在本文中使用这种方法。
本文主要介绍了关于trustedinstaller权限获取(获取TrustedInstaller权限的详细方法)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/1464391.html