Windows 上的目录遍历(Directory Traversal / Path Traversall)攻击原理与其他操作系统类似,攻击者试图通过输入特定的文件路径来访问系统中未授权的文件或目录。以下是目录遍历(Directory Traversal / Path Traversal)攻击在 Windows 系统中的一般原理:

 

Directory traversal 完整解析、定义、配套链路

1. 完整术语

Directory traversal
 
中文标准译名:目录遍历漏洞 / 路径穿越
 
也常称:Path Traversal(路径穿越,等价术语)

拆分释义

  • Directory:目录、文件夹
  • traversal:遍历、穿越、跳转访问

2. 底层原理定义

攻击者利用输入校验缺陷,传入 ../、..\ 这类上层目录跳转字符,绕过程序限定的访问目录,读取服务器任意磁盘文件(INI 配置、ntds.dit 备份、cmdkey 凭据、http.sys 配置、数据库 MDF/LDF 等敏感文件)。
 
典型载荷示例:
plaintext
https://server.com/getfile?path=../../Windows/System32/drivers/etc/hosts

3. 关联系统组件配套

  1. URL /.url 文件
     
    .url 互联网快捷方式、http.sys 内核处理 URL 请求时若未过滤../,会触发目录遍历;url.dll为 URL 解析核心库。
  2. 网络协议:TCP/UDP,tcpip.sys、Realtek 网卡承载攻击流量;
  3. 身份权限:文件读取权限依托账户 SID、NTFS ACL,目录遍历可越权读取受限本地文件;
  4. 存储载体:可读取 INI 配置、MDF/NDF 数据库、LDF 事务日志、ntds.dit 域快照、打印导出 printerExport 文件(printbrm);
  5. 安全工具关联:tpmvscmgr 虚拟智能卡证书、cmdkey 凭据文件均存在被遍历窃取风险。

4. 同类 Web 高危漏洞对照

漏洞英文名称 中文 核心载体
Directory Traversal / Path Traversal 目录遍历 / 路径穿越 URL 参数、文件读取接口
SQL Injection SQL 注入 SQL Server MDF/NDF 数据库
DLL Side-Loading DLL 侧加载劫持 PE 模块加载逻辑缺陷

Directory Traversal / Path Traversal 目录遍历(路径穿越漏洞)完整拆解解构

一、底层原理

1. 漏洞本质

信任外部可控输入,未做路径规范化、路径隔离校验,直接将用户输入拼接至文件系统路径,攻击者利用 ../(上级目录跳转符)突破预设目录限制,读取 / 写入服务器任意文件。
 
核心矛盾:
 
开发者预期:/files?file=test.txt → 读取 ./static/files/test.txt
 
攻击者输入:/files?file=../../etc/passwd → 突破 static/files 边界,向上跳转访问系统文件。

2. 关键符号定义

  • ../:向上跳转一级目录(Unix & Windows 通用语义)
  • ..\:Windows 平台目录分隔符变体
  • URL 编码变体:%2E%2E%2F → ../;双重编码、Unicode 畸形编码常用来绕过简易过滤
  • Null Byte 旧漏洞:file.txt%00(部分老旧语言截断字符串,现已基本修复)

3. 系统差异语义

  • Linux/Unix:根目录 /,区分大小写,分隔符 /
  • Windows:盘符 C:\,不区分大小写,同时兼容 / 与 \
现代 Web 框架、操作系统内核会自动归一化路径分隔符,单一过滤 / 很容易被 \ 绕过。

4. 路径规范化(Normalization)核心概念

操作系统 / 语言标准库在打开文件前,会对路径进行路径解析归一化:
 
static/files/../../etc/passwd → 归一化为 /etc/passwd
 
漏洞发生时机:业务代码在校验路径之前,没有执行归一化;或者校验原始字符串,而非归一化后的真实路径。
典型错误逻辑:
伪代码
# 错误:仅判断原始字符串是否包含../,攻击者可使用编码绕过
if(input contains "../") block;
open(base_path + input)

# 正确思路:先拼接→归一化→判断最终路径是否落在允许目录内
full_path = normalize(base_path + input)
if full_path startswith allowed_base_path: open()

二、依赖文件、运行载体、环境依赖

1. 依赖载体(所有存在文件读取的应用都可能触发)

  1. Web 服务程序(PHP、Python Flask/Django、NodeJS、Java、ASP.NET、Go)
  2. 嵌入式 HTTP 服务、路由器 / 摄像头 Web 管理后台
  3. 客户端软件(解析远程 URL、加载外部文件路径参数)
  4. API 服务、文件下载接口、模板加载、图片预览、日志查看接口

2. 系统底层依赖

最终文件访问调用链:
 
应用代码 → 语言标准库文件函数 → OS 系统调用
  • Linux:open()、read()
  • Windows:CreateFileW()
     
    ../ 跳转逻辑由操作系统内核文件系统层实现,不是 Web 语言自定义逻辑。

3. 高危配套函数(语言层面风险入口)

语言 危险文件函数
PHP file_get_contents()、include、require、readfile()
Python open()、os.open()、Path.read_text()
Java FileReader、FileInputStream
NodeJS fs.readFile、fs.createReadStream
.NET File.ReadAllText()
安全函数特征:禁止直接拼接外部输入;优先使用目录锁定 API。

4. 易被忽视的依赖组件

  • Web 服务器(Nginx/Apache/IIS)自身路径解析漏洞(服务器层面路径穿越,无需后端代码漏洞)
  • WAF、反向代理:若仅做简单字符串匹配过滤,容易被编码、分隔符变形绕过
  • URL 解析库:解码时机差异(WAF 一次解码,后端再次解码 → 双重编码绕过)

三、依赖关系梳理

plaintext
攻击者可控HTTP参数(GET/POST/COOKIE/Header)
        ↓
Web应用接收原始输入
        ↓
【漏洞触发点】代码直接拼接基准目录 + 用户输入
        ↓
语言标准库进行路径归一化(解析../向上跳转)
        ↓
系统调用(CreateFile / open)访问文件系统
        ↓
文件内容返回响应 → 信息泄露;若支持写入,可写入Webshell

关键依赖约束

  1. 必须存在可控输入:无外部输入,不存在路径穿越;
  2. 缺少沙箱 / 目录边界隔离:没有把文件访问锁定在固定根目录;
  3. 校验时机错误:在校验前没有归一化路径;
  4. 权限约束:进程运行账号权限决定能读取哪些文件(低权限账号限制危害范围,但不能根治漏洞);
  5. 网络依赖:漏洞需要 HTTP 请求交付 Payload;本地程序若解析外部路径参数同样受影响。

四、完整逻辑链路

链路 1:漏洞成功利用标准链路

  1. 业务接口设计:GET /download?filename=avatar.jpg
     
    预期逻辑:./upload/avatar.jpg
  2. 攻击者构造 Payload:/download?filename=../../etc/passwd
  3. Web 程序取出 filename 参数,直接拼接:./upload/../../etc/passwd
  4. 语言运行时归一化路径 → /etc/passwd
  5. 调用系统文件 API 读取目标文件
  6. 文件内容通过 HTTP 响应返回,漏洞利用成功

链路 2:常见绕过逻辑链路(简易过滤失效)

  1. 代码简单过滤:检测输入是否包含 ../
  2. 攻击者 URL 编码 Payload:..%2F
  3. WAF 未解码,放行;后端 Web 框架自动 URL 解码得到 ../
