Windows提权笔记_1
Windows用户权限简介
- Windows系统是支持多用户的、多任务的
- Windows中设置有用户组,同个用户组的用户共享相同的权限和安全控制
- Windows下有6种用户权限:如图所示
- Windows设置有5个基本用户组
- Administrators:管理员组,对机器具有完全控制权
- Power User:高级用户组,在默认设置下,该组的权限比Administrators权限低。
- Users:普通用户组,可以执行通过验证的应用程序,但是无法修改用户资料和操作系统的设置
- Guests:来宾用户组,拥有与Users同样的权限,但是限制会多很多
- Everyone:所有人组,计算机上的所有用户都属于这个组
Window单机提权
内核漏洞提权
CVE-2018-8120
大致的原理是存在空指针解引用的危机,使得可以以内核权限执行任意代码
EXP:https://github.com/rip1s/CVE-2018-8120?tab=readme-ov-file
受影响的版本:
OS | Version |
---|---|
Windows 7 | 32bit Systems Service Pack 1 |
x64-based Systems Service Pack 1 | |
Windows Server 2008 | x64-based Systems Service Pack 2 |
Itanium-based Systems Service Pack 2 | |
32-bit Systems Service Pack 2 | |
Windows Server 2008 R2 | x64-based Systems Service Pack 1 |
Itanium-based Systems Service Pack1 |
此处以win7 x64测试:
CVE-2019-1458
工具:https://github.com/rip1s/CVE-2019-1458?tab=readme-ov-file
原理不细纠了,主要是利用版本
win7通杀
CVE-2015-1701
EXP:https://github.com/hfiref0x/CVE-2015-1701
利用版本:
-
Windows Server 2012 R2
-
Windows Server 2012
-
Windows Server 2003
-
Windows Server 2008 R2
-
Windows 7
-
Windows 8
拿win7开刀下,有几率崩溃
利用Windows错误配置提权
服务错配提权
system服务的可执行文件路径存在空格且未加引号导致提权
- 原理:
类似于这种,如果存在空格且没有引号的话,windows在路径解析时会优先考虑C:\Program.exe文件,如果能植入恶意的Program.exe文件,那么在服务重启时就可以拿到系统权限
- 收集每个服务的可执行文件路径
wmic service get name,pathname
- 利用该错配原理的msf提权操作
# 已经连上了shell, 但是需要进行提权
// 调用相应的提权模块 --> 自动寻找服务
use exploit/windows/local/trusted_service_path // 低版本下
use exploit/windows/local/unquoted_service_path // 高版本下
// 配置
set EXITFFUNC thread
set session SESSION-ID // 需要提权的session
// 提权
exploit
- 测试:前提是得有洞才能提权
计划任务错配提权
计划任务是Windows系统中用于在指定时间或时间间隔内运行指定的计算机程序、脚本或者系统命令。
如果某项计划任务由SYSTEM权限运行,但对应的执行文件、脚本存放在一个低权限用户可操作的目录中,则可能导致提权漏洞。
基础知识:
- 命令行布置计划任务
# windows8之前使用at关键字
# at time program
at 10:01 notepad.exe
# windows8以及之后的windows版本中使用
# /Create 表示创建计划任务的操作
# /TN 表示计划任务的名称
# /SC 表示计划任务的频率
# /ST 表示具体事件
# /TR 表示计划任务的动作(要执行的程序)
schtasks /Create /TN test /SC DAILY /ST 10:01 /TR notepad.exe
- 查看计划目录,在C:\Windows\System32\Tasks目录下,以xml的形式保存
- 权限配置项:
对于RunLevel标签而言,有两种值:LeastPrivilege和HighestAvailable
管理员下启动cmd,设置计划任务以最高权限运行
# 加上 /RL HIGHEST
schtasks /Create /TN test /SC DAILY /ST 10:05 /TR geek.exe /RL HIGHEST
利用:
使用Windows自带的工具icacls来得知权限
icacls exe_file
例如:F表示具有完全控制的权限
- 利用条件:计划任务设置高权限运行一个低权限目录内的可执行文件,我们可以劫持原本的文件,使得计划任务运行恶意文件进行提权
AlwaysInstallElevated提权
- 原理:
msi(Microsoft Installer)为Windows中的安装包程序,通常会作为程序的安装软件。
如果系统开启AlwaysInstallElevated
配置(MSI程序相关的组策略配置,开启后允许任意用户以SYSTEM权限允许MSI程序),则可以利用该配置进行提权
- 利用:
首先得查看是否有AlwaysInstallElevated
相关配置
可以使用后渗透工具PowerUp
或SharpUp
进行探测
SharpUp.exe audit AlwaysInstallElevated
DLL劫持
大致类型有:
-
DLL文件替换劫持
-
DLL重定向劫持
-
DLL侧加载
知识补充:
关于windows中的System32和SysWOW64目录:(首先数字不代表其存储的程序位数)
- System32:System32文件夹是位于Windows操作系统的主文件夹(通常是C:\Windows\System32)。它包含了操作系统的核心系统文件和可执行文件,这些文件是用于支持和维护操作系统的功能和服务的。在32位版本的Windows操作系统上,System32文件夹中存放的是32位的系统文件,在64位版本的操作系统上,System32文件夹存放的是64位的系统文件。
- SysWOW64:SysWOW64文件夹也位于Windows操作系统的主文件夹(通常是C:\Windows\SysWOW64)。它是Windows 64位版本中的一个特殊文件夹,用于兼容32位应用程序。SysWOW64是一个缩写,代表"Windows 32-bit on Windows 64-bit"。在64位版本的Windows操作系统上,SysWOW64文件夹中存放的是32位的系统文件,用于支持运行在64位操作系统上的32位应用程序。
- 在64位操作系统上,System32文件夹中的文件是64位的,而SysWOW64文件夹中的文件是32位的。
重点看下DLL重定向劫持:
DLL Hell(DLL地狱):早期Windows缺乏一种很有效的DLL版本控制机制,系统上安装的多个应用程序依赖于动态链接库 (DLL) 文件的特定版本,但由于存在同一 DLL 的多个版本,所需的版本被覆盖或出现冲突
- DLL重定向设置:
Windows上DLL重定向是默认关闭的
需要在注册表如下路径添加DevOverrideEnable,设置为1,表示开启
HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options
当开启该选项后,比如要调用系统DLL文件(test.dll),会在C:\Windows\Temp\test.exe.local
查找是否有test.dll
文件,如果没有则会继续到C:\Windows\SysWOW64
下进行查找
访问令牌提权
- 关于访问令牌
访问令牌是描述进程或线程的安全上下文对象,令牌信息是关于用户的标识和权限条目
- 使用msf进行访问令牌提权
在msf上线后,进行如下操作进行访问令牌提权
# 在msf会话中执行如下命令
use incognito
# 列出当前会话权限所能模拟的访问令牌
list_tokens -u
# impersonate_token加上令牌名
impersonate_token ""
# 查看当前权限
getuid
- 使用incognito进行访问令牌提权
msf对其封装,但其可作为独立程序进行使用
# 列出当前会话中所有可模拟的令牌
incognito.exe list_tokens -u
# 指定某令牌去启动cmd.exe
incognito.exe execute -c "token_name" cmd.exe
# 利用IPC$通道操作远程主机的访问令牌
# 需要知道超级管理员的密码
incogito.exe -h ip -u Administrator -p Password@123 list_tokens -u
获取TrustedInstaller权限
-
关于TrustedInstaller权限
在windows中存在部分非常敏感的系统文件,例如
C:\Windows\servicing
,如下图所示,即使是SYSTEM权限,也没办法完全控制。TrustedInstaller的权限的意义是用来防止程序及用户无意或恶意使用SYSTEM权限破坏系统重要文件
- 获取权限实操
大致思路是模拟TrustedInstaller.exe的访问令牌创建子进程,这样子进程就有了TrustedInstaller权限
安装NTObjectManager服务(需要安装到powershell的module路径下)
Save-Module -Name NtObjectManager -Path "C:\Program Files\WindowsPowerShell\Modules\""
导入模块
Set-ExecutionPolicy Unrestricted # 修改策略, 允许导入
Import-Module NtObjectManager
启动TrustedInstaller服务
sc.exe start TrustedInstaller
在windows/system32路径下修改调试权限
Set-NtTokenPrivilege SeDebugPrivilege
Get-NtProcess获取进程信息
$p=Get-NtProcess -Name TrustedInstaller.exe
以其为父进程信息,启动其子进程
$proc=New-Win32Process cmd.exe -CreationFlags NewConsole -ParentProcess $p
然后查看用户组
whoami /groups /fo list