WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
25-路径遍历
浏览
1
## 概述 路径遍历漏洞,又称 “目录遍历漏洞”,其核心原理是攻击者通过操纵用户可控的输入参数(如文件名、路径参数),构造特殊的路径字符串(如../、..\),绕过应用程序的预期访问范围,读取或操作服务器上未授权的文件 / 目录,例如敏感配置文件、系统文件、数据库凭证等。 路径遍历漏洞的本质是 “用户输入未被有效控制,导致路径超出预期范围”。 ## 漏洞原理 Web 应用常需要读取服务器上的文件(如静态资源、配置文件、模板文件等),若应用直接将用户输入的参数拼接为文件路径,且未对输入进行严格过滤 / 校验,攻击者就能利用路径跳转符号(如../,表示 “返回上级目录”)突破预期的目录限制。 不同操作系统的路径分隔符不同,对应的跳转符号也有差异: | 操作系统 | 路径分隔符 | 上级目录符号 | 示例(跳 1 级上级目录) | | ---------- | ---------- | ------------ | ------------------------ | | Linux/Unix | / | ../ | ./page.php → ../page.php | | Windows | \ 或 / | ..\ 或 ../ | ./page.php → ..\page.php | 例如: ```php <?php // 用户通过URL参数指定要查看的模板文件 // 例如:https://example.com/view.php?template=welcome.html $template = $_GET['template']; include('/var/www/html/templates/' . $template); ?> ``` ## 漏洞危害 路径遍历漏洞的危害程度取决于服务器权限配置和攻击者的目标,主要包括: 读取敏感文件:获取系统配置(如/etc/config)、数据库账号密码(如./config/database.php)、用户数据(如./data/user.db)等; 执行恶意代码:若结合 “文件上传漏洞”(攻击者先上传恶意脚本,再通过路径遍历包含该脚本),可实现远程代码执行(RCE); 破坏文件系统:若应用有写入权限,攻击者可能构造路径删除 / 修改服务器上的关键文件(如删除系统日志、篡改网页内容); 信息泄露:即使无法读取敏感文件,也可能通过遍历目录获取文件列表,为进一步攻击提供信息。 ## 防护措施 防御路径遍历的核心是严格控制用户输入对文件路径的影响,避免直接拼接输入,优先采用 “白名单” 和 “安全路径处理”: > 1. 输入验证与过滤 - 过滤危险字符:严格禁止或移除输入中的../、..\、/、\、%00(空字符)、..//(重复分隔符)等符号; - 限制输入长度:避免过长的路径输入(如限制filename参数长度不超过 50 字符); - 禁止绝对路径:若输入为文件名,禁止包含绝对路径(如/etc/passwd、C:\Windows\system32)。 > 2. 采用白名单机制 最安全的方式是只允许访问预设的合法文件 / 目录,拒绝所有不在白名单内的请求。 > 3. 使用安全的路径处理 API 利用编程语言提供的 “真实路径解析” 函数,将用户输入的路径转换为服务器上的绝对真实路径,再校验是否在允许的目录范围内: - Linux/PHP:realpath()(解析路径中的../,返回绝对真实路径); - Java:java.nio.file.Paths.get(baseDir, userInput).toRealPath(); - Python:os.path.abspath(os.path.join(baseDir, userInput))。 > 4. 限制文件权限 - 降低 Web 服务进程的权限:例如,让 Nginx/Apache 以 “普通用户”(而非root/Administrator)运行,该用户仅能访问 Web 应用必需的目录(如./www),无法访问/etc、/root等系统目录; - 禁止写入权限:对仅需读取的目录(如./templates),移除 Web 进程的写入权限,防止攻击者修改文件。 > 5. 避免暴露文件路径 - 不返回详细错误信息:若文件不存在,避免返回 “文件路径不存在” 等提示(如Warning: include(./templates/../../etc/passwd.php): failed to open stream),防止攻击者通过错误信息推断目录结构; - 用 “标识” 替代真实路径:例如,用user_id=123替代直接传递filename=123.jpg,应用内部通过user_id映射到真实文件路径(如123→./uploads/avatars/123.jpg),完全隐藏真实路径。 防御的关键不是依赖单一的 “字符过滤”,而是结合白名单机制、真实路径校验、权限控制,从 “源头” 限制文件访问范围,彻底切断攻击者 “跳出” 预期目录的可能。 ## 实验 靶机地址:https://portswigger.net/web-security/file-path-traversal/lab-simple 任务:检索文件的内容/etc/passwd。 1、访问靶机,类似于购物网站。  2、点击任意商品详情,抓取数据包,发现图片image直接传入的图片。  3、将数据包发送到repeater中,点击send,直接返回了图片地址。  4、修改filename=的参数值,读取成功。 
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~