目录遍历漏洞
漏洞挖掘之目录遍历漏洞 (baidu.com)
从0到1完全掌握目录遍历漏洞
0x01 什么是目录遍历漏洞
目录遍历漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露。
比如数据库备份文件、配置文件等,攻击者利用该信息可以为进一步入侵网站做准备。
简单来说,我个人认为目录遍历更像是一种 trick,是一种可以配合其他攻击一起使用的 trick,利用方法高于 CSRF 与 CORS。
早在最早接触的 dirb、御剑、Burpsuite 中的目录爆破工具,如果能扫出一些存在/存活的目录,其实就是目录遍历漏洞的一种。
-
总而言之,目录遍历这个漏洞是需要经常去摸一摸,探一探的。
-
存在资源的地方就极有可能存在目录遍历。
0x02 几种目录遍历攻击手段
首先要特别明确的一个点是,目录遍历的攻击基于操作系统。
基于操作系统,例如 Linux 操作系统下,cd ..命令是返回上一级目录。
-
../这个命令,贯穿了整个目录遍历攻击,也是目录遍历攻击的核心。
如果对方服务器是 Linux,攻击手段就是通过
../,这一个../将贯穿整个目录遍历攻击,
1. 在文件上传中利用目录遍历漏洞
靶场地址:WebGoat 靶场,目录遍历下的 PageLesson2
-
题目中简单描述了通过文件上传利用目录遍历漏洞
靶场界面

-
题目的要求,让我们讲图片上传至非本目录下。
-
本来要上传的目录是:/PathTraversal/user/tests 下,我们能够通过目录遍历的方式,将要上传的图片上传至其他目录。
已经 OS 为 Linux,所以使用../来完成目录遍历攻击,
利用 Burpsuite 抓包,将 “test” 修改为 “…/test”,也就是 /test 目录的上一级目录。

如图,修改成功,将头像上传至 /PathTraversal/user 目录下了。
2. 对网站上存在的资源点进行目录遍历攻击
-
网站上存在的资源点:比如图片这种资源,在请求图片的同时尝试目录遍历。
例如,图片资源所在的目录:
127.0.0.1/home/image
而在 127.0.0.1/home 下存在一个名为password.txt的文件,
image 通过 GET 请求获取参数,那么获取图片的 url 就是。
127.0.0.1/home/image?filename=1.jpg
当然,/home 根目录当然不会流出来。此时如果我们将 filename 的请求变成../1.jpg,请求就变成了
127.0.0.1/home/image?filename=../1.jpg
直接就访问到了 /home 这一目录下,所以此时,若我们把请求再构造一下,就不是那么简单的事情了,filename=../password.txt,请求就变成了
127.0.0.1/home/image?filename=../password.txt
接下来我们通过一道靶场再深化一下对已有资源点进行目录遍历的攻击方式
靶场地址:已有资源点的目录遍历
-
靶场要求我们搞到 /etc/passwd 这一文件
靶场界面如图所示

抓包,并点开图片,获取到图片的 GET 请求。并直接开始我们的目录遍历攻击。

目录遍历攻击成功,返回的是 400,说明服务器后台并未对目录遍历攻击作任何限制,但是并没有请求到资源,再往上一层试试。也就是../../。也失败了,不要着急,继续尝试。
终于在第三层的时候成功了!不容易啊……

