在研究 uacme 开源项目时,我对其中的第三十八种和第五十二种方法产生了浓厚的兴趣。这两种方法都属于白名单组件绕过方法,下面我将详细介绍这两者的实现原理和过程。
第三十八种方法利用 mmc.exe 执行自定义的 msc 文件,从而在本地或远程执行任意代码(仅适用于 64 位系统)。在成功运行后,使用 Process Explorer 观察启动的 mmc.exe 进程。

命令行如下:
mmc.exe "C:\Users\X-ENCO~1\AppData\Local\Temp\kmkze.msc",C:\Windows\System32\cmd.exe /c calc.exe
这个命令行非常特殊,如果在 CMD 中输入相同的参数,首先会弹出 UAC 验证框,然后报错。

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

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

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

x64dbg 中 ExceptionCode 的值:

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

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

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

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

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

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

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

本质上是对 CCommandLineInfo 类进行了一层封装,不会对逗号进行特殊处理,最终会导致 mmc.exe 将 "C:\Users\X-ENCO~1\AppData\Local\Temp\kmkze.msc" 作为打开的目标,从而实现了 UAC 的完美绕过。
实际上就是利用 RPC 服务端和客户端对命令行解析逻辑不一致进行 UAC 绕过的。
第五十二种方法的相关文章在网上可以找到,我简单介绍一下大致流程。还是在 Appinfo.dll 中,对可信文件进行检查时可以被利用。
检查逻辑大体上有三点:
满足第一点和第二点的可执行文件有很多,比如上面列的白名单,重点在第三点上。
先通过符号链接创建 C:\Windows \System32 目录(windows 后有个空格),将白名单中的任意一个 exe 复制到该目录中。appinfo 判断是否为可信目录时调用了 GetLongPathNameW。该函数在对字符串进行处理时会去掉 windows 后面的空格,从而导致了可信目录的验证通过。

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

UAC 绕过常见的方法就是 DLL 劫持,而劫持的前提是要把伪造的 DLL 放到可信的目录下面,如果直接 Copyfile 会触发 UAC,常用的方法如下:
以上就是利用 AicLaunchAdminProcess 参数污染 bypass UAC的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号