Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
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注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
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年9月10日 18:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码