介绍
在渗透测试或 CTF 期间,常会在目标系统上获得初始立足点相对容易。困难通常出现在后续的权限提升阶段
提权阶段需要大量枚举系统,你可能会遇到系统内核漏洞,密码明文存放在桌面…..。提升权限可能需要你尝试多个方法。
用户权限级别
windows系统具有不同的权限级别,下面是一些最常看到的用户级别
- Administrator(本地):此账户拥有最高权限
- standard(本地):能访问计算机,只能执行有限的任务,通常情况下该用户不能对系统进行永久性更改
- Gust:来宾账户: 对系统访问有限,未定义为用户。
- standard(domain):Active Directory 允许组织管理用户帐户。标准域帐户可能具有本地管理员权限。
- Administrator(domain):可以被认为是最高权限的用户。它可以编辑、创建和删除整个组织域中的其他用户。
您可能会看到一些来源将“SYSTEM”称为特权帐户。值得注意的是,“SYSTEM”并不是真正意义上的账户。
Windows 及其服务使用“SYSTEM”帐户来执行其任务。安装在 Windows 目标系统上的服务可以使用服务帐户,并且将具有一定级别的权限,具体取决于使用它们的服务。
服务帐户不允许登录,但可以用于权限提升。
Windows 允许系统管理员对用户进行分组以方便他们的管理。任何用户都可以成为“Administrator”组的成员,从而赋予其系统管理员权限。
一般来讲,提权有以下套路:
- 枚举当前用户可以访问的权限和资源。
- 如果软杀、EDR软件允许,请运行自动枚举脚本,例如 winPEAS 或 PowerUp.ps1
- 如果初始枚举和脚本没有发现明显的策略,请尝试不同的方法(例如,手动检查提供的checklist here)
无论是依靠自动化脚本,还是手动枚举目标系统或混合方法,无论你走哪条路,仔细阅读你在屏幕上看到的输出。您的提权问题的解决方案通常会打印在那里,你需要注意到它。
`
Set up exercise lab
https://github.com/sagishahar/lpeworkshop
walkthrogh vedio https://www.youtube.com/playlist?list=PLjG9EfEtwbvIrGFTx4XctK8IxkUJkAEqP
信息收集
在确定提权方法之前,务必进行全面的枚举。虽然提权可能需要多次尝试,但是最好限制次数。在渗透测试期间,在目标上尝试多种提权方法可能会导致连接问题,或者造成不必要的重启。
一些自动化工具可以加快此过程并让您更轻松地发现潜在的权限提升向量。但是,必须记住自动化脚本和工具可能会遗漏一些重要的向量。执行手动枚举的能力是您必备的一项重要技能。
用户枚举
访问目标系统的其他用户可以得到更多的信息,比如 一个“administrator”账户可以让你获得更高的权限,一个名为“test”的账户很可能猜解出默认密码。
枚举系统上所有用户信息并查看他们的配置能够获得一些有用的信息。
以下命令将帮助我们枚举用户及用户在目标系统上的权限:
当前用户权限:
whoami /priv
列出用户:
net user
列出用户详细信息:
net user [username]
当前登陆系统的用户
qwinsta or query session
系统定义的用户组:
net localgropup
列出特定用户组成员:
net localgroup [groupname]
收集系统信息
systerminfo 命令返回目标系统的概览。在某些目标上,此命令返回的数据量很大,因此推荐你过滤一下输出信息。
systerminfo | findstr /B /C:"OS Name" /C:"OS Version"
在公司域环境中,计算机名称还可以提供一些关于系统用途或用户身份的信息。 hostname
命令可用于此目的。请记住,如果您按照常规的渗透测试方法进行,您可能在此阶段知道主机名。
查找文件
安装在目标系统上的软件配置文件有时可以为我们提供明文密码。另一方面,一些计算机用户有创建包含密码的文本来记住他们的密码的不安全习惯(例如 passwords.txt)。查找这些文件可以让你发现新的提权向量,甚至可以访问目标网络上的其他系统和软件。findstr
命令使用方法如下:
findstr /si password *.txt
命令分解:
- findstr 在文件中查找匹配字符
- /si 查找当前目录和所有子目录(s),忽略大写/ ,忽略小写(i)差异
- password 该命令将在文件中搜索字符串“password”
- *.txt 所有.txt扩展名的文件
可以根据您的需要和目标环境更改字符串和文件扩展名,“.txt”、“.xml”、“.ini”、“*.config”和“.xls”是一些推荐查找的扩展名。
补丁
Microsoft 会定期发布适用于 Windows 系统的更新和补丁。目标系统上缺少的关键补丁可能是一个容易被利用的提权漏洞。下面的命令可用于列出目标系统上安装的更新。
wmic qfe get Caption,Description,HotFixID,InstalledOn
WMIC 是 Windows 上的命令行工具,它为 Windows Management Instrumentation (WMI) 提供接口。 WMI用于Windows上的管理操作,是一个值得了解的强大工具。
WMIC 可以提供比仅安装的补丁更多的信息。例如,未引用服务路径漏洞。
WMIC 在 Windows 10 版本 21H1 和 Windows Server 的 21H1 半年频道版本中已弃用。对于较新的 Windows 版本,您将需要使用 WMI PowerShell cmdlet。可以找到更多信息 https://docs.microsoft.com/en-us/powershell/scripting/learn/ps101/07-working-with-wmi?view=powershell-7.1
网络连接
在某些情况下,我们看到一些服务在系统本地运行,并且只能在本地访问。缺乏基本网络安全知识的系统管理员在设置只能通过系统访问的服务时往往比较松懈(未授权访问)(例如,仅响应发送到 127.0.0.1 的请求)。由于我们可以访问目标系统,因此此类服务可以为我们提供更高权限的用户凭证。
netstat 命令可用于列出目标系统上的所有侦听端口。netstat -ano
命令将返回类似于下面列出的输出
C:\Users\user\Desktop>netstat -ano
Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 68
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 1092
TCP 0.0.0.0:5985 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 660
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 1348
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1636
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 2288
TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 2468
TCP 0.0.0.0:49671 0.0.0.0:0 LISTENING 780
TCP 0.0.0.0:49681 0.0.0.0:0 LISTENING 788
上面的命令可以分解如下;
- -a :显示目标系统上的所有活动连接和侦听端口。
- -n: 防止名称解析。 IP 地址和端口以数字显示,而不是尝试使用 DNS 解析名称。
- -o :显示使用每个列出的连接的进程 ID。
任何无法通过外部访问的”LISTING” 端口都可能存在未授权漏洞。
如果发现了这样的服务,你可以尝试端口转发来连接并利用它。端口转发过程将允许您在目标系统上建立隧道连接,允许您访问从目标系统外部无法访问的端口和服务。
计划任务
某些任务可能被安排在预定的时间运行。如果它们使用特权帐户(例如系统管理员帐户)运行并且它们运行的可执行文件可以被你拥有的当前用户修改,会造成提权漏洞
schtasks
命令可用于查询计划任务。
schtasks /query /fo LIST /v
驱动程序
驱动程序是安装的附加软件,允许操作系统与外部设备交互。打印机、网络摄像头、键盘甚至 USB 记忆棒都可能需要驱动程序才能运行。
虽然操作系统更新通常相对定期进行,但驱动程序可能不会经常更新。
列出目标系统上可用的驱动程序也可以提供权限提升向量。driverquery
命令将列出目标系统上安装的驱动程序。您需要对列出的驱动程序进行一些在线查找,看看是否存在潜在的权限提升漏洞。
杀软
虽然您很少会在 CTF 活动中遇到防病毒软件,但实际的渗透测试活动通常需要您处理某种形式的防病毒软件。
各种原因会导致防病毒软件禁止您的shell访问权限,而你却没有绕过它。例如,如果您在没有使用木马的情况下访问了目标系统(例如使用凭据并通过 RDP 连接),则防病毒软件将不会检测到您的存在。但是,要达到更高的权限级别,您可能需要在目标系统上运行脚本或其他工具。因此,最好检查是否存在任何防病毒软件。
通常,您可以采取两种方法:专门查找防病毒软件或列出所有正在运行的服务并检查哪些服务可能属于防病毒软件。
第一种方法可能需要事先进行一些研究,以了解有关防病毒软件使用的服务名称的更多信息。比如Windows系统默认安装的杀毒软件,Windows Defender的服务名称是windefend。下面的查询将搜索名为“windefend”的服务并返回其当前状态。
sc query windefend
虽然第二种方法可以让您在事先不知道其服务名称的情况下检测防病毒软件,但输出信息可能非常多。
sc queryex type=service
工具
有一些脚本可以自动化以上过程,请记住,自动化工具有时会错过权限提升。虽然真正的渗透测试活动可能不存在已知的提权漏洞,但在 CTF 中,如果初始结果没有任何有用的信息,请尝试不同的方法。
以下是一些常用来识别权限提升向量的工具。
WinPEAS
WinPEAS 是一个脚本,用于枚举目标系统以发现权限提升路径。
你可以找到winPEAS 的预编译的可执行文件或 .bat 脚本。
请注意,Windows Defender 会检测并禁用 winPEAS。 WinPEAS 会执行一系列枚举命令并打印它们的输出。
winPEAS 的输出可能很长,有时难以阅读。我们可以将输出定向到一个文件。
winpeas.exe > outputfile.txt
WinPEAS can be downloaded here
PowerUp
PowerUp 是一个 PowerShell 脚本,用于搜索目标系统上的常见权限提升。
你可以使用 Invoke-AllChecks
参数来进行所有可能的检查,也可以进行特定的检查(比如: Get-UnquotedService
参数来检查未引用服务路径漏洞)
PowerUp can be downloaded here.
要在目标系统上运行 PowerUp,您可能需要绕过执行策略限制。为此,您可以使用以下命令启动 PowerShell
C:\Users\user\Desktop>powershell.exe -nop -exec bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\user\Desktop> Import-Module .\PowerUp.ps1
PS C:\Users\user\Desktop> Invoke-AllChecks
[*] Running Invoke-AllChecks
[*] Checking if user is in a local group with administrative privileges...
Windows Exploit Suggester
一些利用脚本(例如 winPEAS)将要求你将它们上传到目标系统并在那里运行它们。这可能会被反病毒软件检测到并且删除它。为避免发出可能引起注意的不必要噪音,使用Windows Exploit Suggester 是更好的选择,因为它运行再你的攻击机上
Windows Exploit Suggester is a Python script that can be found and downloaded here KALI自带
安装后,在使用它之前,执行windows-exploit-suggester.py –update
命令来更新数据库。该脚本将引用它创建的数据库,以检查可能导致漏洞的缺失补丁,您可以使用该漏洞来提升您在目标系统上的权限。
要使用该脚本,您需要在目标系统上运行 systeminfo
命令。将输出定向到 .txt 文件,再将其转移到攻击机器上
windows-exploit-suggester.py 可以按如下方式运行
windows-exploit-suggester.py --database 2021-09-21-mssb.xls --systeminfo sysinfo_output.txt
Windows Exploit Suggester 是一个 Python 脚本,可在此处找到并下载https://github.com/AonCyberLabs/Windows-Exploit-Suggester
此处提供了较新版本的 Windows Exploit Suggester。根据目标系统的版本,使用较新的版本可能更有效。https://github.com/bitsadmin/wesng
metsploit
如果您已经在目标系统上获得了 Meterpreter shell,您可以使用 multi/recon/local_exploit_suggester
模块列出可能影响目标系统的漏洞。
提权方法
Kernel 提权
vulnerable software
安装在目标系统上的软件可能存提权漏洞。与驱动程序一样,公司组织和用户可能不会像更新操作系统那样频繁地更新它们。你可以使用wmic
工具列出目标系统上安装的软件及其版本。下面的命令将转储它可以收集的已安装软件的信息。
wmic product
此输出不容易阅读,并且取决于您可以访问目标系统的屏幕大小;您可以使用以下命令过滤输出以获得更清晰的输出。
wmic product get name,version,vendor
由于一些向后兼容性问题(例如,为 32 位系统编写的软件在 64 位上运行),wmic product
命令可能不会返回所有已安装的程序。您会看到已安装软件的快捷方式,并且您会注意到它们不会出现在 wmic product 命令的结果中。因此,可以再使用以下命令检查正在运行的服务,以更好地了解目标系统。
wmic service list brief
由于此命令的输出可能多,您可以通过添加 findstr 命令过滤输出以运行服务;
wmic service list brief | findstr "Running"
如果要收集有关任何服务的更多信息,只需使用 sc qc
命令
C:\Users\user>sc qc RemoteMouseService
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: RemoteMouseService
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\Program Files (x86)\Remote Mouse\RemoteMouseService.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : RemoteMouseService
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
C:\Users\user>
查找带有权限提升漏洞的软件
- Searchsploit
- Metasploit
- Exploit-DB
- Github
小心使用未经验证或属于 Metasploit 框架的漏洞利用代码。
因为它可能包含一些后门,或者导致主机奔溃。确保你检查了EXP,检查了所有混淆部分,并且很好地理解了漏洞利用代码后再尝试运行。
Dll 劫持
DLL 劫持是一种有效的方法,可以把恶意代码注入进程序并执行。某些 Windows 可执行文件在运行时使用动态链接库 (DLL)。
DLL文件存储了支持程序main函数运行的其他子函数,在某种程度上,DLL 也是可执行文件,但它们不能像 exe 文件那样直接运行。它们由其他应用程序主程序(或大多数情况下是 exe)启动。如果我们可以用特制的 DLL 文件替换合法的 DLL 文件,我们的代码将由应用程序运行。
DLL 劫持需要一个应用程序(通常是一个 exe 文件),该应用程序要么缺少 DLL 文件,要么DLL查找目录可以被插入恶意DLL。