Skip to content

NtUserFillWindow/BypassUAC-UIAccess

 
 

Repository files navigation

BypassUAC-UIAccess

这是一个代码模板,通过程序的“接力赛”完成一次绕过UAC并获取UIAccess权限的过程,支持传入参数。

Caution

本代码仅供学习与娱乐用途,造成的后果概不负责。


目录(政治三大设问角度)

是什么

这是一个可直接编译执行的代码模板。 其中,entry函数为正式入口点,拥有传入参数的功能,像wmain一样(参数为宽字符集)。 与wmain函数不同的是,它不在程序启动时执行,而是经过真正的main函数的处理再执行。

为什么

程序经过了一个紧张刺激的 接力赛 后进入entry

第一棒——绕过UAC(感谢:0xlane/BypassUAC,他的方法没有临时文件和系统限制)

首先,我们要 绕过UAC (当以管理员身份运行时,自动跳过)。 它的本质是 先将自己伪装为explorer.exe,因系统保护机制可以直接通过提升的文件复制 COM 接口,创建 moniker 并调用 CoGetObject 对象后,使用对象的ShellExec直接创建提权的进程。(其实我也不太懂) 我的代码是根据 0xlane 大佬的方法,将ShellExec中的cmd.exe直接改为程序自身,以便“接住下一棒”。 这里我还做了一些优化,将main函数的参数直接分割并传入了提权进程的命令行。

第二棒——获取 UIAccess 权限

这一步很简单,直接获取WinLogon.exe的进程令牌,这个令牌包括UIAccess权限,就像普通的System权限获取一样,只不过SetTokenInformation设置令牌的UIAccess属性,再使用CreateProcessAsUserW再次创建一个自己。此时原本没有提权时传入的参数仍然不变。(我真是天才)

最后一棒——提升所有令牌权限并正式进入entry。

我们使用遍历的方法,获取所有的TokenPrivileges,然后用LookupPrivilegeNameW使该权限开启,之后因传入的参数不变,可以直接使用并传入入口函数。

此时你完成了整个接力赛跑,程序成功进入了 entry 函数!

怎么做

事实上,你只需要双击打开这个可执行文件就行。 甚至你可以再命令行给程序传入任何的参数!(用引号括起来的字符串即使有空格也会识别为同一个参数哦。)直接拖拽文件到这个程序上也行。 在我的模板代码里,你可以像写正常的程序一样写 entry 函数中的内容。

有了 UIAccess 的加持,你的置顶窗口其实比任何窗口都高,包括置顶的任务管理器和Alt+Tab窗口转换程序。当然,你的置顶窗口也会 直接在登陆屏幕(LogonUI)顶端显示。(Microsoft 真正做到了跨账户交流)


野生坤坤没头像出品,搬运请标明来源!(发布也是!)http://www.yeskunkun.cn/

About

通过程序的“接力赛”完成一次绕过UAC并获取UIAccess权限的过程,支持传入参数和自定义

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 100.0%