Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2019-6329 — HP Support Assistant 中的本地权限提升 | Kitploit
工具/GitHubGitHub/manhndd/cve-2019-6329
权限提升漏洞分析漏洞利用横向移动后渗透利用Payload 开发二进制利用
GitHubmanhndd/cve-2019-6329

CVE-2019-6329

HP Support Assistant 中的本地权限提升

查看仓库
414年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

HP Support Assistant 中的本地权限提升漏洞

通过滥用硬链接实现 HP Support Assistant 中的本地权限提升

研究人员:Bkav 的 ManhNDd

描述

在 HP Support Assistant GUI 中,当你点击 检查更新和消息 时,服务 HP Support Solution Framework 会运行一些任务,启动 HPSAObjUtil8.exe(以 SYSTEM 权限运行),该程序会更改 C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA 中所有 .xml 文件的权限。具体来说,HPSAObjUtil8.exe 会将这些 .xml 文件的完全控制权授予所有用户。以下是 HPSAObjUtil8 中的漏洞代码:

root@kitploit:~
public static void AddTempLogsPermission()
	{
		string path = Environment.GetEnvironmentVariable("ProgramData") + "\\Hewlett-Packard\\HP Support Framework\\Logs\\Temp\\HPSA";
		if (Directory.Exists(path))
		{
			string[] files = Directory.GetFiles(path, "*.xml");
			if (files != null && files.Length != 0)
			{
				foreach (string fileOrFolderName in files)
				{
					Patches._utils.AddFileSecurity(fileOrFolderName);
				}
			}
		}
	}

用户可以在 C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA 文件夹中创建一个名为 ???.xml 的硬链接,并将其指向我们选择的受害者文件(只需读取权限),然后让 HPSAObjUtil8 修改其权限,使我们对该文件拥有完全控制权(读/写/删除)。因此,此漏洞允许我们获得系统文件的完全控制权 => 你可以覆盖系统 DLL 以获取系统权限。顺便提一下,该漏洞的 CVSS 3.0 评分将 所需权限 设置为高。这应该为无,因为我在非管理员用户上成功测试了该漏洞。

利用

通过逆向 HPSF.exe 和 HPSupportSolutionsFrameworkService.exe,我发现客户端 HPSF.exe 通过接口 HP.SupportFramework.ServiceManager.Interfaces.IServiceInterface(定义在 HP.SupportFramework.ServiceManager.dll 中)与服务通信。如果客户端调用方法 IserviceInterface.RunAnalysis,服务将启动 HPSAObjUtil8 并触发漏洞。

root@kitploit:~
ServiceInterface.Instance.RunAnalysis("en-US", true);

因此,你需要创建一个虚假客户端并调用 RunAnalysis。但是,服务在处理请求之前会验证其客户端:

  • 检查客户端是否带有 HP 签名且位于 C 盘中。
  • 检查客户端的父进程、祖父进程、曾祖父进程...是否带有 HP 签名或是有效的 Windows 进程(例如,在 System32 中)。然而,如果 GetParent 方法返回 null,则检查停止。
root@kitploit:~
internal static bool \u0001(int \u0002)
        {
            Process processById = Process.GetProcessById(\u0002);
            string text = \u000E.\u0001(processById);
            if (processById.MainModule.FileName.ToLowerInvariant() != text.ToLowerInvariant())
            {
                if (DebugLog.IsDebug)
                {
                    DebugLog.LogDebugMessage("Invalid File detected: " + text, DebugLog.IndentType.None);
                }
                return false;
            }
            Process parent = processById.GetParent();
            bool flag = true;
            int num = 0;
            while (parent != null && flag && num <= 5)
            {
                bool flag2;
                flag = \u000E.\u0001(parent, out flag2);
                if (!flag || flag2)
                {
                    break;
                }
                num++;
                parent = parent.GetParent();
            }
            return flag;
        }

