当前位置: 首页 > news >正文

【网络安全的神秘世界】目录遍历漏洞

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具

先来了解两个概念:

身份认证:验证用户或者系统身份的过程,确保他们所声明的身份是真实的访问控制:判断该用户是否被允许执行或访问所请求的资源

常见的访问控制漏洞有 ”水平越权、垂直越权、未授权访问、目录遍历“ 四种

  • 水平越权:同级别用户之间的越权
  • 垂直越权:普通用户能拥有管理员用户的权限
  • 未授权访问:原本应该登陆后才能访问到的资源 ,在不登陆的情况下也可以直接访问
  • 目录遍历:…没做好过滤

一、概述

1.1 漏洞介绍

目录遍历(Directory traversal),也称文件路径遍历、目录穿越、路径穿越等。是由于网站本身存在配置缺陷,导致网站目录可以被任意浏览,从而使得攻击者可以访问到原本不具备权限访问的内容,造成信息泄露,为攻击者实施进一步的网络入侵提供帮

1.2 漏洞原理

一般来说,网站会有对服务器文件进行读取查看的功能,大多会用到提交的参数来指明文件名,比如:

# test.jpg是本身存在于服务器上的http://www.magedu.com/getfile=test.jpg

当服务器处理传送过来的test.jpg文件名时,会自动添加完整路径,比如:

c://site/hack/test.jpg

随后将读取到的内容返回给用户

初看,这只是文件交互的一种简单的过程,但是由于用户输入的文件名可以任意更改且服务器支持“~/”、“…/”等目录跳转符,而网站在实现上又没有过滤用户输入的目录跳转符,从而导致攻击者可以拼接路径来遍历服务器上的目录或者文件,造成目录遍历漏洞

在文件名中添加 ..\

http://www.magedu.com/getfile=..\..\..\windows\win.ini

服务器再次处理传送过来的 ..\..\..\windows\win.ini 文件名,自动添加完整路径

c://site/hack/..\..\..\windows\win.ini

读取到windows操作系统的配置文件

1.3 文件包含和目录遍历的区别

  • 从技术层面上看:文件包含漏洞是通过include、require、read等函数把文件读取到当前路径内并进行加载和解析,而且目录遍历漏洞则是中间件配置不完善引发的问题,可以读取查看,一般不具备解析功能
  • 从URL表现来看:文件包含中url = 后面的内容通常是文件名,而目录遍历中url = 后面的内容不一定是文件名,也有可能是路径
  • 从内容表现来看:文件包含造成的信息泄露,泄露的信息是展示在HTML中,而目录遍历引发的泄露可能是泄露文件自身
  • 从攻击效果来看:文件包含可以实现Getshell,目录遍历则是造成信息泄露

二、如何发现目录遍历漏洞

关于目录遍历漏洞,主要有两种测试方式:手工测试和使用自动化扫描器

2.1 手工测试

  • 可能存在目录遍历漏洞的业务场景:尝试寻找对服务器的文件有读取查看的功能点,比如文件上传和导入、文件下载和导出、文件删除、文件解压、加载图片等

    #存在关键字,和文件包含关键字一样?page/file=
    
  • 直接访问网站的各种目录(不加文件名和参数),如果以非HTML文件的形式显示了该目录下的文件或者目录信息,证明存在该漏洞

    在这里插入图片描述

2.2 自动化扫描

主流web漏洞扫描工具都支持目录遍历漏洞的自动化测试,比如AWVS、DirBuster等

三、常见的绕过

3.1 绝对路径绕过

应用程序禁用了目录跳转符如 ../ ,直接换成绝对路径即可实现绕过

../../../etc/passwd ===> /etc/passwd

3.2 双写绕过

应用程序通过正则匹配目录跳转符然后清除,但是仅清楚一次,所以利用双写即可实现绕过

../../../etc/passwd ===> ..././..././..././etc/passwd

3.3 编码绕过

应用程序通过正则匹配 / 然后清除,可以对斜杠 / 进行URL编码变成 %2f ,避免被匹配到,即可实现绕过。但是这种绕过方法有使用前提,编码后的 %2f 到了后端会再进行一次解码,还原成斜杠 / 本身

../../../etc/passwd ===> ..%2f..%2f..%2fetc%2fpasswd

3.4 加密参数绕过

应用程序对文件名加密后再提交,比如:downfile.php?filename=bWFnZWR1LmpwZw==,在参数filename使用base64加密,而攻击者想要绕过,只需要将构造好的路径文件进行base64加密后再附加提交即可

所以说应用程序采用一些有规律或者轻易识别的加密方式,也是存在风险的

../../../etc/passwd ===> Li4vLi4vLi4vZXRjL3Bhc3N3ZA==

3.5 预期路径绕过

