Windows 中,权限指的是不同账户对文件,文件夹,注册表等的访问能力。为不同的账户设置权限很重要,可以防止重要文件被其他人所修改,使系统崩溃。
权限大概分为三种,分别是:
system:在 Windows 中拥有比管理员更大的权限,在 Windows 中主要作为系统服务或进程的运行账户,保证系统服务的正常运行;
administrator: 管理员权限。每台电脑装上系统后,除用户新建的个人账户外,会自动新建 administrator 的管理计算机 (域) 的内置账户,拥有计算机管理的最高权限;
user: 隶属于 users 组,用户可以运行经过验证的应用程序,users 组是最安全的组,分配给该组的默认权限不允许成员修改操作系统的设置或用户资料;users 可以创建本地组,但只能修改自己创建的本地组。users 可以关闭工作站,但不能关闭服务器。admin,system 包含所有 user 的权限。
一个进程运行之后启动的子进程,会继承当前进程的 UAC 权限。
不同场景下,程序运行会有降权、提权运行的需要。
使用管理员权限和非管理员权限运行的程序之间不能使用 Windows 提供的通信机制进行通信。对于部分文件夹(ProgramData),管理员权限创建的文件是不能以非管理员权限修改和删除的。
因为权限可以继承,当高权运行一个程序时,打开外链或外部应用同样具有高权,如果被黑客等恶意利用,就能获取用户的所有账户信息,对注册表、文件夹等进行篡改,造成安全漏洞,所以必须进行降权处理,低权运行。
常见的降权方式是使用 explore 打开应用程序或文件。
Explorer.exe 进程用于管理 Windows 的图形界面,包括开始菜单、任务栏、桌面和文件管理,如果结束这个该程序会导致 Windows 图形界面无法使用。
Explore 本身无管理员权限,如果 explorer 有管理员权限,因为权限可继承,那么它创建的进程都有管理员权限,存在安全问题。
Explore 可以打开文件或运行可执行程序。在命令行中输入 explorer xxxx\test.txt 即可打开 test.txt 文件。
不过,此时是间接使用文件资源管理器打开的文件,效果和直接在文件资源管理器中双击打开这个文件是一样的。
实际上利用文件资源管理器启动 exe 程序和前面的打开文件是同一种命令,还有一种特别的作用:可以降权执行
explorer D:\Services\blog.walterlv.com\Walterlv.Blog.Home.exe
如果当前进程是管理员权限,那么可以通过 explorer 间接启动,将新启动的进程降低到与 explorer 同级别的权限。
不过,有几点需要注意的:
1.如果用来降权,那么只会降到与文件资源管理器同级别的权限
2.而文件资源管理器是什么权限,在 Windows 7 上和 Windows 8、 wInows10 上有所不同
Windows 8/8.1/10 无论开关 UAC 都是普通用户权限,除非特别使用以管理员权限启动文件资源管理器
Windows 7 在开启 UAC 的情况下,文件资源管理器是以普通用户权限运行的
Windows 7 在关闭 UAC 的情况下,文件资源管理器是以管理员权限运行的
3.不允许给间接启动的程序携带命令行参数
如果传入额外的参数,那么最终不会执行这个程序,只会打开一个和程序毫无关系的文件管理器的新窗口。
常见的应用程序大多以低权运行,当程序需要升级或其他需要操作注册表,需要读写权限时,就需要提升权限。
常见的提权方式就是弹出 UAC 窗口,由用户确认。
在 windows vista 之后 windows 操作系统引入了 UAC 机制,即 User Account Control,用户账户控制。UAC 机制使得即便是管理员账户在系统上创建进程的时候,分配给进程的权限也是一个较低权限的令牌,而不是管理员权限令牌。
在程序需要管理员权限运行时,会弹出 UAC 提示框,需要管理员账户点击是之后,程序才能以管理员的权限运行,也就是提权。
1.通过指定系统 API ShellExecuteEx 的一个参数为 “runas” 来运行程序(推荐)
runas 是 Windows 系统上自带的一个命令,通过 runas 可以指定权限级别,间接启动程序,而不止是继承父进程的权限。
比如说调用 API ShellExcuteEx( )并指定 SHELLEXCUTEINFO 的 lpVerb 为 “runas”;
通过 UAC 让程序获得管理员权限(提权)
栗子:工程文件的 manifast 里面指定,A 程序要求 admin 权限才能运行
运行时 UAC 会弹出一个框,用户点击确认就可以获取管理员权限运行了。
这两个函数都可以启动 exe 文件,都可实现降权操作
但 shellExecuteEx 函数用的不多,如果要手动提升进程的权限,就要用 shellExecuteEx 函数,使用 runas 参数提权。
1.函数功能:识别文件或程序并打开
lpOperation:用于指定要进行的操作。
“open” 操作表示执行由 lpFile 参数指定的程序,或打开由 lpFile 参数指定的文件或文件夹;
“print” 操作表示打印由 lpFile 参数指定的文件;
“explore” 操作表示浏览由 lpFile 参数指定的文件夹。
当参数设为 NULL 时,表示执行默认操作 “open”。
lpFile:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
可以使用 ShellExecuteEx 打开文件或执行程序,且使用 runas 参数可实现提权。
Properties: 显示属性
Runas: 请求以管理员权限运行,比如以管理员权限运行某个 exe
应用程序在安装、运行、卸载等不同场景下可根据业务需要使用不同方式进行降权或提权。
通过学习 windows 权限的相关知识,有助于在后续的测试工作中更好的了解 windows 的安全机制,以及为学习安全测试做铺垫。