PrivescCheck
这个脚本旨在识别通常由Windows配置问题或不良实践导致的本地权限提升(LPE)漏洞。它还可以收集一些用于漏洞利用和后期渗透任务的有用信息。
入门
下载脚本并将其复制到目标Windows机器后,使用以下命令之一运行它。
[!注意] 你不需要克隆整个仓库。文件
PrivescCheck.ps1
是一个独立的PowerShell脚本,包含PrivescCheck
运行所需的所有代码。
[!重要] 在下面的命令中,第一个
.
(点)用于"点源"脚本,这样函数和cmdlet就可以在当前作用域中使用(参见PowerShell点源特性)。
仅基本检查
快速识别重要问题,如本地权限提升漏洞。
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
扩展检查 + 人类可读报告
识别重要问题,同时收集额外信息,并将结果保存到易于阅读的报告文件中。
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
所有检查 + 所有报告
执行扩展和审计检查,并将结果保存为人类可读的报告,以及机器可读的文件,这些文件后续可以被解析用于自动生成报告。
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
检查类型
PrivescCheck中实现的所有检查都有一个类型。这个值和命令行上指定的标志将决定它们是否被执行。
基本
类型为Base
的检查将始终执行,除非脚本以管理员身份运行。它们主要用于识别权限提升漏洞或其他重要问题。
扩展
类型为Extended
的检查只有在命令行上指定-Extended
选项时才能执行。它们主要用于提供可能对漏洞利用开发或后期渗透有用的额外信息。
审计
类型为Audit
的检查只有在命令行上指定-Audit
选项时才能执行。它们主要用于提供在配置审计背景下相关的信息。
实验性
类型为Experimental
的检查只有在命令行上指定-Experimental
选项时才能执行。这些是需要进一步完善的不稳定检查。请谨慎使用。
技巧和窍门
PowerShell执行策略
默认情况下,当启动新的powershell.exe
进程时,客户端上的PowerShell执行策略设置为Restricted
,服务器上设置为RemoteSigned
。这些策略会阻止(未签名)脚本的执行,但可以在当前作用域内如下覆盖。
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
然而,当执行策略通过GPO强制执行时,这个技巧不起作用。在这种情况下,启动新的PowerShell会话后,你可以如下加载脚本。
Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression
PowerShell版本2
绕过受限语言模式的一个常见方法是启动PowerShell版本2,因为它不实现这种保护。因此,大量的开发工作都用于维护这种兼容性。
[!注意] 尽管PowerShell版本2在Windows的最新版本中默认仍然启用,但如果没有.Net框架版本2.0(需要手动安装),它无法运行。
已知问题
Metasploit超时
如果你在Meterpreter会话中运行这个脚本,你很可能会遇到"超时"错误。Metasploit有一个"响应超时"值,默认设置为15秒,但在大多数环境中,这个脚本运行需要更长的时间。
meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_import /local/path/to/PrivescCheck.ps1
[+] File successfully imported. No result was returned.
meterpreter > powershell_execute "Invoke-PrivescCheck"
[-] Error running command powershell_execute: Rex::TimeoutError Operation timed out.
可以通过sessions
命令的-t
选项设置不同的值(文档)。在下面的例子中,为ID为1
的会话设置了2分钟的超时时间。
msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"