利用COM接口Bypass Uac

一、程序与COM注册表

 

CLSID是指Windows系统对于不同的应用程序,文件类型,OLE对象,特殊文件夹以及各种系统组件分配的一个唯一表示它的ID代码,用于对其身份的标识和与其他对象进行区分。位置在注册表的HKEY_CLASSES_ROOT\CLSID,这里存放了Windows系统组件对应的CLSID,选中某个CLSID,在右侧窗格中的“默认”值显示的“数据”即为该CLSID对应的系统组件名称,例如{26EE0668-A00A-44D7-9371-BEB064C98683}就是“控制面板”的CLSID。

 

 二、COM为什么能Bypass Uac

COM提升名称(COM Elevation Moniker)技术允许运行在用户账户控制下的应用程序用提升权限的方法来激活COM类,以提升COM接口权限。同时,ICMLuaUtil接口提供了ShellExec方法来执行命令,创建指定进程。因此,我们可以利用COM提升名称来对ICMLuaUtil接口提权,之后通过接口调用ShellExec方法来创建指定进程,实现BypassUAC

 

三、COM bypass Uac

利用可以Auto Approval的COM组件BypassUAC需要满足以下两个条件:

1.elevation属性开启,且开启Auto Approval(需要利用这个特点绕过UAC)

2.COM组件中的接口存在可以命令执行的地方(用来执行我们自己的命令)

uacme项目中就有使用CMSTPLUA组件的ICMLuaUtil接口,可以使用https://github.com/tyranid/oleviewdotnet对其分析,注意以管理权限去运行Registry -> CLSIDs

在CLSID上右键 -> properties -> Elevation 可以看到该接口Enabled:True&Auto Approval:True

 

 

然后使用IDA加载c:\windows\system32\cmlua.dll程序,坑点需要加载pdb否则看不到相关函数使用如下工具进行pdb

https://github.com/rajkumar-rangaraj/PDB-Downloader/releases/download/v1.0/PDBDownloader.exe

在左侧函数列表中搜索destructor或者constructor,双击后跳转后,可以看到调用vftable的地方

  

双击跳转到变量定义位置,就可以找到虚函数表,这里是通过shellexec windows api进行调用执行命令满足第二条件,还需要得知标识COM组件的GUID,即CLSID

标识interface的GUID,即IID

 

如何使用ICMLuaUtil.ShellExec来执行命令这里已经有人实现好了

https://github.com/cnsimo/BypassUAC/tree/master/BypassUAC

如果执行COM提升名称代码的程序身份是不可信的,还是会触发UAC弹窗;若是可信程序,则不会触发UAC弹窗。因此,必须使这段代码在Windows可信程序中运行

所以需要伪装进程PEB进行绕过,通过修改PEB结构,让系统误认为这是一个可信进程,伪装的可信进程可以是rundll32.exe、explorer.exe等等。

如何快速寻找可以利用的com接口,可以使用UACME项目中的Yuubari,UacInfo64.exe可以把系统上所有支持auto-elevate的都找出来。

 

 

 

 

 

参考链接:

https://cloud.tencent.com/developer/article/1623517

https://www.anquanke.com/post/id/216808

https://mp.weixin.qq.com/s/-RHR78f93pOWIJcVyouCgA

https://www.cnblogs.com/ndyxb/p/12770289.html

 

posted @ 2021-02-03 15:21  aoaoaoao  阅读(947)  评论(0编辑  收藏  举报