Windows提权

一. Windows 域、权限、用户

windows域中存在的对象:

  1. 组织单元 OU:目录(用户,计算机,打印机,共享文件等组成;类似财务部)
  2. 组:用于划分权限
  3. 用户账号:主要存放用户信息
  4. 计算机信息:主要存放加入域的计算机信息

域的理解:

一个例如gok.com,就是一个安全边界。

在此域中,有域控(可能不只有一个),域控中安装了活动目录(AD服务),于是就没有了本地的概念了。活动目录有很多文件夹组成(文件夹:user,domain,computer等),记录了整个域中的信息。

组织单元 OU:就是目录的意思,活动目录(AD)中的任意一个文件夹就是一个组织单元

本地概念:例如本地用户可以登录本地计算机,但是无法登陆其他的计算机


域中PC:可以将PC分组,分为财务部,销售部,技术部等。给每一个员工分配一个用户名密码,可以登录员工所在部门的PC。

域中用户账号:给每一个员工分配一个用户名密码,可以登录员工所在部门的PC。

怎么才能变成域控呢

  1. 安装活动目录。
安装之后,会提示要建域,添加用户等

权限与用户

注意:管理员不一定都是administrator,名字可以修改,也可以将普通用户提升为管理员。

有时候,普通用户虽然不是administrator,但是可以有和管理员一样的权限

比如我的电脑上只有一个用户,这个用户也是管理员用户

发现第上有administrator用户,但是不能登录

解决方案:

  1. 管理员运行cmd,输入net user administrator /ACTIVE:YES
  2. 重启电脑

二. windows提权

使用工具:msf,PowerShell,PowerSploit

1. 内核溢出漏洞提权

程序的缓存去是事先设定好的,如果用户输入的数据超过了这个缓存区的长度,那么这个程序就会溢出了。缓存区溢出漏洞主要是由于许多软件没有对缓存区检查而造成的。

本地溢出提权首先要有服务器的一个普通用户权限,攻击者通常会向服务器上传本地溢出程序,在服务器端执行,如果系统存在漏洞,那么将溢出Administrator权限。

常用的本地溢出提权漏洞:CVE-2018-8120(最常用)、MS16-032,、MS15-051、MS14-058

在msf中最常用的是CVE-2018-8120

在Cobalt Strike中,最常用的提权模块是MS14-058

这是个提权都有对应的exe程序。均支持32位和64位系统

查看漏洞是否有补丁

手工查找补丁

systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB4131188"  #直接找是否存在cve-2018-8120对应的KB4131188补丁

利用Metasploit发现缺少补丁的漏洞

use post/windows/gather/enum_pathes    可以根据漏洞编号快速找出系统中缺少的补丁
use post/multi/recon/local_exploit_suggester   改模块用于快速识别系统中可能被利用的漏洞

Windows Exploit Suggester

该工具可以将系统中已经安装的补丁程序与微软的漏洞数据库进行比较,并可以识别可能导致权限提升的漏洞,而其只需要目标系统的信息。

#更新漏洞数据库,会生成一个xls的文件,如下 2020-11-11-mssb.xls
python windows-exploit-suggester.py --update

#查看目标主机系统信息,保存为sysinfo.txt文件
systeminfo > sysinfo.txt

#然后运行如下命令,查看该系统是否存在可利用的提权漏洞
python windows-exploit-suggester.py -d 2020-11-11-mssb.xls -i sysinfo.txt

2. 系统配置错误提权

Windows在系统启动时,会伴随着一些高权限服务启动(windows服务是以system权限运行的),倘若某些服务存在一些漏洞,呢么就能借此服务进行权限劫持,例如DLL劫持

(1)系统服务权限配置错误

window系统服务文件在操作系统启动时加载,并在后台调用可执行文件。如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,呢么就可以替换该文件,并伴随系统启动获得控制器

利用方式

  1. powershell中的PowerUp脚本
  2. msf中的攻击模块

use exploit/windows/local/service\_permissions

service\_permissions 会使用两种方式获取system权限

如果以管理员权限运行 会尝试创建并运行一个新的服务
如果当前权限不允许创建服务 会判断哪些服务的文件或文件夹的权限有问题 并对其进行劫持
在劫持服务时会创建一个可执行程序 其文件名和安装路径都是随机的

(2)注册表键AlwayslnstallElevated

允许低权限用户以system权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NTAuthority\System权限来安装恶意的MSI文件

windows install通过msiexec.exe安装MSI文件,双机MSI文件就会运行msiexec.exe

原理:是因为用户打开了windo installer 特权安装功能

在这里插入图片描述

利用方式

powerup下的Get-RegistryAlwaysInstallElevated模块检查注册表键是否被设置
如果被设置则意味MSI文件是以system权限下能运行

Metasploit的 exploit/windows/local/always\_install\_elevated 模块
该模块会创建一个文件名随机的MSI文件 并在提权后删除所有已部署的文件