让我们绕过客户端验证:

  • 要绕过签名检查,你必须启动一个 HP 签名的 EXE 并向其注入代码,或者创建一些虚假 DLL,由 HP EXE 加载。我选择了第二种方法。我发现 BatteryTest.exe(位于 C:\Program Files (x86)\Hewlett-Packard\HP Support Framework\Resources\HPBatteryCheck)带有 HP 签名,并且当我启动 BatteryTest.exe 时,它会先尝试在其目录中加载 userenv.dll,然后再搜索 %PATH%。因此,我创建一个虚假的 userenv.dll,并将其与 BatteryTest.exe 复制到同一文件夹,然后运行 BatterTest => BatterTest 成为我们的客户端 exe,并为您触发 RunAnalysis => 绕过客户端签名检查。
  • 我将 BatterTest.exe 和其他必要文件复制到 %tmp% 中,这样它们就在 C 盘上 => 确保客户端位于 C 盘。
  • 为了绕过父进程检查,我创建了一个程序,该程序调用 BatteryTest.exe 并立即退出,这样 GetParent 返回 null!

现在,你需要找到一个可作为硬链接目标的可执行文件。它应该是一个会在一段时间后自动以 SYSTEM 权限运行的 EXE 或 DLL,这样当你覆盖它时,就能获得 SYSTEM 权限。我发现调用 RunAnalysis 时,HPSupportSolutionsFrameworkService 会启动许多由 SYSTEM 运行的进程。你可以用自己的可执行文件覆盖这些进程。但是,服务会在启动这些 EXE 之前检查其签名,因此你不能创建虚假 EXE,而只能利用这些 EXE 加载的 DLL。有许多 DLL 已经加载在某个位置,并且许多 .NET DLL 在加载前会检查签名,因此你不能使用它们。幸运的是,仍然有一些 DLL 可用:

  • c:\program files (x86)\hp\shared\hputils64.dll,由 Detect_BatteryFailure.exe(HP 签名)加载。
  • c:\windows\syswow64\rtutils.dll
  • c:\windows\system32\msxml3.dll

我尝试修改了 hputils64.dll 并成功。我创建了一个指向 hputils64.dll 的硬链接。当调用 RunAnalysis 时,HPSAObjUtil8 更改了 hputils64.dll 的权限,几秒钟后 Detect_BatteryFailure.exe(以 LOCAL SYSTEM 权限运行)启动并加载 hputils64.dll。在 hputils64 加载之前,你可以覆盖它,这样 Detect_BatteryFailure.exe 就会加载你的恶意 DLL,最终获得 SYSTEM 权限。

结论

为了编写利用代码,我创建了:

  • CreateProcess.exe:启动一个进程并退出。用于绕过父进程验证。
  • CreateHardlink.exe:创建硬链接。
  • Userenv.dll:设置执行 .NET 程序集的环境,并在 BatterTest 的上下文中执行程序集 invader.exe。用于绕过客户端签名验证。
  • Invader.exe:调用 RunAnalysis,触发漏洞。
  • MalDll.dll:启动记事本。用此 DLL 覆盖 hputils64.dll。

以下是 PrivHP4.py 中的利用步骤:

  1. 将 BatteryTest.exe 和其他必要文件复制到 %tmp% 文件夹。
  2. 从 C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA\hardlink.xml 创建到 C:\Program Files (x86)\HP\Shared\hputils64.dll 的硬链接。
  3. 使用 CreateProcess.exe 启动 BatteryTest.exe。CreateProcess.exe 会在启动 BatterTest 后立即终止。
  4. 等待 C:\Program Files (x86)\HP\Shared\hputils64.dll 的权限被更改,然后用 MalDll.dll 覆盖它,然后只需等待记事本以 SYSTEM 权限启动!

要测试 PoC,只需克隆仓库并运行 PrivHP4.py。

参考文献

  1. https://support.hp.com/us-en/document/c06388027
  2. http://www.securityfocus.com/bid/108891
下载工具