进阶绕过:双重 URL 编码、..\ Windows 分隔符、Unicode 畸形字符、超长路径截断

链路 3:防御生效链路(正确修复方案)

  1. 获取用户输入
  2. 拼接基准路径得到完整路径字符串
  3. 调用标准库路径归一化函数(realpath/GetFullPathName)
  4. 判断归一化后的绝对路径是否以允许目录开头
  5. 匹配成功才允许读取;否则直接拒绝
禁止方案:单纯黑名单过滤 ../

链路 4:典型故障 / 边界场景

  1. 路径基准目录使用相对路径,程序工作目录变动导致边界判断失效;
  2. Windows 下长路径、NTFS 链接、卷挂载点造成路径判断绕过;
  3. 容器环境:路径穿越读取宿主机文件(容器逃逸辅助向量);
  4. 开启符号链接:允许通过软链接跳出目录限制。

五、配套链:攻击载荷、检测工具、防御方案、运维配套

1. 标准 Payload 集

基础载荷
plaintext
../etc/passwd
..\windows\system32\drivers\etc\hosts
....//....//etc/passwd
..%2F..%2Fetc%2Fpasswd
平台敏感目标
  • Linux:/etc/passwd、/etc/shadow、/proc/self/environ、/root/.ssh/id_rsa
  • Windows:C:\Windows\System32\drivers\etc\hosts、boot.ini、sam文件

2. 检测配套工具

  1. Burp Suite:Active Scan 自动探测路径穿越
  2. OWASP ZAP:被动 + 主动扫描
  3. nuclei:内置大量 path-traversal POC
  4. 手工测试:使用../、编码变体组合测试下载 / 预览接口

3. 代码层防御配套(标准规范)

  1. 使用白名单文件名(最高安全,优先采用);
  2. 路径归一化 + 前缀校验(推荐通用方案);
  3. 使用语言内置安全 API:
    • Python pathlib.Path.resolve()
    • Java Path.normalize().toAbsolutePath()
    • .NET Path.GetFullPath()
  4. 最小权限运行 Web 进程;
  5. 禁用目录内符号链接(服务器配置)

4. 基础设施配套防护

  1. WAF:开启路径归一化后检测(不要仅原始字符串匹配)
  2. Nginx/Apache 限制目录访问范围
  3. 容器:只读文件系统、用户名称空间隔离
  4. 审计:监控 Web 进程异常读取系统敏感文件(EDR / 主机审计)

5. 漏洞关联配套攻击链

路径遍历 → 读取数据库配置文件 → 获取账号密码 → 登录后台;
 
路径遍历读取源码 → 挖掘更多漏洞;
 
可写型路径穿越 → 写入 Webshell → 远程代码执行。

六、边界与误区澄清

  1. ❌ 误区:过滤 ../ 就能防御
     
    ✅ 真相:攻击者可通过编码、分隔符变形、重复斜杠绕过;黑名单永远不可靠。
  2. ❌ 误区:用权限限制就能修复
     
    ✅ 真相:权限缩小攻击面,无法阻止漏洞本身,仍可读取进程有权限访问的敏感文件。
  3. ❌ 误区:URL 编码会被服务器自动处理,无需考虑
     
    ✅ 真相:解码时机在 WAF 与后端不一致,产生大量绕过空间。
  4. 区分概念
  • 路径穿越 (Path Traversal):应用层漏洞,本文描述范畴
  • 目录浏览 (Directory Listing):Web 服务器开启目录罗列,二者不是同一漏洞。

 


Directory traversal(目录遍历),也称为路径遍历或目录穿越,是指攻击者试图访问计算机系统中未经授权的目录或文件的过程。这种攻击利用了应用程序对文件路径处理的不恰当验证或过滤,使得攻击者可以访问他们通常不允许访问的文件或目录。攻击通常发生在Web应用程序或其他需要文件系统访问的软件中。

攻击者通常尝试通过修改URL或输入字段中的文件路径来实现目录遍历。例如,在一个Web应用程序中,如果应用程序在处理用户请求时未正确验证输入的文件路径,攻击者可以通过在URL中添加../或其他特殊字符来访问应用程序所在服务器上的其他目录或文件,甚至可能执行恶意操作。

目录遍历攻击可能会导致敏感信息泄露、执行未授权的文件读取、写入或删除操作,以及其他系统安全问题。因此,开发者在编写应用程序时应注意正确验证和过滤用户提供的文件路径,以防止此类攻击。


Directory traversal 攻击的底层原理涉及目标系统在处理文件路径时的安全性缺陷。攻击者利用这些缺陷来访问他们通常不允许访问的文件或目录。

原理解析:

  1. 文件路径处理不当:

    • 许多应用程序在处理文件路径时,会从用户输入或请求中获取文件名或路径。这些输入通常来自于 URL、表单提交或其他用户交互。
    • 如果应用程序未能正确验证或过滤这些输入,攻击者可以利用这一点构造恶意的文件路径,包含目录遍历字符如 ../ 或 \ 等,以跳出当前目录。
  2. 路径规范化和解析:

    • 操作系统通常会对文件路径进行规范化和解析,以确保访问的路径有效且安全。例如,将 ../ 转换为父目录的实际路径,以确保路径有效性。
    • 如果应用程序未能正确地对路径进行规范化和解析,攻击者可以通过构造特定的路径字符串,绕过应用程序的安全检查,访问到他们本不应有权访问的目录或文件。
  3. 攻击实例:

    • 假设一个应用程序在处理用户请求时,接受一个文件名作为参数来加载文件内容并返回给用户。如果应用程序未对传入的文件名进行充分验证,而是直接将文件名与一个基础目录结合,攻击者可以通过在文件名中添加 ../ 来访问系统上其他目录的文件,而不是受限的基础目录内的文件。
  4. 安全防范:

    • 为了防止目录遍历攻击,开发者应该对所有来自用户输入的文件路径进行严格的验证和过滤。
    • 使用安全的文件路径操作函数和API,如绝对路径的构建、规范化和解析,确保路径始终指向预期的位置。
    • 配置操作系统和服务器以限制应用程序对文件系统的访问权限,确保应用程序只能访问它们需要的文件和目录。

 目录遍历攻击的原理是利用应用程序在处理文件路径时的安全漏洞,通过构造特定的文件路径字符串来绕过访问限制,访问或操作未授权的文件或目录。有效的防御措施包括良好的输入验证、安全的路径操作和最小权限原则的应用。


Directory traversal(目录遍历)攻击不涉及特定的架构,而是一种安全漏洞利用技术,可以在各种架构和系统上出现。然而,攻击的成功与目标应用程序如何处理文件路径相关。以下是一些常见的应用架构和系统中目录遍历攻击的可能性和防御方法:

Web 应用程序

  1. 客户端-服务器架构:

    • 攻击原理:Web 应用程序通常接收来自用户的文件路径或文件名作为输入,例如在文件下载或文件上传功能中。
    • 漏洞利用:攻击者可以在输入中添加 ../ 或类似的字符来尝试跳出当前目录,访问其他目录下的文件,甚至执行系统命令。
    • 防御措施:应用程序应该对输入进行严格的验证和过滤,确保文件路径或文件名只能指向预期的位置。使用安全的文件路径操作函数(如绝对路径构建和规范化)来防止路径遍历攻击。
  2. 服务端渲染(Server-side Rendering, SSR)和客户端渲染(Client-side Rendering, CSR):

    • 攻击原理:无论是通过服务端还是客户端渲染,如果应用程序未能正确处理和验证文件路径,都可能受到目录遍历攻击的威胁。
    • 漏洞利用:攻击者可以利用服务端或客户端传递的路径信息来尝试访问未授权的文件或目录。
    • 防御措施:在服务端和客户端都要进行输入验证和路径安全处理。避免直接从用户输入中构建文件路径,而是使用安全的方法来确定最终路径。

