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绕过,简单来说有两个要求:
- elevation属性启用,且开启Auto Approval;
- 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的问题,无法获取命令输出,我们可以借助文件重定向命令结果来实现,
即可得到一个命令交互的程序。
请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!