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

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

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

彩蛋:UAC 绕过常见的方法
UAC 绕过常见的方法就是 DLL 劫持,而劫持的前提是要把伪造的 DLL 放到可信的目录下面,如果直接 Copyfile 会触发 UAC,常用的方法如下:
WUSA 的 /extract 命令可以将 cab 文件释放到管理员权限的目录下。Win8 以上把该功能取消了。IFileOperation。动态 Patch PEB 通过 COM 接口实现越权复制文件。NTFS reparse point。调用 Ntfs 的 API 可以实现低权限下的文件复制。使用漏洞,比如 CVE-2017-11783。
以上就是利用 AicLaunchAdminProcess 参数污染 bypass UAC的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/64326.html
微信扫一扫
支付宝扫一扫