操作系统和服务器

  1. 操作系统安全性:

    • 攻击原理:即使应用程序在设计上是安全的,操作系统的文件系统权限配置也会影响目录遍历攻击的成功。
    • 漏洞利用:如果操作系统允许应用程序访问其不应访问的目录或文件,攻击者可能通过其他方式利用这些权限。
    • 防御措施:在操作系统级别配置文件系统权限,使用最小权限原则,确保应用程序只能访问其必需的文件和目录。
  2. 云服务和容器化环境:

    • 攻击原理:在云服务和容器化环境中,应用程序可能会受到共享资源和配置管理的影响,从而影响对文件系统的访问控制。
    • 漏洞利用:攻击者可以通过访问其他容器或共享存储卷来扩展其攻击范围。
    • 防御措施:正确配置和隔离容器和虚拟机,限制共享资源的访问权限,以及实施密切的安全审计和监控。

目录遍历攻击不是由于特定的架构引起的,而是由于应用程序在处理文件路径时的安全漏洞导致的。因此,防御措施通常涉及对输入进行严格验证和过滤,安全的路径操作以及操作系统级别的文件系统访问控制。通过这些措施,可以有效地减少目录遍历攻击的风险。


Windows 上的目录遍历攻击原理与其他操作系统类似,攻击者试图通过输入特定的文件路径来访问系统中未授权的文件或目录。以下是目录遍历攻击在 Windows 系统中的一般原理:

原理解析:

  1. 路径分隔符:

    • 在 Windows 上,路径分隔符通常是反斜杠 \,例如 C:\Windows\System32\file.txt。
    • 目录遍历攻击通常利用路径分隔符来尝试访问目标文件系统中的其他目录或文件。
  2. 特殊符号 ..:

    • .. 表示父目录,在文件系统中使用它可以向上一级目录进行导航。
    • 攻击者尝试通过在路径中插入 ..\ 或其多个组合来达到向上导航到更高层次目录的目的。
  3. 攻击场景:

    • Web 应用程序:例如,如果一个 Web 应用程序接受用户输入的文件路径并没有做足够的验证,攻击者可以通过构造特定的路径(如 ../../file.txt)来试图访问应用程序目录外的文件。
    • 本地应用程序:即使是本地运行的应用程序,如果它没有正确地验证和限制用户输入的路径,也可能受到目录遍历攻击的影响。
  4. 防御措施:

    • 输入验证和过滤:对于任何用户提供的路径或文件名,应用程序应当进行严格的输入验证和过滤,确保它们只指向预期的位置。
    • 规范化路径:在处理用户输入时,始终使用安全的路径操作函数来规范化路径,例如将相对路径转换为绝对路径。
    • 权限控制:确保操作系统和应用程序本身具有足够的权限控制,避免未经授权的文件系统访问。

示例:

假设一个应用程序接受用户提供的文件名,并假设它的实现存在漏洞:

  • 正确使用的文件名:C:\App\Files\document.txt
  • 攻击者可能试图传递的输入:..\..\Windows\System32\config\

如果应用程序未正确验证和处理这些输入,攻击者可以成功访问 C:\Windows\System32\config\ 目录下的文件,这是通常情况下不应该被允许的。

Windows 上的目录遍历攻击依赖于应用程序对路径输入的处理方式。通过实施良好的安全编程实践和系统配置,可以有效地减少这类攻击的风险。


在计算机领域中,对于Windows系统中的目录遍历操作,通常使用的英文术语是 "directory traversal"。"Directory traversal" 的常用简称是 "dir traversal"。

"Windows 目录遍历"directory traversal指的是在Windows操作系统中对文件系统目录结构进行遍历的过程或技术。这通常是指程序或用户通过文件管理器或命令行界面来浏览、访问或操作文件和文件夹的方式。

目的和用途

  1. 文件管理:用户可以通过遍历目录来查找特定的文件或文件夹,管理存储在计算机上的数据。

  2. 程序访问:开发人员和系统管理员经常需要编写脚本或程序来遍历目录,以执行批量操作、数据分析或维护任务。

  3. 系统调试和维护:在故障排除或系统维护过程中,遍历目录可以帮助识别和解决文件系统问题,如未能访问的文件或丢失的文件。

实现方式

