Pikachu靶场——目录遍历漏洞和敏感信息泄露

文章目录

  • 1. 目录遍历漏洞
    • 1.1 源码分析
    • 1.2 漏洞防御
  • 2. 敏感信息泄露
    • 2.1 漏洞防御

1. 目录遍历漏洞

漏洞描述

目录遍历漏洞发生在应用程序未能正确限制用户输入的情况下。攻击者可以利用这个漏洞,通过在请求中使用特殊的文件路径字符(如 …/ 或 %2e%2e/)来绕过应用程序的访问控制机制,访问应用程序所不应该暴露的文件或目录。

漏洞原理

应用程序的文件操作功能通常会接收用户提供的文件路径作为输入,并从文件系统中读取或写入文件。如果应用程序在处理用户输入时没有进行充分的验证和过滤,攻击者可以通过构造恶意的文件路径来访问任意文件或目录。

image-20230909152930401

分别点击这两个连接,会显示其他内容。与之对应的URL中的title的值也会发生改变。

第一个链接

image-20230909153125827

第二个链接

image-20230909153153600

根据目录遍历的原理,攻击者主要通过…/来返回上一级目录, 从而导致所有目录的暴露。

构造URL

http://192.168.188.183/pikachu/vul/dir/dir_list.php?title=../../../../../../../../windows\system32\drivers\etc\hosts

image-20230909153526328

1.1 源码分析

image-20230916155827012

说明:在PHP中,使用require语句可以将指定文件的内容包含到当前脚本中。对$filename参数没有进行任何的过滤从而导致漏洞的产生。

1.2 漏洞防御

修改源码进行防御

if(isset($_GET['title'])){$filename=$_GET['title'];//这里直接把传进来的内容进行了require(),造成问题//代码防御$filename = str_replace("../","",$filename);require "soup/$filename";
//    echo $html;
}

说明str_replace 是 PHP 中的字符串替换函数,可用于将字符串中指定的子串替换为另一个子串。这里是将../替换为空字符串。

image-20231001165959817

访问hosts文件

image-20231001170313242

防御成功,但是这样的防御是可以使用..\进行绕过。

http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=..\..\..\..\..\..\..\..\windows\system32\drivers\etc\hosts

image-20231001170416027

观察发现在进行访问的时候URL中的title的值分别是jarheads.php和truman.php这两个php文件。那么我们可以添加白名单进行防御。

防御代码如下:

if(isset($_GET['title'])){$filename=$_GET['title'];//这里直接把传进来的内容进行了require(),造成问题//代码防御if($filename == 'jarheads.php' or $filename == 'truman.php'){require "soup/$filename";}else{die("黑客!!!");}// require "soup/$filename";
//    echo $html;
}

重新访问页面

image-20231001171242604

防御成功!

目录遍历漏洞防御

  • 输入验证与过滤:对于接收用户输入的文件路径,要进行严格的输入验证和过滤,只允许合法的文件路径字符和文件名,拒绝或替换任何非法字符。
  • 白名单限制:限制应用程序可以访问的文件目录范围,使用白名单机制只允许特定的文件或目录被访问。
  • 文件权限控制:确保文件系统中的文件和目录设置了适当的权限,限制对敏感文件的访问。

2. 敏感信息泄露

由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。

例如:

  • 通过访问url下的目录,可以直接列出目录下的文件列表。
  • 输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息。
  • 前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等

查看页面源代码,发现了测试账户

image-20230909153914076

使用测试账户进行登录

image-20230909153953000

登录成功。

2.1 漏洞防御

  • 尽可能避免存储敏感数据,或存储时间超过所需时间。
  • 对于网站目录定期扫描。
  • 对于所有需要存储的静态数据进行加密。
  • 安全地处理用户输入:对用户输入的敏感信息进行严格而细致的验证和过滤,以防止恶意输入或攻击例如SQL注入、跨站脚本(XSS)等。
  • 强化访问控制机制:实施强密码策略、多因素身份验证、单点登录(SSO)等访问控制机制,以增加攻击者获取敏感信息的难度。
  • 合理设计权限和访问控制:确保只有授权用户或角色可以访问和处理敏感信息。使用最小权限原则,即每个用户/角色只能获得完成其工作所需的最低限度的访问权限。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Electronjs入门-Electron中的主要模块

在本节中,我们将了解在Electron中创建任何应用程序时的一些基本模块;这些模块多种多样,使我们能够轻松地进行进程通信,创建操作系统的本地菜单。 为了利用Electron模块,以及任何第三方或Node模块,不仅在主流…

SSM - Springboot - MyBatis-Plus 全栈体系(二十一)

