【Portswigger 学院】路径遍历

路径遍历(Path traversal)又称目录遍历(Directory traversal),允许攻击者通过应用程序读取或写入服务器上的任意文件,例如读取应用程序源代码和数据、凭证和操作系统文件,或写入应用程序所访问或控制的文件,改变应用程序的行为,甚至接管服务器。

原理

假设一个购物应用程序用下面的标签展示一个图片文件的内容:

<img src="/loadImage?filename=218.png">

通过 filename 参数指定读取 218.png 文件的内容,218.png 是一个文件的名称,既然是文件,那么就必然有一个目录,该文件所在的目录也许在代码中被定义为 /var/www/images/,那么实际读取就是 /var/www/images/218.png 文件的内容。

然而,fiilename 参数是用户可控的,如果这个参数没有做任何路径遍历的防御,那么攻击者可以将其篡改为 ../../../etc/passwd,此时读取的文件是 /var/www/images/../../../etc/passwd,即 /etc/passwd,这是包括一个 Linux 系统所有用户的文件。如此,攻击者便知道了该 Linux 服务器存在哪些用户。

不仅限于 Linux, Windows 可用 ../ 或 ..\ 来实现路径遍历,例如:

https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini

实验

实验说明:

 其中说到产品图片展示存在一个路径遍历漏洞,利用它读取 /etc/passwd 就能完成实验。

进入实验场景:

随便点进一个产品,F12 查看网页源代码,发现图片展示的内容是通过操纵一个 filename 参数来实现:

把这个值复制出来访问,并修改 filename 参数值为 ../../../../etc/passwd 就能读取到 /etc/passwd 文件的内容:

常见的路径遍历防御和绕过

根目录开头

应用程序过滤 ../ 或 ..\,并且如果 filename 是相对路径,那么就在前面追加一个目录路径,如果是绝对路径,那么就不追加。此时,可尝试篡改 filename 为 /etc/passwd,也就是直接以根目录 / 开头,或许应用程序就不再在 filename 前面追加已定义好的工作目录,而是直接读取 /etc/passwd。

嵌套路径遍历序列

应用程序可能只过滤一次 ../ 或 ..\ 序列,那么可尝试类似于 ....// 或  ....\/ 的嵌套序列。

在测试的过程中,可以输入一次 ../ 加文件名看看是否读取到不加 ../ 同样的内容,比如 /image?filename=../30.jpg:

读取到的文件内容与 /image?filename=30.jpg 一模一样,那说明应用程序存在对 ../ 的过滤。此时,尝试嵌套 ../ 序列,比如 /image?filename=....//....//....//etc/passwd:

经过 URL 编码的路径遍历序列

有时候,应用程序会过滤 ../ 或 ..\,那么可以尝试先用 URL 编码处理一次或两次,比如 ../ 一次 URL 编码后是 %2e%2e%2f,两次编码是 %252e%252e%252f。

burpsuite 提供了两个路径遍历的 FUZZ 字典:Fuzzing - path traversal  Fuzzing - path traversal(single )

每个路径都有一个 {file} 占位符,可以利用下面的 Payload processing 功能把它替换为空或者想访问的文件,比如 etc/passwd。另外,因为这两个字典的路径已经包含经过 URL 编码的,所以还要取消 burpsuite 对 payload 的 URL 编码默认处理:

下图是字典攻击的效果:

字典中每个路径的 {file} 都被替换成 etc/passwd,有双重编码 / 的,也有不经过编码处理的。利用这两个字典 FUZZ 路径遍历漏洞可以囊括大部分的 payload 了。

基础目录路径匹配

有些应用程序要求用户提供的参数的格式是“目录路径+文件名”,而目录路径必须是符合要求,比如必须是 /var/www/images,这种防御仍然可以用 ../ 或 ..\ 序列绕过。如图:

filename 的值是目录路径 /var/www/images/ 加文件名 20.jpg,如果想直接读取 /etc/passwd,应用程序不允许:

要求 filename 必须以 /var/www/images 开头。

利用 ../ 绕过:

空字节截断

有些应用程序要求 filename 必须以某种后缀名结尾,比如 .png,那么可尝试空字节截断,例如 filename=../../../etc/passwd%00.png。

防御

