引言:什么是路径遍历?如何进行路径遍历攻击并规避常见防御?如何防止路径遍历漏洞。
1. 简介
路径遍历(Path Traversal)是一种安全漏洞,也被称为目录遍历或目录穿越、文件路径遍历。它发生在应用程序未正确验证用户提供的文件路径时,允许攻击者访问系统上的敏感文件或目录,甚至执行恶意代码。
2. 产生根因
路径遍历攻击通常利用应用程序对用户输入的路径或文件名的不充分验证(如包含跳转符../
)。攻击者可以通过在文件路径中添加特殊字符或符号来尝试访问超出其授权范围的文件或目录。攻击者可能会利用此漏洞来获取敏感信息、执行任意代码或破坏系统的完整性。
上图中可以看到文件路径中包含了"../../etc/passwd"
,且网站应用未对其作校验,导致了服务器的敏感文件直接泄露给攻击者。
3. 攻击面
- 用户指定文件名;
- 能够使用绝对路径或相对路径等形式来指定其他目录的文件名;
- 未充分校验是否允许访问拼接后的文件名;
4. 主要危害
- 任意用户可访问系统敏感文件,泄露重要信息;
- 推断服务器目录结构,便于后续攻击;
- 篡改或删除Web服务器中的文件,如删除文件来让服务器空宕机、篡改脚本文件来控制服务器或篡改网页内容,诱导用户访问恶意网站;
5. 防御方法
以下是一些常见的路径遍历攻击防御措施和防范方法:
-
输入验证和过滤:应用程序应该对用户提供的输入进行严格的验证和过滤,以确保输入的路径或文件名只包含预期的字符和结构。可以使用白名单验证来限制输入的字符集,并删除或转义可能导致路径遍历的特殊字符,如
目录跳转符../、~/,字符截断符%00、dir命令
。 -
使用安全的文件操作函数:在处理文件和路径时,应使用安全的文件操作函数,如绝对路径而不是相对路径,以确保访问的文件或目录是预期的。避免使用可被滥用的函数,如
"../"
或".."
。 -
限制访问权限:确保应用程序的文件和目录权限设置正确,只允许授权用户或进程访问需要的文件和目录。避免对公共目录或敏感文件设置过宽松的权限。
-
沙盒环境:将应用程序运行在沙盒环境中,以限制其访问系统资源和文件的能力。这可以减轻路径遍历攻击的潜在影响。
-
安全编程实践:采用安全编程实践,如使用安全的开发框架、库和工具,进行代码审查(避免通过异常信息将内部错误信息泄露)和漏洞扫描,以及及时修复已知的安全漏洞。
综上所述,防止路径遍历漏洞的关键是进行严格的输入验证和过滤,使用安全的文件操作函数,限制访问权限,运行在沙盒环境中,并采用安全的编程实践。这些措施可以降低路径遍历攻击的风险,并提高应用程序的安全性。
6. 参考
[1] https://portswigger.net/web-security/file-path-traversal
推荐阅读:
「 典型安全漏洞系列 」05.XML外部实体注入XXE详解
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解