探索黑客技术攻防,实战研究与安全创新

导航菜单

Windows7默认环境绕过UAC

在Win7默认配置环境下,UAC处于第二级,如图1所示,在此级别下,用户对一个程序点击鼠标右键“以管理员身份运行”,是会触发UAC拦截弹窗的,也就是需要经过用户的确认才能以完整特权的管理员权限运行。

A11.png


不过,我们用过一段时间后就会发现,用户打开一些操作系统自身的程序时,也是完整特权的,但它们启动的时候并没有触发UAC弹窗!最典型的就是任务管理器taskmgr.exe,我们即使对任务管理器的taskmgr.exe文件点击鼠标右键“以管理员身份运行”也不会触发UAC弹窗。

由此得到启发:有没有一个特殊的不会UAC弹窗的系统程序在启动的时候是我们可以利用的(比如通过类似dll劫持之类的方式,让我们有机会控制它的运行)?顺着这个我们还要问:系统中到底有多少个特殊程序在用户双击运行它们后是完整特权,而且不会触发UAC弹窗的?

操作系统中有成百上千个可执行程序,难道我们要一个个右键点过去?

点击鼠标右键“以管理员身份运行”运行一个程序,是通过类似下面的代码实现的:ShellExecute(hwnd,"runas","C:\\Windows\\Notepad.exe",0,0,SW_SHOWNORMAL);

它和普通的ShellExecute执行程序不同的地方在于第二个参数“runas”,在Vista及以后的系统中它能触发UAC弹窗(如果不是特殊程序的话)。

OK,搞清楚了这一点,那么我们要找出有多少个不会触发UAC弹窗的特殊程序就easy了:编写一个遍历C盘的测试程序,然后对每个可执行文件调用上述传runas参数的ShellExecute函数,根据ShellExecute函数的返回值判断是否是特殊程序。

原理已经明了,这里省略具体代码实现了,我们直奔下面主题。

经测试,Win7下输出了一堆不会触发UAC弹窗的特殊程序。一眼扫过去,在一堆输出结果中有一个程序让人眼前一亮:C:\Windows\system32\InfDefaultInstall.exe,根据文件名猜想:这是一个inf安装程序。我们知道,inf一般都是用于驱动程序安装的,inf文件中可以编辑很多“指令”,是可以做很多事情的,比如操作注册表、服务、文件等。

接下来,我们随便找个驱动的inf文件,通过鼠标右键点击inf文件的“安装”来验证我们的猜想,看看inf文件安装时是否会调用这个InfDefaultInstall.exe,如果会又是以何种调用法实现。

通过SysInternals工具箱中的ProcessMonitor程序,我们完成整个inf文件安装过程的监控分析,验证了之前的猜想,概括出来就是:InfDefaultInstall.exe会以完整特权运行,并且接收一个inf文件路径参数,执行inf文件里头的“指令”。

这就好办了!我们可以自拟一个inf文件,里面写上实现自己意图的指令,比如加载一个我们的dll,在dll里执行指定程序,就可以搭上InfDefaultInstall.exe的便车,自动以完整特权运行,绕过UAC的弹窗拦截。OK,整理下思路:

1.制作一个inf,如BypassUAC.inf,里面有注册指定dll的指令;

2.制作一个dll,如BypassUAC.dll,在dllmain中单纯执行一个其他程序,如cmd.exe,然后强制退出进程;

3.制作一个exe,如BypassUAC.exe:用runas参数的ShellExecute运行InfDefaultInstall.exe,并且给InfDefaultInstall.exe附带BypassUAC.inf文件路径参数。

4.双击BypassUAC.exe触发。BypassUAC.exe关键代码如图2所示。

A12.png

BypassUAC.inf文件内容如图3所示。

A13.png

BypassUAC.dll关键代码如图4所示。

A14.png

是实测效果,右上的cmd是默认双击打开的无完整特权的,左下是双击BypassUAC.exe后弹出的不触发UAC弹窗的具有完整特权的cmd。

测试环境:

操作系统:Windows7UltimateSP1x64,全新安装+全补丁当前用户:test,隶属于administrators组UAC:默认级别

A15.png