利用Com组件绕过UAC

2021-11-19 13:24:38 浏览数 (1)

Com组件绕过UAC是一个很古老的话题了,这边以UACMe项目中索引为41的方法为例,看一下如何使用Com组件绕过UAC。

其中UACMe的41号概述为:

代码语言:javascript复制
Author: Oddvar Moe
Type: Elevated COM interface
Method: ICMLuaUtil
Target(s): Attacker defined
Component(s): Attacker defined
Implementation: ucmCMLuaUtilShellExecMethod
Works from: Windows 7 (7600)
Fixed in: unfixed 
How: -

该方法的目标接口是ICMLuaUti,首先我们要知道的是,什么样的接口可以被用来做UAC绕过,简单来说有两个要求:

  1. elevation属性启用,且开启Auto Approval;
  2. COM组件中的接口存在可以命令执行的地方,例如ICMLuaUtil的ShellExec;

而这两个条件我们一般都可以使用OleViewDotNet和IDA来进行查看。首先直接用OleViewDotNet搜索你想要搜索的com组件的名字

查看属性可以看到条件1皆为true,表示这个组件可以用来绕过UAC认证

当鼠标悬停到时可以看到其调用的dll。

然后我们使用IDA打开这个dll,可以在函数列表中看到ShellExec字样的函数

其中调用了ShellExecuteExW来进行命令执行

其函数原型如下:

代码语言:javascript复制
BOOL ShellExecuteExW(
  [in, out] SHELLEXECUTEINFOW *pExecInfo
);

该有的都有了,下面就是写代码了,这里直接选择https://github.com/0xlane/BypassUAC该项目进行开发节约时间。

但是在执行时还是触发了UAC。

这是因为:如果执行COM提升名称代码的程序身份是不可信的,还是会触发UAC弹窗;若是可信程序,则不会触发UAC弹窗。因此,必须使这段代码在WIndows可信程序中运行。可信程序有计算器、记事本、资源管理器、rundll32.exe等。但本质还是校验的PEB,把CommandLine和imagepath修改为指定进程的即可。

其代码中也有相关实现。

再次执行,即可不弹框获取shell

但由于ShellExecuteExW的问题,无法获取命令输出,我们可以借助文件重定向命令结果来实现,

即可得到一个命令交互的程序。

请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!

0 人点赞