应用程序仅检测路径的开头部分是否预期路径,如果是则允许通过

起始预期路径+相对路径的方法进行绕过

../../../etc/passwd ===> /var/www/html/../../../etc/passwd

3.6 00截断绕过

应用程序在读取前,会对提交的文件后缀名进行检测,可以通过在文件名后放一个空字节编码(%00)来绕过文件类型检测

../../../etc/passwd ===> ../../../etc/passwd%00.jpg

四、pikachu演示

4.1 源码分析

在这里插入图片描述

如上图,代码的逻辑是从Get请求中提取title参数作为$filename的值,然后使用require语句加载 $filename并执行,这一过程没有进行任何过滤从而导致目录遍历漏洞的产生

因为用到了require(),所以既可以做文件包含也可以目录遍历

4.2 漏洞演示

http://pikachu/vul/dir/dir_list.php?title=..\..\..\windows\win.ini

在这里插入图片描述

五、防御方法

  • 输入验证与过滤:检查输入中是否包含特殊字符或路径分隔符,并拒绝包含不可信内容的输入

  • 白名单:限制允许访问的文件或目录,预先定义路径

  • 安全文件路径处理:在构造文件路径时,避免直接拼接用户提供的输入。建议使用安全的文件路径处理函数或库

  • 权限控制:确保文件的访问权限设置正则

  • 安全编程实践:开发人员应遵循安全编程实践,并对用户输入进行充分的验证、过滤和转义。不可信的用户输入应该被视为潜在的目录遍历攻击

    目前常见的存在目录遍历漏洞的中间件及其修复方式如下:

    IIS 
    关闭目录浏览功能,在IIS的网站属性中,勾去“目录浏览”选项,重启IISApache
    关闭目录浏览功能,打开Apache配置文件http.conf,查找“Options IndexesFollSymLinks",修改为”Options -IndexesFollSymLinks"(减号表示取消),保存并退出,重启ApacheNginx
    默认不开启目录浏览功能,若发现开启了该功能,可以编辑nginx.conf文件,删除如下两行:
    autoindex on;
    autoindex exact size on;
    重启Nginx
    

相关文章:

【网络安全的神秘世界】目录遍历漏洞

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 先来了解两个概念: 身份认证:验证用户或者系统身份的过程,确保他们所声明的身份是真实的…...

使用 SpringBoot 基础web开发的支持

首先导入项目相关的依赖&#xff1a; pom.xml 文件&#xff1a; 导入相关项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…...

nature reviews genetics | 细胞互作和通讯方法总结

–https://doi.org/10.1038/s41576-023-00685-8 The diversification of methods for studying cell–cell interactions and communication 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和研究单位 细胞间相互作用的前沿进展&#xff1a;从转…...

AI 浪潮中的一体化数据库|外滩大会之OceanBase实录

2024 年 9 月 5 日至 7 日&#xff0c;在上海黄浦世博园区&#xff0c;“2024 Inclusion 外滩大会”盛大举行。期间&#xff0c;9月6日&#xff0c;由OceanBase携手赛迪顾问共同策划并主办了 “AI浪潮中的分布式数据库&#xff1a;探索行业增长新动能与关键业务负载实践”。本…...

Qt自定义按键实现长,短按

本文介绍Qt自定义按键实现长&#xff0c;短按。 Qt触摸屏应用有时会涉及到触摸屏按钮长&#xff0c;短按操作&#xff0c;如长按实现关机操作&#xff0c;本文基于普通QPushButton为基类&#xff0c;自定义按键实现长&#xff0c;短按操作。 1.定义新类 这里以QPushButton为…...

禁用win10的自动更新功能

禁用win10自动更新的方法&#xff1a; 方法1&#xff1a;系统设置 开始->设置&#xff08;win i&#xff09;->更新和安全->高级选项->暂停更新&#xff08;只能暂停35天&#xff09; 方法2&#xff1a;服务 开始->运行&#xff08;win r&#xff09;->s…...

机器学习 第12章 计算学习理论

目录 基础知识PAC学习有限假设空间可分情形不可分情形 VC维稳定性 基础知识 计算学习理论研究的是关于通过"计算"来进行"学习"的理论&#xff0c;即关于机器学习的理论基础&#xff0c;其目的是分析学习任务的困难本质&#xff0c;为学习算法提供理论保证…...

【雅特力AT32】外部中断事件控制器EXINT(附源码解析)

基础概念弄懂了之后&#xff0c;对于实际开发中断初始化流程和寄存器查阅是很重要的。 1.EXINT介绍 2.功能描述和配置流程 中断初始化流程☆ ​ 1>选择中断源 ​ 2>选择触发方式 ​ 3>使能中断或事件 ​ 4>产生软件触发 ​ 中断清除流程 ​ 其他注意点 3.EXINT寄存…...

