利用 AicLaunchAdminProcess 参数污染 bypass UAC

蓮花仙者
发布: 2025-10-02 09:58:29
原创
190人浏览过

在研究 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

PatentPal专利申请写作
PatentPal专利申请写作

AI软件来为专利申请自动生成内容

PatentPal专利申请写作 13
查看详情 PatentPal专利申请写作

这可以解释为什么有些 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。

以上就是利用 AicLaunchAdminProcess 参数污染 bypass UAC的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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