本身 /etc/passwd 这一文件在 Linux 当中是非常重要的文件了
我们通过截图其实也很能体会到漏洞的可利用之处,非常之多,轻信息泄露,重 Getshell。
3. 对于 Zip 文件,在文件上传中,可以替代头像上传,并利用目录遍历
-
场景应用于文件上传界面,但同样也是一个非常特殊的点。早在之前人们并不重视这个情况的时候,Zip 文件可以作为文件上传。
-
攻击者可以利用
../来改变 Zip 包中某个文件的存放位置。
明明也算是文件上传的部分,但也要单独拉出来说道说道
Zip 文件在解压之后,在攻击者的精心设计之下,很有概率会覆盖服务器上原有的文件。举个例子,php 当中的 .htacess 文件就是最著名的文件上传的覆盖,若是覆盖了 .htacess 文件,那就出大事儿咯 ~
0x03 目录遍历普通防御的绕过方式
1. 对简单../的目录遍历防御
当服务器后台过滤../的时候,例如这段代码
return super.execute(file, fullName != null ? fullName.replace("../", "") : "");
此时因为输入的../会被处理,替换成空格。
那么我们通过双写绕过,也就是输入..././,它会被解析成 ==》../
成功绕过~
靶场地址: WebGoat Path Traversal PageLesson3
-
一般的防御手段的源码如图所示

绕过如图所示

2. GET 请求参数中不允许存在..与/
回顾一下之前的例子:对网站上存在的资源点进行目录遍历攻击。
此时我们请求资源是通过 GET 请求中的参数的,若参数中不允许存在..与/,较难进行目录遍历攻击,但总归还是有绕过方法的 ~
-
原理: 服务器后台在获取我们的参数值之后,会进行一次 url 编码,若只是单纯的对参数进行这种过滤,则可以通过 url 编码绕过。
-
payload
?filename=%2e%2e%2f/etc/passwd
%2e%2e ------> …
%2f ------> /
可以如此绕过。具体靶场可以看 WebGoat Path Traversal PageLesson5。
-
防御的源码如图所示

使用 url 编码绕过,

