目录遍历漏洞
漏洞挖掘之目录遍历漏洞 (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、对非动…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