最安全的防御就是不使用用户提供的 filename 作为文件系统函数的参数,如果无法避免,下面是推荐的处理步骤:

  1. 验证用户输入的 filename 是否在白名单中。如果无法设置一个明确允许访问的文件路径白名单,就设置一个允许出现在 filename 参数值的字符白名单,至少不包括 . / \
  2. 验证完用户输入的 filename,在 filename 前面添加基础目录的路径,然后用函数规范化路径,最后验证规范化后的路径的基础目录是否满足预先的要求。

关于第二点,所谓规范化路径,就是去除 ../ 或 ..\ 序列,比如一个 filename 追加基础目录的路径后其值是 /var/www/images/../../../etc/passwd,规范化处理后得到的路径是 /etc/passwd。

得到规范化路径后,就验证它是否符合预先要求的基础目录,比如 /etc/passwd 就不符合预先要求的 /var/www/images,应当视这次请求为恶意请求,拒绝继续处理。

以下是防御路径遍历漏洞的示例代码:

File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
    // process file
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/767237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

API Object设计模式

API测试面临的问题 API测试由于编写简单&#xff0c;以及较高的稳定性&#xff0c;许多公司都以不同工具和框架维护API自动化测试。我们基于seldom框架也积累了几千条自动化用例。 •简单的用例 import seldomclass TestRequest(seldom.TestCase):def test_post_method(self…

GDB 远程调试简介

文章目录 1. 前言2. GDB 远程调试2.1 准备工作2.1.1 准备 客户端 gdb 程序2.1.2 准备 服务端 gdbserver2.1.3 准备 被调试程序 2.2 调试2.2.1 通过网络远程调试2.2.1.1 通过 gdbserver 直接启动程序调试2.2.1.2 通过 gdbserver 挂接到已运行程序调试 2.2.2 通过串口远程调试2.2…

紫鸟浏览器搭配IPXProxy代理IP的高效使用指南

​紫鸟指纹浏览器一款专门为跨境电商而生的防关联浏览器&#xff0c;能够帮助跨境电商卖家解决多店铺管理问题。紫鸟指纹浏览器为跨境电商卖家提供稳定的登录环境&#xff0c;并且搭配IP代理&#xff0c;能够解决浏览器指纹记录问题&#xff0c;提高操作的安全性。那如何利用紫…

广州AI绘图模型训练外包定制公司

&#x1f680;设计公司如何借助AI人工智能降本增效&#xff0c;广州这家AI公司值得借鉴— 触站AI&#xff0c;智能图像的创新引擎 &#x1f31f; &#x1f3a8; 触站AI&#xff0c;绘制设计界的未来蓝图 &#x1f3a8;在AI技术的浪潮中&#xff0c;触站AI以其前沿的AI图像技术…

RK3568驱动指南|第十六篇 SPI-第188章 mcp2515驱动编写:复位函数

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Redux 使用及基本原理

什么是Redux Redux 是用于js应用的状态管理库&#xff0c;通常和React一起用。帮助开发者管理应用中各个组件之间的状态&#xff0c;使得状态的变化变得更加可预测和易于调试。 Redu也可以不和React组合使用。&#xff08;通常一起使用&#xff09; Redux 三大原则 单一数据源…

在uni-app使用vue3使用vuex

在uni-app使用vue3使用vuex 1.在项目目录中新建一个store目录&#xff0c;并且新建一个index.js文件 import { createStore } from vuex;export default createStore({//数据&#xff0c;相当于datastate: {count:1,list: [{name: 测试1, value: test1},{name: 测试2, value: …

从hugging face 下模型

支持国内下载hugging face 的东西 下模型权重 model_id 是红色圈复制的 代码 记得设置下载的存储位置 import os from pathlib import Path from huggingface_hub import hf_hub_download from huggingface_hub import snapshot_downloadmodel_id"llava-hf/llava-v1…

Swift 中强大的 Key Paths(键路径)机制趣谈(下)

概览 在上一篇博文 Swift 中强大的 Key Paths(键路径)机制趣谈(上)中,我们介绍了 Swift 语言中键路径机制的基础知识,并举了若干例子讨论了它的一些用武之地。 而在本文中我们将再接再厉,继续有趣的键路径大冒险,为 KeyPaths 画上一个圆满的句号。 在本篇博文中,您将…

