提权-windows绕过UAC提权
绕过UAC提权
UAC概述
UAC(User Account Control),中文翻译为用户帐户控制,是微软在Windows Vista和Windows7中 引用的新技术,主要功能是进行一些会影响系统安全的操作时,会自动触发UAC,用户确认后才能执行。因为大部分的恶意软件、木马病毒、广告插件在进入计算机时都会有如:将文件复制到Windows或 Program Files等目录、安装驱动、安装ActiveX等操作,而这些操作都会触发UAC,用户都可以在UAC 提示时来禁止这些程序的运行
许可提示当用户尝试执行需要用户管理访问令牌的任务时,会显示同意提示。 下面是 UAC 同意提示的示例

凭据提示当标准用户尝试执行需要用户管理访问令牌的任务时,会显示凭据提示。 还可以要求管理员提供其凭据

UAC触发操作
UAC触发的条件如下
1 |
|
UAC有用四种设置要求
简单来说,UAC设置分四种,分为始终通知、仅在程序尝试对我的计算机进行更改时通知我、仅当程序尝试更改计算机时通知我(不降低桌面亮度)和从不通知。
输入W+R –msconfig 设置UAC
MSF和CS绕过UAC的方法
CS绕过UAC
拿到一个普通管理员的SHELL,在CS中没有*号代表有UAC
使用CS自带的插件进行绕过
成功绕过UAC
对比 :
没有提权前,是没有权限的
提权后:
MSF绕过UAC
bypassuac模块
使用该模块提权的使用,当前用户必须是管理员组中的用户,UAC为默认设置
生成一个MSF的SHELL
1 |
|
试一下getsystem发现失败
搜索bypassuac模块
1 |
|
尝试用第二个,设置参数 session然后run即可
getsystem
RUNAS模块
该模块会创建一个可执行文件,目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个system权限的shell
这个模块对用户没有要求,点击通过即可,但是会创建一个恶意文件,对该文件进行免杀即可
1 |
|
设置session然后run,目标机器会出现弹窗
点击确定即可上线
基于白名单AutoElevate绕过UAC
提权原理
利用白名单程序的本质实际上是劫持注册表,这种方法主要是通过寻找autoElevated属性为true的程序, 修改其注册表command的值,改成我们想要执行的paylaod,在该值中指明的字段会在这类程序运行时自动执行,类似于默认程序打开,当你以后运行该程序时,这个command命令都会自动执行。
UAC同样也会对系统本身的程序造成影响,微软也不希望运行系统程序也需要询问用户,因为系统程序 是安全的。因此,微软则在 UAC 中添加了白名单机制常见白名单如下
1 |
|
提权复现
我们在win7的系统下运行eventvwr.exe,使用Process Monitor监控该程序,发现 HKCU\Software\Classes\mscfile\shell\open\command 的值结果是没发现
由于这些注册表项不存在,用户可以在注册表中创建此结构,以便绕过用户账户控制 (UAC) 执行具有更 高权限的命令。
再次运行eventvwr.exe弹出计算机
也可以在命令行中执行添加操作(第二条最好添加上,不然可能不成功):
1 |
|
这虽然看起了还是普通用户,但是已经绕过了UAC可以执行命令了,接下来利用powershell控制台打开 cmd添加用户或者启用administrator,然后使用runas进行权限切换到administrator
CS演示
修改注册表
1 |
|
执行eventvwr.exe成功绕过uac
基于白名单DLL劫持绕过UAC提权
提权原理
DLL是什么
dll为动态链接库文件,又称”应用程序拓展”,是软件文件类型。在Windows中许多应用程序并不是一个 完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,放置于系统中,个人理 解类似于我们编程中引入的模块
DLL提权原理
如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这 个DLL;
如果攻击者能够控制其中的某一个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意 的DLL便会被进程所加载,从而造成代码执行。这就是所谓的DLL劫持
DLL的加载顺序如下
1 |
|
Know Dlls注册表项
从windows7之后,微软为了更进一步的防御系统的dll劫持,将一些容易被劫持的系统dll写进了一个注册表项中,那么凡是在此项目下的dll文件就会被禁止从exe自身所在目录下调用,而只能从系统目录即 system32目录下调用
1 |
|
提权环境
当前采用win7系统,找到一个白名单的程序 SystemPropertiesAdvanced.exe 位置在 C:\Windows\SysWOW64\SystemPropertiesAdvanced.exe 目录下,打开如下是windows的属性设置,通过进程监控找到加载的DLL文件进行劫持就可以提权
打开不需要uac认证
先将操作在本地执行,使用process monitor进行监控,过滤DLL和 NAME NOT FOUND ,寻找可以替换的DLL 文件,注意文件的权限是否可以在目录写入,
可以看到在C盘的tools目录的jdk文件中有一个srrstr.dll被 调用,但是没有加载,我们生成恶意的DLL文件看看是否可以被劫持
打开C语言编辑器生成DLL文件,进行弹出CMD窗口,或者打开计算器进行测试CPP文件内容如下
1 |
|
生成DLL文件并且,传到 C:\tools\jdk-11.0.11\bin\srrstr.dll 目录下,看看是否能劫持,并且绕 过UAC