Redis集群_cluster

cluster集群 cluster翻译就是集群&#xff0c;所以cluster集群也叫做redis集群相比于哨兵模式&#xff0c;cluster集群能支持扩容&#xff0c;并且无需额外的节点来监控状态&#xff0c;所以使用这种模式集群的系统会用的更多些redis cluster采用的是去中心化网络拓扑架构&…...

jdk相关介绍

JDK&#xff0c;全称Java Development Kit&#xff0c;是Java语言开发的基础工具包。它包含了Java运行时环境&#xff08;JRE&#xff09;以及用于开发Java应用程序的各种工具和库。JDK为Java程序员提供了编译、调试和运行Java应用程序所需的全部环境。 JDK的主要组成部分包括&…...

【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline

【RAG框架】GoMate&#xff1a;RAG Framework within Reliable input,Trusted output 【项目链接】&#xff1a;https://github.com/gomate-community/GoMate 一、赛题背景 RAG&#xff08;检索增强生成&#xff09;是一种结合了检索模型和生成模型的技术&#xff0c;它通过检…...

2024/9/15 408“回头看”之应用层小总结(下)

域名系统DNS: 本地域名服务器 本地域名服务器起着代理的作用&#xff0c;会将报文转发到根域名服务器、顶级域名服务器、权限域名服务器。 递归查询&#xff1a; 迭代查询&#xff1a; 文件传送协议FTP: FTP客户和FTP服务器之间使用的是tcp连接。 控制连接使用21端口&…...

经纬恒润高压电池管理系统,助力新能源汽车飞速发展

随着新能源汽车行业的快速发展&#xff0c;电池管理系统作为关键技术之一&#xff0c;其重要性日益凸显。经纬恒润自主研发的高压电池管理系统&#xff08;Battery Management System&#xff0c;BMS&#xff09;&#xff0c;凭借卓越的性能与先进的技术&#xff0c;在新能源汽…...

一文速通calcite结合flink理解SQL从文本变成执行计划详细过程

文章目录 你可以学到啥测试代码背景知识SQL转变流程图问题 你可以学到啥 SQL如何一步步变成执行计划的有哪些优化器&#xff0c;哪些优化规则calcite 和flink 如何结合的 测试代码 EnvironmentSettings settings EnvironmentSettings.inBatchMode(); TableEnvironment tabl…...

spring-TransactionTemplate 编程式事务

TransactionTemplate 是 Spring 框架提供的用于管理事务的一种方式。它提供了一种编程式的事务管理方法&#xff0c;允许开发者在代码中显式地控制事务的开始、提交或回滚。与使用 Transactional 注解相比&#xff0c;TransactionTemplate 提供了更多的灵活性和控制力。 为什么…...

中考全国45套(全国教育发达地区中考试卷)

文章目录 获取方式 为什么选择这份资源&#xff1f; 权威性与全面性&#xff1a;我们精心搜集了全国教育发达地区的最新中考试卷&#xff0c;确保每一套试卷都代表了该地区的教学水平和考试趋势。这不仅涵盖了丰富的知识点&#xff0c;还融入了各地独特的命题风格&#xff0c;让…...

嵌入式Linux学习笔记(5)-进程间常见通讯方式(c语言实现)

一、概述 进程间通信&#xff08;IPC&#xff0c;InterProcess Communication&#xff09;是指在多个进程之间进行数据传输和共享的机制。在操作系统中&#xff0c;进程是运行中的程序的实例&#xff0c;每个进程都有自己的内存空间和资源。 进程间通信可以用于在不同的进程之间…...

【移动端】菜单的自动展开与收回

前言 为了满足手机上菜单栏随用户移动&#xff0c;菜单的自动展示与隐藏&#xff0c;特此记录 基本原理 实现逻辑 window.addEventListener(‘scroll’, debouncedScrollHandler) – 监听文档视图滚动事件 document.querySelector(‘.header’) – 选择器匹配元素 创建show和h…...

Java获取Object中Value的方法

在Java中&#xff0c;获取对象&#xff08;Object&#xff09;中的值通常依赖于对象的类型以及我们希望访问的属性。由于Java是一种静态类型语言&#xff0c;直接从一个Object类型中访问属性是不可能的&#xff0c;因为Object是所有类的超类&#xff0c;但它本身不包含任何特定…...

集群聊天服务器项目【C++】(二)Json的简单使用

在上一章中&#xff0c;简单介绍了本项目的内容、技术栈、需求和目标等&#xff0c;详细介绍了环境配置&#xff0c;如果还没有配置成功&#xff0c;请参考我的上一篇博客环境配置 今天主要介绍Json库是什么以及简单的使用。 1.为什么要使用Json 我们在网络传输数据时&#…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...