C++:二维数组的遍历

方式一&#xff1a; #include <vector> #include <iostream> int main() { // 初始化一个2x3的二维向量&#xff08;矩阵&#xff09; std::vector<std::vector<float>> matrix { {1.0, 2.0, 3.0}, // 第一行 {4.0, 5.0, 6.0} // 第二行 };…

企业备份NAS存储一体机

企业文件服务器上的数据、员工电脑里的数据以及NAS存储内数据&#xff0c;需要及时备份&#xff0c;Inforternd存储设备内置了强大的备份服务器功能&#xff0c;无需额外费用&#xff0c;就能轻松将重要数据备份至安全可靠的存储空间中。 无论是GS或GSe 统一存储产品&#xff0…

开放式耳机怎么选?五大2024年口碑销量爆棚机型力荐!

在选购开放式耳机的时候&#xff0c;我们总会因为有太多的选择而陷入两难&#xff0c;又想要一个颜值比较高的&#xff0c;又想要同时兼顾性能还不错的&#xff0c;所以作为测评博主&#xff0c;今天我们就给大家带来自己的一些选购技巧和自己觉得还不错开放式耳机&#xff0c;…

不同行业如何选择适合自己行业的项目管理工具?

在当今的信息化时代&#xff0c;项目管理软件已成为各行各业不可或缺的工具。然而&#xff0c;由于各行业具有不同的特点和需求&#xff0c;因此选择合适的项目管理软件成为了一个重要问题。本文将探讨不同行业在选择项目管理软件时需要考虑的因素&#xff0c;希望能帮助大家更…

python-图像模糊处理(赛氪OJ)

[题目描述] 给定 n 行 m 列的图像各像素点的灰度值&#xff0c;要求用如下方法对其进行模糊化处理&#xff1a; 1. 四周最外侧的像素点灰度值不变。 2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均&#xff08;四舍五入&#xff09;输入&#xff…

安卓微商大师V3.4.0/高级版一键群发僵尸粉检测

一款高效获取客源&#xff0c;备受好评的微商工具&#xff0c;资源丰富&#xff0c;秒速获得客源&#xff0c;大量群客源&#xff0c;都是散客&#xff0c;携手创业&#xff0c;是做微商生意的首选工具。打开即是黑钻高级会员 赶快体验吧 很强大 链接&#xff1a;https://pan.…

针对 Windows 10 的功能更新,版本 22H2 - 错误 0xc1900204

最近想帮女朋友生win11发现她电脑安装更新总是卡到安装%10这里失败 原来是安装路径被修改过了&#xff0c;改回c盘 win R → 输入regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

分布式日志采集 Loki 配置及部署详细

分布式日志采集 Loki 配置及部署详细 Loki 部署模式Loki 读写分离部署配置Loki 配置大全 Loki 部署模式 &#xff08;1&#xff09;可扩展部署模式 Loki 的简单可扩展部署模式是最简单的部署方式、首选方式。可扩展到每天几TB的日志&#xff0c;但是如果超出这个范围&#xff…

线下生鲜蔬果店做小程序有什么方法

生鲜蔬果是生活所需&#xff0c;大小商家众多&#xff0c;零售批发各种经营模式&#xff0c;小摊贩或是超市门店都有着目标客户或准属性群体。竞争和获客转化也促进着商家寻找客源和加快线上进程。 尤其是以微信社交为主的私域场景&#xff0c;普客/会员都需要精细化管理营收和…

WebSocket解决方案(springboot 基于Redis发布订阅)

WebSocket 因为一般的请求都是HTTP请求&#xff08;单向通信&#xff09;&#xff0c;HTTP是一个短连接&#xff08;非持久化&#xff09;&#xff0c;且通信只能由客户端发起&#xff0c;HTTP协议做不到服务器主动向客户端推送消息。WebSocket确能很好的解决这个问题&…

携手共筑爱的桥梁:引导接纳自闭症同学

在孩子的班级中&#xff0c;当自闭症儿童成为我们共同的一员时&#xff0c;作为老师和家长&#xff0c;我们肩负着特别的责任——引导孩子们以开放的心态接纳、善待并关爱他们。 首先&#xff0c;我们要以身作则&#xff0c;展现接纳与尊重。无论是老师还是家长&#xff0c;都…