在Windows中,目录遍历可以通过多种方式实现:

  • 图形用户界面 (GUI):通过资源管理器或其他文件管理工具,用户可以通过点选、双击和导航来浏览目录结构。

  • 命令行界面 (CLI):使用命令行工具如cmd.exe或Powershell,用户可以使用命令来列出、移动、复制和删除文件和目录。

  • 编程接口和脚本:开发人员可以使用编程语言(如Python、C#等)的文件系统API或命令库,编写脚本来自动化复杂的文件操作和遍历任务。

安全问题和防护

目录遍历操作在某些情况下可能会带来安全风险,尤其是当用户或程序可以访问不应公开的目录或文件时。这可能导致敏感信息泄露、恶意代码执行或系统配置受损。为了防止这些问题,开发人员和系统管理员应考虑以下几点:

  • 权限控制:确保文件和目录的访问权限设置正确,限制对敏感目录的访问。

  • 输入验证:对从用户或外部输入接收的路径进行验证和规范化,防止恶意构造的路径。

  • 最小权限原则:程序应尽可能使用最低权限来执行文件操作,以减少潜在的安全风险。

“Windows 目录遍历”是一种基本的文件管理和系统操作技术,通过它用户和程序可以有效地管理和操作计算机文件系统中的数据和资源。


Windows Directory Traversal / Path Traversal 分层安全防御完整策略(系统内核、Web 服务、开发代码、终端运维、AD 域全场景)

一、系统内核底层防御(Windows 原生内置防护机制)

1. RedirectionGuard(Win11 22H2+ 官方目录跳转缓解机制)

微软 MSRC 推出的内核级防护,拦截 junction / 符号链接路径穿越提权攻击Microsoft
  • 作用:阻止低权限用户创建恶意目录连接,让高权限服务访问时跳出限定目录读取ntds.dit、cmdkey 凭据、INI 系统配置;
  • 启用方式:组策略 / 注册表自动生效,无需额外配置;
  • 防护对象:本地服务、Printbrm 打印服务、WMI COM 对象路径遍历劫持。

2. 文件系统路径权限强制校验(注册表 FileSystem 策略)

powershell
# 启用目录变更通知权限强校验,阻断跨目录读取
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name EnforceDirectoryChangeNotificationPermissionCheck -Value 1 -Type DWord
核心逻辑:所有目录读取操作强制校验 NTFS ACL,基于账户SID判断是否具备跨目录访问权限,禁止无权限遍历系统目录(C:\Windows\System32\drivers、凭据目录)Microsoft ...。

3. 内核路径规范化(NtGetFullPathName 安全归一化)

系统 API 强制标准化路径:统一解析../、..\、URL 编码%2e%2e、正反斜杠混合路径,输出绝对规范路径后再做目录边界校验;
  • 禁止绕过手段:双编码、超长路径、交替分隔符、设备路径(\\.\C:)遍历;
  • 关联组件:tcpip.sys、http.sys、WMI、COM 对象统一复用这套路径归一化逻辑。

二、Web 服务层防御(http.sys/ IIS 最常用场景,抵御 URL 路径遍历)

1. IIS Request Filtering 请求过滤(第一道拦截)

web.config 配置拦截所有路径穿越特征串,阻断原始 / 编码变形载荷
xml
<system.webServer>
  <security>
    <requestFiltering>
      <!-- 拦截 ../ 及其URL编码变种 -->
      <denyUrlSequences>
        <add sequence=".." />
        <add sequence="%2e%2e" />
        <add sequence="\..\" />
      </denyUrlSequences>
      <!-- 禁止访问敏感系统后缀 -->
      <fileExtensions allowUnlisted="true">
        <add fileExtension=".ini" allowed="false"/>
        <add fileExtension=".mdf" allowed="false"/>
        <add fileExtension=".ldf" allowed="false"/>
        <add fileExtension=".url" allowed="false"/>
      </fileExtensions>
    </requestFiltering>
  </security>
</system.webServer>

2. IIS URL Rewrite 正则拦截变形遍历载荷(对抗编码绕过)

匹配大小写、URL 双重编码、正反斜杠混合遍历字符串,直接返回 403 拒绝访问
xml
<rewrite>
  <rules>
    <rule name="BlockTraversal" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="{UNENCODED_URL}" pattern="(?i)(\.\./|\.\.\\|%2e%2e%2f|%2e%2e%5c)" />
      </conditions>
      <action type="CustomResponse" statusCode="403" />
    </rule>
  </rules>
</rewrite>

3. http.sys 内核级站点根目录锁定

通过netsh http注册 URL 前缀时限定物理根目录,内核自动校验文件绝对路径是否落在站点根目录内,跳出目录直接丢弃 TCP 报文:
powershell
# 绑定站点URL与物理目录,内核自动边界校验
netsh http add urlacl url=http://+:80/corp/ user=CORP\WebSvc
配套网卡:Realtek 网卡 ECN 拥塞标记配合内核丢弃非法遍历请求,减少 CPU 消耗。

4. Web 站点物理隔离规范

网站根目录部署在非系统盘(D/E 盘),避免遍历直达C:\Windows读取驱动、凭据文件;禁止 web 根目录存放.url、数据库 MDF/LDF、cmdkey 凭证备份、ntds 快照Microsoft ...。

三、开发代码标准防御(PowerShell / C# / C++ / WMI COM 通用编码规范)

1. 安全基目录边界校验(核心通用方案,OWASP 推荐)

逻辑流程:用户输入拼接至安全根目录 → 全路径规范化 → 判断绝对路径是否以基目录开头,跳出直接抛出拒绝。

PowerShell 安全路径校验示例

powershell
function Test-SafePath {
    param($BaseDir, $UserInput)
    $base = [System.IO.Path]::GetFullPath($BaseDir)
    $target = [System.IO.Path]::GetFullPath((Join-Path $base $UserInput))
    # 校验目标路径是否严格落在安全基目录内
    return $target.StartsWith("$base\")
}
# 调用拦截遍历
$safeRoot = "D:\WebStatic"
$inputPath = "../Windows/System32/drivers/etc/hosts"
if(-not (Test-SafePath $safeRoot $inputPath)){
    Write-Error "Path Traversal Attack Blocked"
    exit 1
}

2. 白名单 ID 映射替代原始路径(彻底杜绝路径输入)

不直接接收文件路径,前端传入数字 ID,程序通过数据库映射真实文件名,完全消除../注入入口:
  1. 前端请求:/getFile?id=1001;
  2. SQL Server MDF 存储 ID 与文件真实路径映射;
  3. 后端仅查询数据库获取合法路径,不拼接用户输入字符串。

3. 输入强过滤(允许字符白名单,而非黑名单)

仅放行字母、数字、下划线、短横线;直接拒绝\ / . : * ? " < > |等路径操作字符,从源头消除遍历载荷:
powershell
# PowerShell 白名单过滤
$input = $args[0]
if($input -match '[^a-zA-Z0-9_\-]'){
    throw "Illegal Path Character, Traversal Blocked"
}

4. 禁用危险 Win32/COM 接口

  1. 禁用url.dll无校验文件读取(规避.url快捷路径注入);
  2. WMI COM 对象限制自定义属性读写,禁止存储路径载荷;
  3. Printbrm 打印迁移工具限制导出目录,禁止跨系统目录备份配置。

四、权限最小化防御(Windows NTFS + AD 域 SID 体系)

1. 应用服务账户低权限运行(核心最小权限原则)

Web / 打印 / PowerShell 远程会话服务使用普通域账户 SID 运行,拒绝 SYSTEM / 本地管理员权限;即使出现路径遍历漏洞,也无法读取系统敏感目录:
  • 禁止访问:C:\Windows\System32\config(注册表 SAM 凭据)、TPM 虚拟智能卡目录tpmvscmgr、ntds.dit域数据库;
  • 仅授予站点静态资源目录只读权限,无写入、遍历上级目录权限。

2. NTFS 目录锁定 ACL 配置

对系统关键目录设置 Deny 拒绝规则,所有低权限账户 SID 禁止读取:
powershell
# 拒绝Web服务账户遍历系统驱动目录
icacls "C:\Windows\System32\drivers" /deny CORP\WebSvc:(OI)(CI)(RX)

3. 域环境 AD 权限管控

  1. ntds.dit存储所有账户 SID,通过组策略限制域内 PowerShell 远程加载路径范围;
  2. 禁止 LDAP 扩展字段存储路径字符串,拦截 LDAP 远程加载遍历载荷;
  3. klist Kerberos 票据绑定会话 SID,跨目录访问无对应票据直接拦截。

五、终端与运维工具专项防御(PowerShell、cmdkey、Printbrm)

1. PowerShell 执行策略约束远程 / 本地路径加载

powershell
# 推荐企业安全策略:仅本地签名脚本允许,拦截远程无签名脚本(含远程路径遍历)
Set-ExecutionPolicy RemoteSigned -Force
# 禁止从UNC/SMB远程路径加载脚本(阻断SMB渠道路径遍历)
Set-ItemProperty WSMan:\localhost\Client\TrustedHosts -Value ""

2. cmdkey 凭据存储目录访问锁定

凭据文件路径设置严格 ACL,禁止 Web / 低权限服务遍历读取持久账号密码,防止遍历窃取内网认证凭证。

3. Printbrm 打印服务器路径限制

组策略锁定打印备份导出目录,禁止输入../跳转至系统盘备份敏感配置文件。

六、监控、审计与应急防御(流量 + 日志告警)

1. http.sys/IIS 访问日志审计

监控 URL 包含../、..\、%2e%2e的异常请求,实时告警路径遍历尝试;

2. Sysmon 系统日志监控

规则捕获:文件系统跨目录读取、WMI 对象写入路径字符串、PowerShell 异常路径加载;

3. 网卡流量监控(Realtek 网卡)

监控 80/443 (HTTP)、445 (SMB)、135 (DCOM) 端口异常遍历载荷,搭配 ECN 流量标记识别恶意请求;

4. 数据库审计(SQL Server MDF/LDF)

记录文件下载接口数据库查询日志,检测 ID 映射异常跳转系统路径行为。

七、虚拟化配套防护(Intel VT-x / AMD-V)

  1. 虚拟机开启 TPM 2.0tpmvscmgr虚拟智能卡,加密磁盘 VHDX,即使遍历读取文件也无法解密;
  2. 虚拟机磁盘挂载隔离,禁止虚拟机路径直通访问宿主机系统目录;
  3. 嵌套虚拟化关闭,防止虚拟机内路径遍历逃逸至宿主机。

八、防御策略分层汇总表

防御分层 核心措施 防护目标
系统内核层 RedirectionGuard、FileSystem 路径校验、API 路径归一化 本地服务、符号链接、 junction 路径遍历提权
Web 内核层 http.sys 根锁定、IIS 请求过滤、URL 重写拦截 URL 网页路径穿越攻击
代码开发层 安全基目录校验、ID 映射、输入白名单 程序接口文件下载 / 读取漏洞
权限身份层 SID 最小权限、NTFS Deny ACL、AD 域管控 漏洞利用后无法读取敏感系统文件
运维终端层 PowerShell 执行策略、cmdkey/Printbrm 路径限制 PowerShell 本地 / 远程加载遍历
监控审计层 http.sys 日志、Sysmon、网卡流量告警 及时发现并阻断遍历攻击行为
虚拟化层 TPM 虚拟智能卡、虚拟机磁盘隔离 虚拟机内路径遍历逃逸宿主机

LGPO(Local Group Policy Object)体系下防御 Directory Traversal / Path Traversal 完整策略、配置、实操示例

一、基础术语定义

  1. LGPO
     
    Local Group Policy Object
     
    中文:本地组策略对象;配套工具 LGPO.exe = Local Group Policy Object Utility,用于工作组 / 离线主机批量下发本地安全策略,无 AD 域也可标准化防御路径遍历。
  2. Directory Traversal / Path Traversal
     
    目录遍历 / 路径穿越漏洞,利用../、URL 编码变形、UNC、LDAP、WMI 等非常规渠道越权读取系统敏感文件(INI、ntds.dit、cmdkey 凭据、MDF/LDF 数据库)。

二、LGPO 分层防御策略(计算机配置,全部可通过 LGPO 导入 registry.pol/ INF 安全模板)

模块 1:内核文件系统强制防护(阻断本地目录跳转、符号链接劫持)

策略路径:计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 安全选项
  1. 启用目录变更通知权限强校验
     
    注册表底层键(LGPO 可批量写入)
plaintext
[HKLM\SYSTEM\CurrentControlSet\Control\FileSystem]
"EnforceDirectoryChangeNotificationPermissionCheck"=DWORD:00000001
作用:内核拦截 Junction、符号链接跳转上层目录,阻止本地加载类路径遍历(WMI/INI/ 注册表载荷读取系统目录)。
 
2. 关闭 NTFS 短名称解析(对抗~1路径绕过)
plaintext
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
"NtfsDisable8dot3NameCreation"=DWORD:00000001
LGPO 导入方式:写入.pol注册表策略文件,LGPO.exe /p policy.pol批量下发。

模块 2:用户权限分配(收紧 SeChangeNotifyPrivilege,限制 “绕过遍历检查”)

路径:本地策略 → 用户权限分配 → 绕过遍历检查(Bypass traverse checking)
  1. 默认包含:Authenticated Users,高危;LGPO 收紧为仅管理员、本地服务。
  2. 安全基线配置:仅保留 Administrators、LOCAL SERVICE、NETWORK SERVICE;删除普通用户、域用户组。
     
    底层原理:权限SeChangeNotifyPrivilege是目录遍历核心权限,移除后进程无法跨目录跳转读取上级系统文件夹。
     
    LGPO 安全模板 INF 片段(可直接打包进 LGPO):
inf
[Privilege Rights]
SeChangeNotifyPrivilege = *S-1-5-32-544,*S-1-5-19,*S-1-5-20

模块 3:AppLocker(LGPO 核心加载管控,阻断恶意 Local/Remote Loading 遍历载荷)

路径:计算机配置 → 安全设置 → 应用程序控制策略 → AppLocker

防御逻辑

限制 PS1/COM/WMI/DLL 加载路径,禁止从非信任目录、网络 UNC、LDAP 远程拉取脚本,从源头阻断路径遍历载荷落地执行。
  1. 脚本规则:仅允许C:\TrustedScripts本地加载,拒绝所有远程 UNC/HTTP 路径脚本
  2. DLL 规则:阻止 DLL Side-Loading(侧加载),限制可加载目录,防止同目录恶意 DLL 遍历读取系统驱动
  3. EXE 规则:禁止临时目录、下载目录程序读取上级系统文件
     
    LGPO 导出 AppLocker 配置:LGPO.exe /b C:\GPO_Backup,批量部署到离线终端。

模块 4:PowerShell 执行策略(拦截远程加载类路径遍历)

路径:管理模板 → Windows 组件 → Windows PowerShell
 
策略:设置 PowerShell 执行策略 = RemoteSigned
  • 拒绝所有 UNC、HTTP 远程脚本(远程加载渠道路径遍历载荷直接拦截)
  • 仅本地可信签名脚本允许执行
     
    LGPO 注册表键:
plaintext
HKLM\SOFTWARE\Policies\Microsoft\WindowsPowerShell
ExecutionPolicy = "RemoteSigned"

模块 5:IIS/http.sys Web 内核防护(防御 URL 路径遍历)

路径:管理模板 → Windows 组件 → Internet Information Services
  1. 启用请求过滤,阻断../、%2e%2e编码遍历字符;
  2. 锁定站点物理根目录,禁止跳出网站目录访问系统路径;
  3. 禁用 URL 双编码解析,对抗变形绕过遍历。
     
    LGPO 配套:netsh http配置可打包进 LGPO 脚本批量导入本地策略,限制 http.sys 监听 URL 前缀范围。

模块 6:WMI/DCOM 远程访问限制(阻断 LDAP/WMI 远程加载遍历)

路径:本地策略 → 安全选项 → 限制 WMI 远程访问
  1. 禁用匿名 WMI 连接,限制仅授权 SID 访问 WMI 自定义存储类(防止远程存入路径遍历载荷);
  2. DCOM 安全收紧,拒绝低权限用户远程读取打印、脚本存储对象(Printbrm 相关遍历渠道)。

模块 7:文件系统 ACL 强制策略(LGPO 安全模板批量锁系统目录)

通过 LGPO 导入安全 INF 模板,对敏感目录设置 Deny 拒绝 ACL,即使出现遍历漏洞也无法读取文件:
inf
[File Security]
"C:\Windows\System32\drivers",0,"D:(A;D;RX;;;AU)"
"C:\Windows\System32\config",0,"D:(A;D;R;;;AU)"
  • 拒绝已认证用户读取驱动、注册表配置目录;
  • 抵御 URL、PowerShell、WMI 遍历读取 MDF/LDF、cmdkey 凭据、INI 系统配置。

模块 8:网络协议访问限制(阻断隐蔽远程加载遍历渠道)

管理模板 → 网络
  1. 禁用 SMBv1,限制 UNC 远程共享路径加载;
  2. 收紧 LDAP/DNS ICMP 流量,禁止通过非常规协议下发遍历载荷;
  3. Windows 防火墙策略打包进 LGPO,关闭 135/445 高危端口,阻断 DCOM/SMB 远程加载。

模块 9:高级审核策略(LGPO 全量审计遍历行为)

路径:本地策略 → 审核策略,通过 LGPO 导入审计 CSV:
  1. 审核文件系统:跟踪跨目录读取、上级文件夹跳转(Directory Traversal 行为日志);
  2. 审核进程创建:记录 PowerShell、WMI、rundll32 url.dll 加载行为;
  3. 审核登录事件:关联账户 SID,定位发起遍历的用户身份;
  4. http.sys 访问日志审计,监控带../的恶意 URL 请求。

三、LGPO 完整实操示例(路径遍历防御模板落地)

示例 1:导出已配置防御策略为 LGPO 备份(标准化基线)

powershell
# 管理员PowerShell,导出本机全套目录遍历防御本地策略
C:\Tools\LGPO.exe /b C:\SecurityBaseline\TraversalDefense_GPO

示例 2:批量导入防御策略到离线工作组主机

powershell
# 导入GPO备份全套防御配置
C:\Tools\LGPO.exe /g C:\SecurityBaseline\TraversalDefense_GPO
# 强制刷新本地策略
gpupdate /force

示例 3:单条内核文件系统防御通过 LGPO 文本导入

  1. 新建FileSystemDefense.txt(LGPO 标准文本格式)
plaintext
Computer
Software\Policies\Microsoft\Windows NT\FileSystem
EnforceDirectoryChangeNotificationPermissionCheck=DWORD:1
NtfsDisable8dot3NameCreation=DWORD:1
  1. 导入本地组策略
powershell
LGPO.exe /t FileSystemDefense.txt

示例 4:INF 安全模板(权限 + ACL)通过 LGPO 加载

powershell
# 导入NTFS目录拒绝ACL、用户权限分配模板
LGPO.exe /s SecureDirLock.inf

四、LGPO 防御链路整体配套

plaintext
LGPO.exe 本地组策略对象工具
↓
注册表.pol / INF安全模板 / 审计CSV
    ↓ 分层防御模块
1. 文件系统内核(阻断本地目录跳转、符号链接)
2. 用户权限SeChangeNotifyPrivilege(收紧遍历基础权限)
3. AppLocker(管控Local/Remote加载脚本、DLL侧加载)
4. PowerShell执行策略(拦截远程UNC/URL脚本遍历载荷)
5. IIS/http.sys(防御Web URL路径穿越)
6. WMI/DCOM(阻断LDAP/远程COM对象隐蔽遍历)
7. 防火墙网络策略(关闭SMB/DCOM高危远程加载端口)
8. 全量审计策略(记录所有目录遍历、异常加载行为)
底层配套组件:
SID账户权限、klist Kerberos、tpmvscmgr证书、ntds.dit域身份、Realtek网卡tcpip.sys、Printbrm打印服务

五、LGPO 防御方案核心优势

  1. 脱离 AD 域依赖:工作组、离线终端、工业主机均可批量标准化部署路径遍历防御;
  2. 多层闭环防护:内核文件系统→权限→加载管控→Web 网络→审计全链路拦截;
  3. 可标准化基线导出:一台主机配置完成后,LGPO 打包批量下发,统一封堵目录遍历各类渠道(本地内存加载、SMB 远程、LDAP 隐蔽加载、DLL 侧加载、URL 网页遍历)。

LGPO(Local Group Policy Object)防御 Windows Directory Traversal(目录遍历)完整实操方案

一、前置基础说明

  1. LGPO 全称:Local Group Policy Object,配套工具 LGPO.exe = Local Group Policy Object Utility,用于工作组 / 离线终端批量下发本地安全策略,无需 AD 域;
  2. 目录遍历风险链路:Web URL、PowerShell 本地 / 远程加载、WMI COM 对象、SMB 共享、DCOM RPC 均可通过../越权读取ntds.dit、cmdkey 凭据、MDF/LDF 数据库、系统驱动目录;
  3. 整体防御分层:内核文件系统加固 → 用户权限收紧 → AppLocker 加载管控 → Web/http.sys 防护 → 防火墙网络阻断 → 审计策略,全部可通过 LGPO 标准化打包批量部署。

二、前置准备:LGPO 工具获取与基础命令

1. 工具来源

微软安全合规工具包:Microsoft Security Compliance Toolkit,解压后提取LGPO.exe

2. 核心 LGPO 操作命令(管理员权限执行)

powershell
# 1. 导出当前主机基线(先备份原有策略)
LGPO.exe /b "C:\SecurityGPO\Backup_Baseline" /n "Original_System_Policy"

# 2. 导入完整GPO备份包(批量下发防御策略)
LGPO.exe /g "C:\SecurityGPO\Traversal_Defense_GPO"

# 3. 导入单条注册表防御配置(.txt LGPO文本)
LGPO.exe /t "C:\SecurityGPO\FileSystem_Hardening.txt"

# 4. 导入安全INF模板(NTFS ACL、用户权限分配)
LGPO.exe /s "C:\SecurityGPO\Secure_Dir_ACL.inf"

# 5. 导入高级审计CSV日志策略
LGPO.exe /ac "C:\SecurityGPO\Audit_Traversal.csv"

# 6. 应用后强制刷新策略并重启
LGPO.exe /g "C:\SecurityGPO\Traversal_Defense_GPO" /boot

三、分层 LGPO 防御策略、配置文件、导入示例

层级 1:内核文件系统加固(阻断本地目录跳转、符号链接遍历)

防御原理

开启 NTFS 路径访问强校验,关闭 8.3 短名称绕过,拦截 Junction / 符号链接../上层跳转,修复 CVE 路径泄露漏洞。

1. LGPO 文本 FileSystem_Hardening.txt

plaintext
Computer
Software\Policies\Microsoft\Windows NT\FileSystem
EnforceDirectoryChangeNotificationPermissionCheck=DWORD:1
NtfsDisable8dot3NameCreation=DWORD:1

2. LGPO 导入命令

powershell
LGPO.exe /t "C:\SecurityGPO\FileSystem_Hardening.txt"
配套组件:tcpip.sys、NTFS 文件系统,防止 WMI、INI 配置、PowerShell 本地加载触发目录遍历。

层级 2:收紧 SeChangeNotifyPrivilege(绕过遍历检查权限,核心权限防御)

风险点

默认所有已认证用户拥有SeChangeNotifyPrivilege,可无权限校验跳转上级目录,是本地目录遍历底层权限根源。

1. 安全模板 Secure_Privilege.inf(LGPO /s 导入)

inf
[Privilege Rights]
SeChangeNotifyPrivilege = *S-1-5-32-544,*S-1-5-19,*S-1-5-20
; S-1-5-32-544 Administrators
; S-1-5-19 LOCAL SERVICE
; S-1-5-20 NETWORK SERVICE
; 删除普通用户、Authenticated Users权限,彻底限制目录跳转

2. 导入命令

powershell
LGPO.exe /s "C:\SecurityGPO\Secure_Privilege.inf"

层级 3:AppLocker 应用控制(管控 Local Loading/Remote Loading,阻断脚本类遍历载荷)

防御逻辑

  1. 本地加载限制:仅允许C:\TrustedScripts可信目录执行 PS1,拒绝临时目录、下载目录脚本;
  2. 远程加载阻断:禁止 UNC/SMB、HTTP 远程脚本执行,拦截 SMB/URL 渠道下发遍历攻击载荷;
  3. 阻止 DLL Side-Loading 侧加载劫持,避免合法程序同目录恶意 DLL 遍历读取系统文件。

操作流程

  1. 在基准主机gpedit.msc配置完整 AppLocker 规则;
  2. 导出整套本地策略为 GPO 备份:
powershell
LGPO.exe /b "C:\SecurityGPO\Traversal_Defense_GPO" /n "AppLocker_Load_Restrict"
  1. 批量终端导入:
powershell
LGPO.exe /g "C:\SecurityGPO\Traversal_Defense_GPO"
关键策略项:
  • 脚本执行策略:仅RemoteSigned,拒绝未签名远程脚本;
  • AppLocker 脚本规则:Deny 所有%DOWNLOADS%、%TEMP%、\\* UNC 路径脚本;
  • DLL 规则:仅允许%WINDIR%\System32系统 DLL,拦截自定义目录 DLL 侧加载。

层级 4:PowerShell 执行策略 LGPO 配置(阻断远程 URL/SMB 加载遍历)

LGPO 文本 PS_ExecutionPolicy.txt

plaintext
Computer
Software\Policies\Microsoft\WindowsPowerShell
ExecutionPolicy=REG_SZ:RemoteSigned
导入:
powershell
LGPO.exe /t "C:\SecurityGPO\PS_ExecutionPolicy.txt"
作用:直接拦截Invoke-WebRequest、UNC 共享远程加载脚本,杜绝通过 PowerShell 发起路径遍历读取ntds.dit、cmdkey 凭据。

层级 5:IIS/http.sys Web 内核路径遍历防御(URL 路径穿越专项防护)

策略内容(管理模板,打包进 LGPO 备份)

  1. 启用 IIS 请求过滤,拦截../、%2e%2e编码遍历字符;
  2. 禁用 URL 双编码解析;
  3. 锁定站点物理根目录,http.sys 内核校验文件路径边界,跳出目录直接丢弃 TCP 报文;

导出与下发

在基准主机配置 IIS 本地策略后,整套打包进 LGPO 备份,批量导入终端服务器,防御网站 URL 目录遍历漏洞。

层级 6:NTFS 系统目录 ACL 锁死(即使遍历漏洞存在也无法读取敏感文件)

安全 INF 模板 SystemDir_Deny_ACL.inf

inf
[File Security]
"C:\Windows\System32\drivers",0,"D:(A;D;RX;;;AU)"
"C:\Windows\System32\config",0,"D:(A;D;R;;;AU)"
"C:\Windows\System32\ntds.exe",0,"D:(A;D;R;;;AU)"
导入命令:
powershell
LGPO.exe /s "C:\SecurityGPO\SystemDir_Deny_ACL.inf"
逻辑:对驱动、注册表配置、AD 工具目录设置拒绝 ACL,低权限账户 SID 完全无法读取,兜底防御目录遍历泄露敏感文件。

层级 7:防火墙网络策略(阻断隐蔽远程加载遍历渠道)

通过 LGPO 导入防火墙规则,封堵高危远程加载端口:
  1. 关闭 SMBv1、限制 445 共享端口;
  2. 限制 DCOM RPC 139/135 端口;
  3. 仅允许业务 80/443,拦截非常规 LDAP、DNS 隐蔽脚本下发;

导出防火墙策略进 LGPO 备份,批量终端统一下发。

层级 8:高级审计策略(监控所有目录遍历、异常加载行为)

审计 CSV Audit_Traversal.csv

开启:文件系统审核、进程创建审核、http.sys 访问日志、WMI 对象写入审计;
 
导入命令:
powershell
LGPO.exe /ac "C:\SecurityGPO\Audit_Traversal.csv"
作用:记录跨目录文件读取、PowerShell 内存加载、WMI 存储脚本、URL 遍历请求,快速告警攻击行为。

四、完整标准化 LGPO 部署流水线

  1. 基准主机配置
     
    gpedit.msc 依次配置:文件系统内核加固 → 用户权限 SeChangeNotifyPrivilege → AppLocker 加载管控 → PowerShell 策略 → IIS/http.sys 防护 → NTFS ACL → 防火墙 → 审计;
  2. 导出全套防御策略包
powershell
LGPO.exe /b "C:\GPO_Package\PathTraversal_Defense" /n "Workstation_Default_Security_Baseline"
  1. 离线终端批量下发
     
    将LGPO.exe+ 策略文件夹拷贝至目标主机,管理员执行:
powershell
LGPO.exe /g "C:\GPO_Package\PathTraversal_Defense" /boot
gpupdate /force
  1. 校验策略生效
powershell
# 查看本地策略结果
gpresult /h PolicyReport.html
# 校验http.sys、文件系统注册表参数
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem

五、配套关联组件全链路

plaintext
LGPO.exe 导入本地组策略(注册表/INF/审计/安全模板)
↓
分层防御:内核文件系统 + 用户权限 + AppLocker加载管控
    ↓
业务层:PowerShell Local/Remote Loading、IIS http.sys、WMI COM对象、Printbrm打印服务
    ↓
网络层:tcpip.sys TCP/UDP协议栈 + Realtek网卡(电口/SFP光纤)
安全身份层:SID账户权限、klist Kerberos票据、tpmvscmgr虚拟智能卡、ntds.dit域存储
审计层:Sysmon、http.sys访问日志、文件系统审核

六、LGPO 方案核心优势

  1. 无 AD 域依赖:工作组、离线工业主机、隔离终端均可标准化部署目录遍历防御;
  2. 多层闭环防护:内核权限→加载管控→Web 防护→文件 ACL→网络阻断→审计全链路封堵;
  3. 统一基线复用:一台主机配置完成后,LGPO 打包,百台终端一键导入,规避人工配置疏漏;
  4. 兼容所有遍历攻击渠道:本地内存脚本、SMB 远程、URL 网页、WMI 隐蔽加载、DLL 侧加载全覆盖拦截。

除 LGPO 本地组策略外,Windows 防御 Directory/Path Traversal(目录遍历)全维度方案

一、内核与文件系统底层加固(脱离组策略,注册表 / 命令直接固化防护)

1. 直接修改注册表强化 NTFS 路径校验

无需 LGPO,管理员执行注册表写入,拦截 8.3 短名、符号链接跳转遍历:
powershell
# 1. 关闭8.3短文件名(规避 ~1 路径绕过)
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name NtfsDisable8dot3NameCreation -Value 1 -Type DWord
# 2. 启用目录变更权限强校验,阻断Junction/软链接跨目录跳转
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name EnforceDirectoryChangeNotificationPermissionCheck -Value 1 -Type DWord
# 3. 启用RedirectionGuard(Win11内核防护,阻止路径穿越提权)
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name RedirectionGuardEnabled -Value 1 -Type DWord

2. 收紧SeChangeNotifyPrivilege(绕过遍历检查权限)

直接通过安全模板 INF 手动导入,不依赖 LGPO 批量包:
inf
[Privilege Rights]
SeChangeNotifyPrivilege = *S-1-5-32-544,*S-1-5-19,*S-1-5-20
cmd
secedit /configure /db secedit.sdb /areas USER_RIGHTS /cfg SecurePriv.inf
secedit /generate rollback /db secedit.sdb

3. NTFS ACL 手动收紧敏感目录(兜底防护)

即便程序存在遍历漏洞,低权限账号无读取权限,无法窃取ntds.dit、驱动、凭据文件:
powershell
# 拒绝普通用户读取系统驱动目录
icacls "C:\Windows\System32\drivers" /deny AuthenticatedUsers:(OI)(CI)(RX)
# 锁定注册表配置目录、凭据目录
icacls "C:\Windows\System32\config" /inheritance:r /grant Administrators:F /grant SYSTEM:F

二、Web 服务层独立防护(http.sys/ IIS 原生防护,和策略解耦)

1. IIS 请求过滤 + URL 重写(web.config 站点独立配置,不受本地策略约束)

每个网站独立部署拦截规则,拦截../、URL 编码变种%2e%2e:
xml
<security>
  <requestFiltering>
    <denyUrlSequences>
      <add sequence=".."/>
      <add sequence="%2e%2e"/>
    </denyUrlSequences>
  </requestFiltering>
<rewrite>
  <rules>
    <rule name="BlockTraversal" stopProcessing="true">
      <match url=".*"/>
      <conditions>
        <add input="{UNENCODED_URL}" pattern="(\.\./|\.\.\\)" />
      </conditions>
      <action type="CustomResponse" statusCode="403"/>
    </rule>
  </rules>

2. netsh http 锁定内核 URL 根目录

限制站点物理路径边界,http.sys 内核直接丢弃跳出根目录的请求:
cmd
netsh http add urlacl url=http://+:80/corp/ sddl="D:(A;;GA;;;S-1-5-21-xxxx-WebSvc)"

3. 独立部署 WAF(Web 应用防火墙)

硬件 WAF、软件 IIS WAF、云 WAF,在请求抵达本机http.sys前拦截带遍历特征的 URL 流量,属于网络前置防御。

三、代码开发层防御(从源头消除遍历漏洞,服务程序内置校验)

1. 标准路径归一化 + 基目录白名单校验(通用 C#/PowerShell/C++)

强制判断目标路径是否严格落在业务允许目录内,阻断../跳出:
powershell
function Test-SafePath {
    param($BaseDir, $UserInput)
    $baseFull = [IO.Path]::GetFullPath($BaseDir)
    $targetFull = [IO.Path]::GetFullPath(Join-Path $baseFull $UserInput)
    return $targetFull.StartsWith("$baseFull\")
}

2. ID 映射替代直接路径入参(彻底消除路径输入)

前端仅传递数字 ID,后端 SQL Server MDF 库映射真实文件路径,完全不拼接用户输入路径字符串。

3. 输入白名单过滤

仅放行字母、数字、下划线,直接拒绝. / \ 等路径控制字符。

4. 禁用危险 API

禁止直接拼接用户输入到文件读取、WMI、LDAP、UNC 接口;规避url.dll无校验读取远程文件。

四、应用加载管控(拦截携带遍历载荷的 Local/Remote Loading)

1. AppLocker 手动配置(不通过 LGPO 导出包,gpedit.msc 单独配置)

限制 PS1、DLL、EXE 加载路径:禁止从 Temp、Download、UNC 共享远程加载脚本,阻断远程下发遍历攻击载荷。

2. PowerShell 执行策略单机直接设置

powershell
# 拒绝所有未签名远程脚本,阻断SMB/HTTP远程加载遍历脚本
Set-ExecutionPolicy RemoteSigned -Force

3. 第三方白名单软件(替代系统策略)

如 Carbon Black、SentinelOne、火绒终端管控,自定义规则拦截内存脚本、DLL 侧加载、WMI 存储路径载荷。

五、网络层防护(前置拦截远程类目录遍历流量)

1. Windows 防火墙高级规则

封堵高危远程加载渠道:TCP445 (SMB)、TCP135 (DCOM)、TCP88 (Kerberos)、ICMP 隐蔽通道,阻断 LDAP/DNS TXT 远程下发遍历脚本。
powershell
# 阻止外部主动DCOM连接
New-NetFirewallRule -Name BlockDCOMIn -DisplayName "Block Inbound DCOM" -Direction Inbound -LocalPort 135 -Action Block

2. Realtek/Intel 网卡流量过滤、ECN 流量审计

监控 80/443/445 端口含../特征的数据包,告警异常远程加载行为。

3. 内网交换机 ACL、路由策略

跨机房前置阻断携带目录遍历载荷的 HTTP/SMB 流量,流量不抵达终端tcpip.sys。

六、身份与安全硬件配套防御(漏洞利用后无法读取敏感文件)

1. TPM 虚拟智能卡 tpmvscmgr 加密敏感文件

系统配置、数据库 MDF/LDF、凭据文件加密存储,即便遍历读取文件也无法解密内容。

2. cmdkey 凭据隔离 + klist Kerberos 会话限制

低权限进程无有效域票据,无法远程访问ldap://、SMB 文件服务器拉取遍历载荷。

3. 虚拟化隔离(Intel VT-x / AMD-V)

业务站点部署在独立虚拟机,虚拟机与宿主机磁盘完全隔离;开启 vTPM,防止虚拟机内路径遍历逃逸读取宿主机ntds.dit、系统驱动。

七、审计监控类防御(及时发现并阻断正在发生的遍历攻击)

1. Sysmon 自定义规则监控文件 / URL 异常访问

捕获跨目录读取、../ URL 请求、WMI 写入脚本、PowerShell 内存加载行为,实时告警。

2. 日志集中审计

  • http.sys/IIS 访问日志:筛选../、%2e%2e;
  • Windows 安全日志:监控 SeChangeNotifyPrivilege 权限调用、跨目录文件读取;
  • SQL Server 审计日志:监控文件下载接口 ID 异常跳转。

3. 终端 EDR/XDR 响应

检测到目录遍历行为时自动阻断进程、隔离主机、断开网卡网络。

八、AD 域组策略 GPO(域环境,区别于本地 LGPO)

LGPO 是单机本地策略;域环境可通过域 GPO 批量下发,作用域内所有主机:
  1. 域 GPO 统一推送文件系统加固、PowerShell 执行策略、AppLocker;
  2. 域ntds.dit管控计算机扩展属性,禁止存入路径遍历脚本载荷;
  3. 组策略首选项批量锁定系统目录 NTFS ACL。

九、方案分类汇总对比

防御分类 代表手段 是否依赖 LGPO 适用场景
文件系统底层 手动注册表、secedit 安全模板、icacls ACL 否 单机、无域离线设备
Web 站点独立防护 web.config、netsh http、独立 WAF 否 IIS 网站、内网 http.sys 业务
开发代码源头防护 路径白名单校验、ID 映射、输入过滤 否 自研程序、PowerShell 脚本
终端加载管控 手动 AppLocker、PowerShell 执行策略、EDR 否 阻止远程 / 本地脚本遍历载荷
网络前置防御 防火墙、交换机 ACL、网卡流量审计 否 全网前置拦截攻击流量
硬件虚拟化安全 VT-x/AMD-V 虚拟机隔离、tpmvscmgr 加密 否 服务器虚拟化、NAS 存储
审计响应防御 Sysmon、EDR、日志审计告警 否 实时发现并阻断攻击
域批量管控 AD 域 GPO(区别 LGPO) 否 大规模企业域设备

 

posted @ 2024-07-09 05:37  suv789  阅读(1402)  评论(0)    收藏  举报