提权步骤
利用CS上线进行劫持DLL提权绕过UAC认证
首先上线CS
使用CS生成shellcode,并且加载到DLL文件中,上传到目标系统中加载的代码如下
1 |
|
接下来运行白名单程序,可看待提权成功,绕过了UAC认证
CVE-2019-1388 UAC提权
漏洞描述
CVE-2019-1388 UAC提权是一个Windows证书对话框特权提升漏洞,此漏洞是因为 UAC(用户账户控制)机制的设定不严导致的。默认情况下,
Windows UAC 提示本身是由名为 consent.exe 的可执行文件生成的,该可执行文件以 NT AUTHORITY\SYSTEM 身份运行并且有 System 的完整性水平。
即UAC的弹窗就是最高权限运行的
由于用户可以与此UI 进行交互(点击是 否等),因此有必要对 UI 进行严格限制。否则,低特权用户可能能够通过UI操作提权到system权限
漏洞影响
漏洞影响的版本如下
1 |
|
漏洞原理
如果在运行一个可执行文件的时候我们触发了 UAC,在点击「显示有关此发步者的证书的信息」这个链 接之后我们可以看到证书里的 Issued by(颁发者) 字段,这个字段对应的值就是 OID值,如果这里是一个超链接就可以提权,如果不是就不行
使用HHUPD.exe
通过点击此链接会触发以 SYSTEM 权限打开浏览器,然后此浏览器就会有 SYSTEM 权限,(浏览器打开必须先要关闭UAC对话框)通过保存按钮打开CMD,CMD就会继承浏览器的 SYSTEM 权限,由此就 完成了由普通用户到 NT AUTHORITY\SYSTEM 用户的提权。

漏洞复现
查看当前的用户权限是r1cky,是一个低权限
以管理员权限打开HHUPD.EXE,点击显示详细信息里显示的显示有关此发布者的证书的信息
点击该链接之后,关闭上面这两个弹窗,会出现浏览器的页面

IE浏览器访问链接后点击页面下拉菜单面里的另存为选项
弹出位置不可用的对话框点确定
在文件名的位置输入如下的信息 C:\Windows\System32*.*
找到里面的CMD文件,右键打开,即为system权限
Windows令牌概述和令牌窃取攻击
Windows令牌
令牌(Token)是系统的临时密钥,相当于账户名和密码,用来决定是否允许这次请求和判断这次请求 是属于哪一个用户的,它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌持续存在系统中,除非系统重新启动
令牌最大的特点就是随机性,不可预测,一般黑客或软件无法猜测出来,令牌有很多种,
1 |
|
Windows 的访问令牌( AccessToken) 中包含如下内容
1 |
|
Windows 的访问令牌( AccessToken) 有两种类型
1 |
|
两种 token 只在系统重启后清除
具有 Delegation token 的用户在注销后,该 Token 将变成 Impersonation token,依旧有效
令牌窃取
incognito窃取令牌
incognito.exe是一个令牌窃取的工具,常用用法如下
1 |
|
1、当我们拿到一个权限的时候,如果是普通的用户或者有UAC认证的管理员用户,可以窃取的令牌只有自己的令牌不能用于提权
2、如果是administrator或者绕过的UAC的管理员,就可以窃取到system用户的令牌
3、使用窃取的令牌进行提权
1 |
|
MSF中的令牌窃取
1、使用MSF上线,然后加载incognito
1 |
|
2、加载incognito,进行令牌窃取,用法如下
1 |
|