0

0

利用 AicLaunchAdminProcess 参数污染 bypass UAC

蓮花仙者

蓮花仙者

发布时间:2025-10-02 09:58:29

|

212人浏览过

|

来源于php中文网

原创

在研究 uacme 开源项目时,我对其中的第三十八种和第五十二种方法产生了浓厚的兴趣。这两种方法都属于白名单组件绕过方法,下面我将详细介绍这两者的实现原理和过程。

第三十八种方法:AicLaunchAdminProcess 参数污染

第三十八种方法利用 mmc.exe 执行自定义的 msc 文件,从而在本地或远程执行任意代码(仅适用于 64 位系统)。在成功运行后,使用 Process Explorer 观察启动的 mmc.exe 进程。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

命令行如下:

mmc.exe "C:\Users\X-ENCO~1\AppData\Local\Temp\kmkze.msc",C:\Windows\System32\cmd.exe /c calc.exe

这个命令行非常特殊,如果在 CMD 中输入相同的参数,首先会弹出 UAC 验证框,然后报错。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

通过阅读源码,发现通过 SetUnhandledExceptionFilter 函数添加 UEF 异常,并通过 CC 断点触发异常,实现 AicLaunchAdminProcess 函数的 Hook,从而在运行过程中将 AicLaunchAdminProcess 的第二个参数改为上述命令行。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

AicLaunchAdminProcess 是 UAC 验证过程中被调用的函数,位于 Win10 的 windows.storage.dll 中(无导出)。在 64 位系统下,x64dbg 无法捕获到 UEF 的异常,由于 CC 断点的存在,异常处理流程无法正常执行,导致调试时永久断在 AicLaunchAdminProcess 函数的入口。解决方法有两种:第一种是修改源码使用 AddVectoredExceptionHandler 添加 VEH 异常,该异常 x64dbg 可以捕获;第二种是重写该方法使用其他方式 Hook AicLaunchAdminProcess 函数。我选择了第一种方法。

友情附上 Windows 异常处理流程图:

利用 AicLaunchAdminProcess 参数污染 bypass UAC

修改后可以调到 VEH 的 Handler 中,但 x64dbg 接管异常后,修改了 ExceptionCode,导致 Handler 没有正确运行。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

x64dbg 中 ExceptionCode 的值:

利用 AicLaunchAdminProcess 参数污染 bypass UAC

手动 Patch 后,进入 AicLaunchAdminProcess 内部,发现该函数的主要功能是将上述命令行以 RPC 的方式发送给服务端,由服务端进行验证。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

服务端是 appinfo.dll,主要用于 UAC 权限的验证。载入 IDA,可以发现很多白名单文件,这些文件在启动过程中默认不需要弹出 UAC 框。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

mmc.exe 位列其中,且对 mmc.exe 的逻辑判断有一个单独的分支流程。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

AILOGO
AILOGO

LOGO123旗下的AI智能LOGO生成器,只需输入品牌名称就能免费在线生成公司logo设计及配套企业VI,轻松打造您的个性品牌!

下载

这可以解释为什么有些 msc 文件被打开时需要弹框,而有些不需要。白名单如下:

利用 AicLaunchAdminProcess 参数污染 bypass UAC

之后会调用 CCommandLineParser::Parse 对传过来的命令行进行解析,在对逗号(,)进行处理时会将其错误地当作命令行分隔符。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

这会导致命令行中的 wf.msc 被认为是打开的目标,从而进行后面的逻辑检验。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

而 wf.msc 正好是白名单的一员,最终导致 appinfo 服务端检验通过,不需要弹框。在客户端 mmc.exe 的 CMMCCommandLineInfo 类中,对命令行的解析逻辑如下:

利用 AicLaunchAdminProcess 参数污染 bypass UAC

本质上是对 CCommandLineInfo 类进行了一层封装,不会对逗号进行特殊处理,最终会导致 mmc.exe 将 "C:\Users\X-ENCO~1\AppData\Local\Temp\kmkze.msc" 作为打开的目标,从而实现了 UAC 的完美绕过。

实际上就是利用 RPC 服务端和客户端对命令行解析逻辑不一致进行 UAC 绕过的。

第五十二种方法:伪造可信目录

第五十二种方法的相关文章在网上可以找到,我简单介绍一下大致流程。还是在 Appinfo.dll 中,对可信文件进行检查时可以被利用。

检查逻辑大体上有三点:

  1. 清单文件中 autoElevate 为 True
  2. 有数字签名
  3. 从可信的目录下执行(C:\Windows\System32)

满足第一点和第二点的可执行文件有很多,比如上面列的白名单,重点在第三点上。

先通过符号链接创建 C:\Windows \System32 目录(windows 后有个空格),将白名单中的任意一个 exe 复制到该目录中。appinfo 判断是否为可信目录时调用了 GetLongPathNameW。该函数在对字符串进行处理时会去掉 windows 后面的空格,从而导致了可信目录的验证通过。

利用 AicLaunchAdminProcess 参数污染 bypass UAC

之后通过 DLL 劫持的方法,执行 C:\Windows \System32 目录(windows 后有个空格)下的 exe 即可绕过 UAC,整体流程如下:

利用 AicLaunchAdminProcess 参数污染 bypass UAC

彩蛋:UAC 绕过常见的方法

UAC 绕过常见的方法就是 DLL 劫持,而劫持的前提是要把伪造的 DLL 放到可信的目录下面,如果直接 Copyfile 会触发 UAC,常用的方法如下:

  1. WUSA 的 /extract 命令可以将 cab 文件释放到管理员权限的目录下。Win8 以上把该功能取消了。
  2. IFileOperation。动态 Patch PEB 通过 COM 接口实现越权复制文件。
  3. NTFS reparse point。调用 Ntfs 的 API 可以实现低权限下的文件复制。
  4. 使用漏洞,比如 CVE-2017-11783。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1428

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

606

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

546

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

539

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

156

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

76

2025.08.07

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6万人学习

Excel 教程
Excel 教程

共162课时 | 9.5万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号