(3)可信任服务路径漏洞

利用windows文件路径解析的特性,如果一个服务调用的可执行文件没有正确处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。如果一个被适当命名的可执行文件(木马)被上传到受影响的目录中,服务一旦启动,该程序就会以system权限启动

寻找有此漏洞的服务

如果有确认目标机器存在此漏洞,把我们的木马上传到目录并重命名

1. cmd命令
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """     
检测是否有对目标文件的写权限,可以用icacls工具
如果有确认目标机器存在此漏洞,把我们的木马上传到目录并重命名

重启服务
sc stop server_name
sc start server_name

2. msf模块
use exploit/windows/local/trusted_service_path模块
set AutoRunScript migrate -f
正常接收到会话后,不久就会自动断开连接,需要开启自动迁移进程

Windows提权教程

(4)自动安装配置文件

网络管理员在内网中给多台机器配置同一个环境时,通常不会逐个配置,而是使用脚本批量部署。在这个过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中一些还可能包含管理员账号和密码。

利用方式

msf模块

use post/windows/gather/enum\_unattend

(5) 计划任务

AccessChk用于在windows中进行一些高级查询、管理和故障排除工作。由于它是微软官方提供的工具,所以杀毒软件不会有告警。如果黑客对以高权限运行的任务,所在的目录具有写权限,那么就可以使用恶意程序覆盖原有的程序。这样,在计划任务下次执行的时候,就会以高权限运行恶意程序。

通过AccessChk查看指定目录的权限配置情况:从而找到可以利用的漏洞

accesschk64.exe -dqv "C:\Program Files (x86)" -accepteula
通过AccessChk查看指定目录的权限配置情况:

accesschk64.exe /accepteula 第一次运行SysInternals工具包里的工具时 会弹出一个许可协议对话框 使用accepteula参数自动接受许可协议

accesschk64.exe -uwdqsUsers C:\ 
查看某个驱动器下所有「权限配置」有问题的文件夹:

accesschk64.exe -uwdqsUsers c:\*.* 
查看某个驱动器下所有「权限配置」有问题的文件:

利用方式

1. PowerUp.ps1脚本的使用

PowerUp.ps1脚本是Privser目录下的一个脚本,功能非常强大。拥有很多用来寻找目标主机Windows服务配置错误来进行提权的模块

当我们无法通过 windows 内核漏洞进行提权的话,这个时候我们就可以利用该脚本来寻找目标主机上Windows服务配置错误来进行提权,或者利用常见的系统服务,通过其继承的系统权限来完成提权。

2. Invoke-Allchecks模块

powershell -exec bypass -c import-module .\PowerUp.ps1;Invoke-Allchecks -verbose

运行该脚本,会自动检查PowerUp.ps1下所有的模块,并在存在漏洞利用的模块下的AbuseFunction中直接给出利用方法。

3. 组策略首选项提权

如没有安装KB2962486补丁,大概率可以利用

SYSVOL 是活动目录里面一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。

SYSVOL文件夹是在安装活动目录是自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等

SYSVOL在所有 经过身份验证的域用户或者域信任用户 具有读权限的活动目录的域范围内共享。整个SYSVOL目录在所有的域控制器中是自动同步和共享的

所有的域策略均存放在 C:/Windows/SYSVOL/domian/Policies 中

在一般网络环境中,所有机器脚本都是批量化部署的,数据量很大。为了方便对所有主机管控,管理员往往会使用同一策略。例如同一修改密码,攻击者获取一台主机密码就可以知道整个域的密码。

常见的组策略首选项

映射驱动器(Drivers.xml)

创建本地用户

数据源(DataSources.xml)

打印机配置(Printers.xml)

创建、更新服务(Servers.xml)

计划任务(ScheduledTasks.xml)

组策略首选项提权分析

管理员在域中新建一个策略之后,操作系统会自动在SYSVOL共享目录中生成一个XML文件,该文件保存了该组策略更新后的密码。该密码使用AES-256加密算法。但是在2012年,微软官方公布了此算法的私钥,导致存放在xml文件中的密码的安全性大大降低。

在SYSVOL中搜索,可以找到Groups.xml文件,找到其中的cpassword字段,该字段是用AES-256加密的

Windows提权教程

利用方式

使用PowerShell获取cpassword

PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码。注意:我们只需要在域内任何一台以域用户权限登录的主机上都可以查询到。

Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword

Windows提权教程

使用msf获取cpassword

msf中 的 post/windows/gather/credentials/gpp 模块可以获取组策略中的密码。注意,我们只需要获取域内任何一台以域用户权限登录的机器的权限即可

run post/windows/gather/credentials/gpp 
show options
set session 1
run

防御措施

安装KB2962486补丁。修复的方式就是:不在将密码保存在组策略首选项中

此外,针对Everyone访问权限的设置,具体如下

设置共享文件夹SYSVOL的访问权限

将包含密码的XML文件从SYSVOL目录中删除

不要把密码放在所有域用户都有权访问的文件中

如果需要更改域中机器的本地管理员密码,建议使用LAPS

4. 绕过UAC提权

UAC (User Account Control,用户账号控制)是微软为了提高系统安全性咋Windows Vista中引入的技术

UAC 的作用:验证用户是否有权限去做某些操作

需要UAC授权才能进行的操作列表:

配置Windows Update

增加、删除账户

更改账户类型,更改UAC设置

安装ActiveX,安装卸载程序,安装设备驱动程序

将文件移动/复制到Program或Windows目录下

查看其它用户的文件夹

利用方式

msf 的 bypassuac 模块使用前提

  1. 系统当前用户必须在管理员组中
  2. 用户账户控制程序UAC设置为默认,即“仅在程序试图更改我的计算机时通知我”

use exploit/windows/local/bypassuac

// 该模块将通过进程注入,利用受信任的发布者证书绕过Windows UAC。该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。

use exploit/windows/local/bypassuac\_injection

//该模块直接运行在内存的反射DLL中(内存注入),所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。

use exploit/windows/local/bypassuac\_fodhelper

//该模块通过FodHelper注册表项,通过在当前用户配置单元下劫持注册表中的特殊键,并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将为我们生成另一个关闭UAC的shell。虽然该模块修改了注册表,但它会在调用payload后清除该键。相比之前的模块,该模块对架构系统并无特别要求。如果指定EXE::Custom DLL,则应在单独的进程中启动payload后调用ExitProcess()。

use exploit/windows/local/bypassuac\_eventvwr

//Windows提权UAC保护绕过(通过Eventvwr注册表项)

use exploit/windows/local/bypassuac\_comhijack

//Windows提权UAC保护绕过(COM处理程序劫持) 此模块将通过在HKCU配置单元中,创建COM处理程序注册表项来绕过Windows UAC。当加载某些高完整性进程时将会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL中包含了可提升权限的payload。在调用payload后该模块将会清除该键。该模块的使用需要选择正确的架构,但在当前低权限的Meterpreter session下架构可以不同。如果指定EXE::Custom DLL,则应在单独的进程中启动payload后调用ExitProcess()。该模块需要通过目标系统上的cmd.exe来调用目标二进制文件,因此如果限制cmd.exe访问,则此模块将无法正常运行。

使用 msf 的 Runas 模块

使用exploit/windows/local/ask模块 。需要使用 EXE::Custom 选项创建一个可执行文件(需要免杀),目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的shell。

使用该模块的前提:

  1. 当前用户必须在管理员组中 或 知道管理员密码,对UAC的设置则没有要求
  2. 用户需要手动点击弹出的程序

使用Nishang中的 Invoke-PsUACme.ps1

Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC

Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -verbose  
    #使用sysprep方法并执行默认的payload
Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -verbose  
    #使用oobe方法并执行默认的payload

防御措施

使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在Windows Vista中一样,总是弹出警告)。

5. 令牌窃取

令牌是系统的临时密钥,相当于账号密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌

假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。

令牌分类:

访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾

利用方式

程序 incognito.exe
程序地址:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
AccessToken的列举(需要administrator权限)

incognito.exe list_tokens -u

模拟其他用户令牌

incognito.exe execute -c "完整的Token名" cmd.exe
例如:模拟system权限用户
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe

Invoke-TokenManipulations.ps1脚本

这个脚本是PowerSploit下Exfiltration文件夹内的一个脚本

使用命令如下:

列举token
Invoke-TokenManipulation -Enumerate
提权至system
Invoke-TokenManipulation -CreateProcess "cmd.exe" -username "nt authority\system"
复制进程token
Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId 500
复制线程token
Invoke-TokenManipulation -CreateProcess "cmd.exe" -ThreadId 500

msf下的incognito模块

需要administrator权限

use incognito                     #加载incognito
list_tokens -u                     #列出AccessToken
impersonate_token "NT AUTHORITY\SYSTEM"     
    #模拟system用户,getsystem命令即实现了该命令。如果要模拟其他用户,将token名改为其他用户即可
rev2self                         #返回到之前的AccessToken权限

域内的话可以添加域用户并添加进域管理组进行敏感操作
add_user hack qwer123456! -h 192.168.13.132 
add_group_user "Domain Admins" hack -h 192.168.13.132

防御

禁止Domain Admins登录对外且未做安全加固的服务器,因为一旦服务器被入侵,域管理员的令牌可能会被攻击者假冒,从而控制DC

如果想清除假冒,重启服务即可。

其他Windows提权方式

数据库提权

mysql:有udf的提权方法
数据库密码是明文的???

三方软件提权

系统输入法
vnc

信息泄露

标签: windows, Windows, 用户, 模块, 权限, 提权

相关文章推荐

添加新评论,含*的栏目为必填