Web安全
计算机网络
物理层
数据链路层
网络层
运输层(传输层)
应用层
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入概述
07SQL 注入类型
08SQL注入 Labs
08SQL注入速查表
09XSS
09XSS【概述版】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
小程序
小程序抓包
SessionKey
Appsecret与access_token
openid
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
身份认证(Authentication)
授权(Authorization)
单点登录(SSO)
零信任(ZTA)
分布式身份(DID)
-
+
首页
25路径遍历
## 概述 路径遍历漏洞,又称 “目录遍历漏洞”,其核心原理是攻击者通过操纵用户可控的输入参数(如文件名、路径参数),构造特殊的路径字符串(如../、..\),绕过应用程序的预期访问范围,读取或操作服务器上未授权的文件 / 目录,例如敏感配置文件、系统文件、数据库凭证等。 路径遍历漏洞的本质是 “用户输入未被有效控制,导致路径超出预期范围”。 ## 漏洞原理 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=的参数值,读取成功。 
毛林
2025年10月27日 18:00
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码