使用LsaManageSidNameMapping为SID添加名称映射
在研究服务SID如何映射回名称时,我发现了API LsaLookupManageSidNameMapping。毫不意外,这个API在MSDN或Windows SDK中都没有正式文档。不过,LsaManageSidNameMapping 倒是有文档(大部分)。经过一番挖掘,发现它们最终都指向LSASS中的同一个RPC函数,只是名称不同:
LsaLookupManageSidNameMapping→ lsass!LsaLookuprManageCacheLsaManageSidNameMapping→ lsasrv!LsarManageSidNameMapping
它们最终都会调用 lsasrv!LsarManageSidNameMapping。我不清楚为什么会有两个版本,以及为什么一个有文档而另一个没有。耸肩。当然,尽管MSDN上有这个函数的条目,但在Ntsecapi.h头文件中似乎并没有实际文档。再次耸肩。我找到的最好的文档是这个头文件。
这让我思考是否可以通过LSASS映射所有AppContainer命名功能,这样普通应用程序就可以解析它们,而不必我自己处理。这比修改SAM或类似的技巧要容易。遗憾的是,虽然你可以添加一些SID到名称的映射,但这个API不允许你为功能SID这样做,因为有以下的调用限制:
- 调用者需要SeTcbPrivilege(这对于LSA API是给定的)。
- 要映射的SID必须在NT安全机构(5)中,且域的第一个RID必须在80到111之间(包含)。
- 你必须先注册一个域SID的名称,才能使用包含它的SID。
基本上,第二点阻止了我们为功能添加子域SID,因为它们使用包安全机构(15),而且我们不能直接添加SID到名称,因为需要先用API注册域,仅域存在是不够的。也许有其他简单的方法,但这不是。
相反,我刚刚整理了一个.NET工具来添加或删除你自己的SID到名称映射。它已经在github上。映射是临时的,所以如果你搞砸了什么,重启应该就能修复。:-)
发布者: tiraniddo
时间: 16:23