第四章 SpringMVC 四、RESTFUL 风格设计和实战 1. RESTFul 风格概述 1.1 RESTFul 风格简介 RESTful(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量…

visual studio解决bug封装dll库

1.速度最大化 O2 2.设置输出目录 配置属性/常规/输出目录 链接器/常规/输出dll文件 链接器/调试/输出程序数据库pdb文件 链接器/高级/导入库 3.输出X86 X64分别对应的dll、lib、pdb 然后修改更新说明 更新说明格式如下: 4.将库提交到FTP每日更新库文档下 和测试交接…

[NISACTF 2022]hardsql - quine注入

题目描述:$password$_POST[passwd]; $sql"SELECT passwd FROM users WHERE usernamebilala and passwd$password;"; 从描述看出是quine注入,且用户名要是bilala 1、经测试,参数为:username&passwd&login登录&a…

36.骑士周游算法及其基于贪心算法的优化

概述 骑士周游算法,叫做“马踏棋盘算法”或许更加直观。在国际象棋8x8的棋盘中,马也是走“日字”进行移动,相应的产生了一个问题:“如果要求马 在每个方格只能进入一次,走遍全部的64个方格需要如何行进?”…

1147. 段式回文

链接&#xff1a; ​​​​​​1147. 段式回文 题解&#xff1a; class Solution { public:int longestDecomposition(string text) {MOD 1e9 7;if (text.size() < 0) {return 0;}// 初始化26的n次方的表pow26.resize(text.size());pow26[0] 1;for (int i 1; i < …

【C语言】利用数组处理批量数据(字符数组)

前言:前面已经介绍了&#xff0c;字符数据是以字符的ASCII代码存储在存储单元中的&#xff0c;一般占一个字节。由于ASCII代码也属于整数形式&#xff0c;因此在C99标准中&#xff0c;把字符类型归纳为整型类型中的一种。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

数据结构——红黑树(详解性质+C++模拟)

文章目录 前言红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入操作1. **按照二叉搜索树的规则插入新结点**2. 检测新节点插入后&#xff0c;红黑树的性质是否遭到破坏 红黑树的验证总结 前言 本篇博客将为大家重点讲述红黑树这一数据结构&#xff0c;讲解其实现的方式即…

One Thread One Loop主从Reactor模型⾼并发服务器

One Thread One Loop主从Reactor模型⾼并发服务器 文章目录 One Thread One Loop主从Reactor模型⾼并发服务器一些补充HTTP服务器Reactor 模型eventfd通用类Any 目标功能模块划分&#xff1a;SERVER模块Buffer模块&#xff1a;编写思路&#xff1a;接口设计&#xff1a;具体实现…

毕设-原创医疗预约挂号平台分享

医疗预约挂号平台 不是尚医通项目&#xff0c;先看项目质量&#xff08;有源码论文&#xff09; 项目链接&#xff1a;医疗预约挂号平台git地址 演示视频&#xff1a;医疗预约挂号平台 功能结构图 登录注册模块&#xff1a;该模块具体分为登录和注册两个功能&#xff0c;这些…

Linux:环境变量、地址空间

目录 一、环境变量 1、什么是环境变量 2、常见的环境变量 3、环境变量相关命令 二、地址空间 1、进程地址空间 2、虚拟地址空间 一、环境变量 1、什么是环境变量 首先先举个环境变量的例子&#xff1a; 我们在Linux中&#xff0c;运行ls、pwd之类的命令&#xff0c;直…

力扣 -- 873. 最长的斐波那契子序列的长度

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…

Python之元组

Python之元组 元组tuple 一个有序的元素组成的集合使用小括号 ( ) 表示元组是不可变对象 tuple(), (), type(()) # 空元组 ((), (), tuple)(1,), (1) # 元组中只有1必须加逗号&#xff0c;否则就是1了 # ((1,), 1)x 1, 2 # 以逗号分隔的内容会形成元组&#xff0c;封装元组x…

DBC配置SecOC属性

关联文章:Autosar基础——车载信息安全SecOC 属性定义的规范详细介绍请参考 ①dbc属性定义 ②Vector DBC属性定义规则 文章目录 一、SecOC简介二、DBC文件中的SecOC属性三、配置SecOC属性设置SecOC的属性设置同步报文的属性设置同步请求报文的属性一、SecOC简介 在车载网络中…

数据分析篇-数据认知分析

一简介 数据认知分析&#xff0c;实际是对数据的整体结构和分布特征进行分析&#xff0c;是对整个数据外在的认识&#xff0c;也是数据分析的第一步。对于数据认知的分析&#xff0c;一般会考虑分散性、位置特性、变量的相关性等&#xff0c;一般会考虑平均数、方差、极差、峰…

朋友圈怎么定点发朋友圈?

微信朋友圈是我们日常生活中常用的社交媒体之一。但有时我们忙碌而可能会忘记发布朋友圈&#xff0c;或是因时间不合适而无法发布。那么&#xff0c;有没有一种方法可以在规定的时间内自动发布朋友圈呢&#xff1f; 当然有啦&#xff01; 定时发朋友圈可以帮助我们在特定时间点…

7.Tensors For Beginneers - Convector Components

介绍协向量时&#xff0c;曾说过它们有点像 行向量&#xff0c; 行向量确实以某种方式代表了协向量&#xff0c; 这里说明一下&#xff1a; 协向量是不变的&#xff1b; 协向量组件是可变的。 协向量不依赖坐标系&#xff0c;协向量的组件取决于坐标系。 当我们说协向量具有组…

Javascript文件上传

什么是文件上传 文件上传包含两部分&#xff0c; 一部分是选择文件&#xff0c;包含所有相关的界面交互。一部分是网络传输&#xff0c;通过一个网络请求&#xff0c;将文件的数据携带过去&#xff0c;传递到服务器中&#xff0c;剩下的&#xff0c;在服务器中如何存储&#xf…

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff08;只能new一次&#xff09;&#xff0c;通过这个唯一的实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…

C++(STL容器适配器)

前言&#xff1a; 适配器也称配接器&#xff08;adapters&#xff09;在STL组件的灵活组合运用功能上&#xff0c;扮演着轴承、转换器的角色。 《Design Patterns》对adapter的定义如下&#xff1a;将一个class的接口转换为另一个class的接口&#xff0c;使原本因接口不兼容而…