3. 当服务器只允许获取当前格式的资源
-
情景:若此时资源为图像,那么服务器只允许的请求是
?filename=图片格式的后缀。只有?filename=1.jpg才可以被请求。 -
绕过手段:空字节绕过
原本的 payload
?filename=../etc/passwd
因为服务器限制了请求的资源,所以此时必然会报错。
空字节绕过,也就是增添空格,因为空格后的内容都会被自动过滤。而空格对应的 hex 编码为 %20,所以我们构造新的 payload。
?filename=../etc/passwd%201.jpg<!--转换一下,也就是-->?filename=../etc/passwd 1.jpg
在空字节存在的情况下,空格后面的内容会直接被注释掉,就变成了这样。
?filename=../etc/passwd
绕过实现 GET ~ !
0x04 目录遍历的终极防御手段
-
前面讲了一些目录遍历存在的简单的防御手段,并不顶用,接下来我们介绍一下能够很好防御目录遍历的方法。
1. 限制用户输入的路径在某一个范围内。
2. 标准化所有字符
当用户请求访问文件/目录时,直接标准化所有字符,将所有字符转换成 url 编码,这样做之后,到了服务器手上不会解析成../,就不存在目录遍历了。
3. 验证用户的输入是否在白名单那内
也就是限制用户请求资源,对于少量的文件(例如都是图像),写正则表达式批量规范请求资源的白名单,这样可以做到完美防御目录遍历漏洞
相关文章:
目录遍历漏洞
漏洞挖掘之目录遍历漏洞 (baidu.com) 从0到1完全掌握目录遍历漏洞 0x01 什么是目录遍历漏洞 目录遍历漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露。 比如数据库备份文件、配置文件等,攻击…...
Python基础入门例程10-NP10 牛牛最好的朋友们
目录 描述 输入描述: 输出描述: 示例1 解答: 说明: 描述 牛牛有两个最好的朋友,他们的名字分别用input读入记录在两个字符串中,请使用字符串连接()帮助牛牛将两个朋友的名字依…...
html web前端,登录,post请求提交 json带参
html web前端,登录,post请求提交 json带参 3ca9855b3fd279fa17d46f01dc652030.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></t…...
防火墙实验
防火墙 ping(网络测试工具,测试主机之间的可达性)原理: 发送一些小的网络数据包(ICMP数据包)到目标主机,并等待目标主机返回一个响应(通常是回显应答 Echo Reply)。 ss…...
php中进程、线程、协程详细讲解
目录 一、什么是进程、线程、协程 1、什么是进程(Process): 2 、什么是线程(Thread): 3、什么是协程(Coroutine): 二、 进程、线程、协程的关系 1、进程与线程关系 …...
无线通信中SINR的含义
在无线通信中,SINR代表"Signal-to-Interference-plus-Noise Ratio",即信号与干扰加噪声比。这是一个重要的性能度量,用于评估和描述接收信号的质量,以及在无线通信系统中的通信性能。 SINR考虑了以下三个关键因素&…...
pnp单目相机标定测距
参考:opencv 单目相机pnp测距(Cpp)-CSDN博客...
Java反射获取内部类方法
Java反射获取内部类方法 结论一、案例准备二、测试方法:使用反射获取类的成员内部类和方法具体操作具体操作(使用getDeclaredClasses) 结论 Java 通过反射可以获得内部类,包括内部类属性信息和方法。 一、案例准备 创建了一个类…...
发挥服务器的无限潜能:创意项目、在线社区和更多
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏:…...
华为OD 绘图机器(100分)【java】A卷+B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
文件上传接口
以下是一个简单的Java文件上传接口的示例代码: import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.Requ…...
基于矢量控制策略的异步电机调速系统设计
摘 要 由于国内人民生活水平的提高,科技不断地进步,控制不断地完善,从而促使矢量控制技术在电气传动系统领域占据主导权,也使得交流异步电机调速控制系统被广泛应用。在交流异步电机调速系统设计领域中,矢量控制成为目…...
Ubuntu下载工具ip addr、ifconfig、ping、make
Ubuntu下载工具ip addr、ifconfig、ping、make ping 在 Ubuntu 上获取网络工具包通常是通过安装相关软件包的方式来完成的。Ubuntu 默认包含一些常见的网络工具,但如果你需要安装其他工具,你可以使用 apt 命令或者 snap 命令进行安装。以下是一些常见的…...
【数据结构】常见复杂度习题详解 ------ 习题篇
文章目录 📋前言一. ⛳️前篇回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5️⃣实例五6️⃣实例六7️⃣实例七8️⃣实例八 三. ⛳️常见空间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三 四. ⛳️总结 📋前言 …...
一、vue介绍
一、介绍 vue式前端框架,是一套用于构建用户界面的渐进式框架 1、安装vue 安装node.js(配置环境变量) https://nodejs.org/en/download/ 更换镜像 npm config set registry https://registry.npm.taobao.org 查看镜像 npm config get regi…...
Linux ARMv8 异常向量表
http://blog.chinaunix.net/uid-69947851-id-5830546.html 本章接着《Linux内核启动》部分讲解,我们知道了在进入start_kernel之前,通过指令adr_l x8, vectors;msr vbar_el1, x8设置了异常向量表,那么异常向量表的结构是怎么样…...
C++基类和派生类的内存分配,多态的实现
目录 基类和派生类的内存分配基类和派生类的成员归属多态的实现 基类和派生类的内存分配 类包括成员变量(data member)和成员函数(member function)。 成员变量分为静态数据(static data)和非静态数据&…...
C/C++基础
C 二进制 问题:二进制怎么表示整数、小数、正数、负数,如何存储?加减乘除怎么运算(见文章《计算机加减乘除本质》)? 变量 c定义一个变量的时候,需要事先定义变量大小和变量类型。 //有符号…...
MySQL基础练习题
数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…...
【C语言学习笔记 --- 动态内存管理】
C语言程序设计笔记---029 C语言之动态内存管理1、介绍动态内存管理2、动态内存函数的介绍2.1、malloc和free函数2.2、calloc函数2.3、realloc函数 3、动态内存管理过程中,一些常见的错误3.1、对NULL指针的解引用操作3.2、对动态内存开辟的空间的越界访问3.3、对非动…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
