详解Bypass UAC 过程当中踩过的坑(第二局部) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

详解Bypass UAC 过程当中踩过的坑(第二局部)

在第1局部完成后,我们晓得普通用户在拆分令牌治理登录中处置惩罚可以或许取得对晋级历程的Terminate,QueryLimitedInformation 和  Synchronize历程接见权限的接见。这是由于一般的用户和***具有默许DACL,该默许DACL授与对统一桌面上统统令牌设置的以后登录会话的实行接见权限。我们接下来的题目是怎样能力提拔你的权限?

在我们具有的3个接见权限中, Terminate 和 Synchronize 都不是那末风趣。固然,你完整可以或许依照你本身的设法主意来。而在我看来QueryLimitedInformation能够会供应更多风趣的内容,好比我们可以或许取得哪些接见权限?这里会有一个疾速跳转,跳转到MSDN是递次的。以下是历程平安性和接见权限页面:

PROCESS_QUERY_INFORMATION (0x0400)
Required to retrieve certain information about a process, such as its token, exit code, and priority class (see OpenProcessToken).

PROCESS_QUERY_LIMITED_INFORMATION (0x1000)
Required to retrieve certain information about a process (seeGetExitCodeProcess, GetPriorityClass, IsProcessInJob,QueryFullProcessImageName). A handle that has the PROCESS_QUERY_INFORMATIONaccess right is automatically granted PROCESS_QUERY_LIMITED_INFORMATION.
Windows Server 2003 and Windows XP:  This access right is not supported.

这最少证实了第一局部的一点,若是你有QueryInformation接见,你也会主动取得QueryLimitedInformation。以是  QueryLimitedInformation 只是给你一个可以或许从完整的QueryInformation接见的一个子集。看起来这些文件可以或许接见的统统器械都很无聊,但  QueryInformation凸显了一些器械,异常风趣的器械——历程令牌。这里我们可以或许细致搜检一下,我们来看看OpenProcessToken的文档,看看有关所需接见的内容。

接见令牌翻开历程,该历程必需具有PROCESS_QUERY_INFORMATION接见权限。那末不如就密封它,甚么都没有看到,继承向前?等等,永久不要相信你读的任何器械。或许这真的是“捏造文档”呢(固然若是你在2020年从核辐射避难所那边读到这个,那末你就真的可以或许疏忽它)。为何我们不实验一下看看(请确保您之前晋级的正本MMC.EXE仍在运转):

Use-NtObject($ps = Get-NtProcess -Name mmc.exe) {
    Get-NtToken -Primary -Process $ps[0]
} | Format-List -Property User, TokenType, GrantedAccess, IntegrityLevel

然后我们替换掉以后能够会看到一条毛病音讯:

User : domain\user 
TokenType : Primary 
GrantedAccess : AssignPrimary, Duplicate, Impersonate, Query, 
QuerySource, ReadControl 
IntegrityLevel : High

这表明我们曾经翻开了历程’主令牌,被授与了很多权限,并确保我们打印了IntegrityLevel属性来证实它是一个真正的特权令牌(或多或少的缘由将会变得清晰)。

这是怎样回事? 实在是由于文档是毛病的,你不须要QueryInformation来翻开历程令牌QueryLimitedInformation。 若是你不相信我,你可以或许在内核中反汇编NtOpenProcessTokenEx:

———————————————-

申博|网络安全巴士站【www.bus123.net】

申博|网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。。

———————————————-

NTSTATUS NtOpenProcessTokenEx(HANDLE ProcessHandle, ACCESS_MASK DesiredAccess, DWORD HandleAttributes, PHANDLE TokenHandle) { EPROCESS* ProcessObject; NTSTATUS status = ObReferenceObjectByHandle( ProcessHandle, PROCESS_QUERY_LIMITED_INFORMATION, PsProcessType, &ProcessObject, NULL); ... }

回到Vista,你会发明一直是如许的状况,只要 QueryLimitedInformation是须要的,与文档相反。固然您依然须要经由历程它的DACL接见令牌,但事实证实,令牌工具还运用默许DACL,因而它授与读取和实行对登录会话SID的接见权限。但令牌不是与历程有相反的强制性政策吗?好吧,我们来看看,我们可以或许修正第1局部的IL Policy转储剧本来运用令牌工具

# Get current primary token's mandatory label $sacl = $(Get-NtToken -Primary).SecurityDescriptor.Sacl Write-Host "Policy is $([NtApiDotNet.MandatoryLabelPolicy]$sacl[0].Mask)"

