目录遍历漏洞
漏洞挖掘之目录遍历漏洞 (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、对非动…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