效果是:“ Policy is NoWriteUp ”。以是当我们没法修正令牌(我们不克不及由于默许DACL而没法完成),我们最少可以或许读取它。但如许看来,这好像并非迥殊风趣,读取接见有甚么用?如前所述,Read会给你一些风趣的权益,AssignPrimary,Duplicate和Impersonate。如今阻挠你建立一个新的历程,照样冒充令牌吗?为了延长建立新历程的历程,我试图经由历程内核函数SeIsTokenAssignableToProcess(和缺乏SeAssignPrimaryTokenPrivilege)的限定,和模仿时接纳分歧的方法来挪用SeTokenCanImpersonate,但效果却依然是不能够的。如图所示:

详解Bypass UAC 过程当中踩过的坑(第二局部) 详解Bypass UAC 过程当中踩过的坑(第二局部)

该图是用于肯定历程是不是可以或许模仿另一个令牌的大略流程图(假定您没有我们没有的谁人SeImpersonatePrivilege)。我们可以或许知足每个规范,除有一个——内核搜检以后历程的IL是不是大于或即是被模仿的令牌。若是历程IL小于令牌的IL,则模仿令牌将被删除到标识级别,从而阻挠我们运用它来提拔我们的权限。固然我们不克不及增添令牌的IL,但我们可以或许增加它,以是我们须要做的是将令牌IL设置为与模仿之前的历程“IL”相反,理论上我们应当成为中型IL***。 在我们如许做之前,须要处置惩罚一个小题目,设置IL是一个写操纵,而且我们没有对令牌的写接见权限。

然则,事实证实,由于我们有Duplicate,我们可以或许挪用DuplicateToken来克隆全部令牌。我们须要失掉一个冒充令牌,须要反复,以是这不是主要的题目。主要的事实是失掉的反复的令牌而且给我们读取,写入和实行对令牌工具的接见。由于Token工具的Mandatory Label被设置为挪用者的IL(它是Medium),而不是令牌内的IL。这致使内核可以或许授与我们对新令牌工具的完整接见,这一点令我觉得疑心。请注意,这不是给我们写入接见原始令牌,只是一个正本。时候的PoC || GTFO:

$token = Use-NtObject($ps = Get-NtProcess -Name mmc.exe) { Get-NtToken -Primary -Process $ps[0] -Duplicate ` -ImpersonationLevel Impersonation ` -TokenType Impersonation ` -IntegrityLevel Medium } Use-NtObject($token.Impersonate()) { [System.IO.File]::WriteAllText("C:\windows\test.txt", "Hello") }

你应当看到它建立一个文本文件C:Windowstest.txt,内容是Hello。或许,您可以或许运用New-Service cmdlet来建立一个将以LocalSystem运转的新效劳,纵然在Medium IL中运转,您依然是***。您能够会实验仅启用SeDebugPrivilege并间接迁移到体系历程,但若是您的实验发生了新鲜的事变:

# Will indicate SeDebugPrivilege is disabled $token.GetPrivilege("SeDebugPrivilege").Enabled # Try enabling the privilege. $token.SetPrivilege("SeDebugPrivilege", $true) # Check again, will still be disabled. $token.GetPrivilege("SeDebugPrivilege").Enabled

 您会发明,不管您怎样实验SeDebugPrivilege(和SeBackupPrivilege,SeRestorePrivilege等)它的功用都没法启用。这是UAC设计师挑选的另一个平安措施,实际上并没有甚么区别。若是令牌的IL小于High,则没法启用一小组GOD权限。然则,您依然可以或许启用像SeMountVolumePrivilege(能够会有一些兴趣)或  SeCreateSymbolicLinkPrivilege的器械。 我们稍后会回到这个行动,由于它是主要的。最主要的是,此行动不会主动禁用Administrators组,这意味着我们依然可以或许作为特权用户停止模仿。 只要在Windows Vista,7,8或8.1上运转示例,它就会事情的异常好。然则在Windows 10上,您将收到以下毛病:

Use-NtObject : Exception calling "WriteAllText" with "2" argument(s): "Either a required impersonation level was not provided, or the provided impersonation level is invalid.

此毛病音讯意味着,  SeTokenCanImpersonate  搜检搜检失利和模仿令牌失掉规复到一个辨认符号。很显然,微软晓得我们做的统统。以是这就是为何会有第三局部的缘由,让它在Windows 10上事情,并绕过新的平安检测。 

本文翻译自:https://tyranidslair.blogspot.ru/2017/05/reading-your-way-around-uac-part-2.html,如若转载,请说明来源于嘶吼: http://www.4hou.com/info/news/5347.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明详解Bypass UAC 过程当中踩过的坑(第二局部)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址