fileread任意文件读取学习笔记

任意文件读取概述

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

  • 任意文件读取会造成(敏感)信息泄露;

  • 任意文件读取大多数情况是由于其他漏洞引发的,如RCE、目录遍历、文件包含等。

  • 任意文件读取与任意文件下载本质上没有区别,信息都是从服务端流向浏览器的。

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

漏洞成因

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

  • 存在读取文件的功能(函数),也就是说,Web 应用开放了文件读取功能;

  • 读取文件的路径客户端可控,完全控制或影响文件路径参数;

  • 没有对文件路径进行校验或者校验不严导致校验被绕过;

  • 输出了文件的内容。

漏洞危害

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

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

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

  • 源代码

  • 配置文件

  • 敏感文件

  • 日志文件

漏洞分类

  • 任意文件读取

  • 任意文件下载

任意文件读取

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

文件读取

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

readfile:

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

file_get_contents:

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

fread:

// fread.php
$fp = "../phpinfo.php";
$f = fopen($fp,'r');
$f_size = filesize($fp);
echo fread($f, $f_size);
fclose($f);

任意文件读取

变量$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

任意文件下载

一般情况

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

a 标签下载:

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

php实现

PHP 文件下载实现过程:

  • 先读取文件

  • 在输出文件

  • 提供下载

// file-download.php
$fp = './a.jpg';
header('Content-Type:image/jpg');
header('Content-Disposition:attachment;fileName='.basename($fp));
readfile($fp);

任意文件下载

任意文件下载的条件:

  • 已知目标文件路径

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

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

$fp = $_GET['filepath'];

image-20231114111225936

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

任意文件读取攻防

路径过滤

过滤…/

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

简单绕过

双写绕过

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

绝对路径

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

使用…\

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

任意文件读取挖掘

手工挖掘

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

经典案例

  • metinfo_6.0.0_file-read

该漏洞出现在metinfo_6.0.0下的/include/thumb.php文件中

该文件源码

<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.defined('IN_MET') or exit('No permission');load::sys_class('web');class old_thumb extends web{public function doshow(){global $_M;$dir = str_replace(array('../','./'), '', $_GET['dir']);if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false){header("Content-type: image/jpeg");ob_start();readfile($dir);ob_flush();flush();die;}if($_M['form']['pageset']){$path = $dir."&met-table={$_M['form']['met-table']}&met-field={$_M['form']['met-field']}";}else{$path = $dir;}$image =  thumb($path,$_M['form']['x'],$_M['form']['y']);if($_M['form']['pageset']){$img = explode('?', $image);$img = $img[0];}else{$img = $image;}if($img){header("Content-type: image/jpeg");ob_start();readfile(PATH_WEB.str_replace($_M['url']['site'], '', $img));ob_flush();flush();}}
}# This program is an open source system, commercial use, please consciously to purchase commercial license.
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
?>

过滤代码

$dir = str_replace(array('../','./'), '', $_GET['dir']);
 if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false)

将输入的…/和./过滤为空

并判断url的前四位是否为http并且输入的dir里面有没有./如果没有且头部为http,则可以执行

第一次测试 双写

/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

image-20231114154754936

输出一下过滤后的dir和M

image-20231114154926678

漏洞修复方案

输入验证

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

避免其它漏洞

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

限定文件的访问范围

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

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

open_basedir = c:\www\

参考链接

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.hqwc.cn/news/175566.html

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

相关文章

Android 12 intent-filter添加android:exported后任然报错解决方法

Android 12 或更高版本为目标平台&#xff0c;且包含使用intent-filter 过滤器的 activity、service或receiver&#xff0c;您必须为这些应用组件显式声明 android:exported 属性。 常规操作 查看AndroidManifest.xml文件&#xff0c;搜索intent-filter&#xff0c;然后添加好…

金属五要素微型气象仪科技小物大智慧

WX-WQX5S 天气是我们生活中不可忽视的一个因素。冷暖交替&#xff0c;阴晴不定&#xff0c;这款金属五要素微型气象仪&#xff0c;让你随时掌握天气变化&#xff0c;成为生活的智者。 一、外观设计 这款气象仪采用金属材质&#xff0c;不仅耐用&#xff0c;而且具有很高的美观…

3.1 Linux 前置知识

1、硬件 我们知道&#xff0c;组成计算机的硬件主要有“主机”和“输入/输出设备”。 主机包括机箱、电源、主板、CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09;、内存、显卡、声卡、网卡、 硬盘、光驱等。输入/输出设备包括显示器、键盘、鼠标…

【ERROR】ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND No package.json

1、报错 启动项目的时候&#xff0c;报这个错误&#xff0c;是因为根目录错误&#xff0c;查看&#xff0c;根目录是否错误。

gmpy2 GMP is_prime函数底层c代码分析

偶然看到一篇paper&#xff08;2018年发表&#xff09;&#xff0c;说GMP中的素性检测使用的是单独的Miller_Rabin方法&#xff0c;单独的Miller_Rabin素性检测会存在部分安全问题&#xff08;低概率&#xff09;&#xff0c;然后突然想求证一下最新版本的GMP中是否进行了修改。…

android studio开发flutter应用,使用mumu模拟器调试软件

安装好mumu模拟器&#xff0c;先打开网易mumu模拟器的开发者模拟。系统应用 > 设置 > 关于手机 > 版本号 多点击几次调出开发者模式&#xff1a; 然后打开Hbulider软件&#xff1a;&#xff08;具体应该是hbulider执行了一个adb命令&#xff0c;让android studio能识别…

跨境电商邮件营销的策略?外贸营销怎么做?

跨境电商邮件营销怎么做&#xff1f;跨境电商电子邮件营销工具&#xff1f; 随着全球电子商务的快速发展&#xff0c;跨境电商已经成为越来越多企业的选择。在跨境电商领域&#xff0c;邮件营销是一种非常重要的营销手段。蜂邮将探讨跨境电商邮件营销的策略&#xff0c;帮助企…

MySQL数据库约束

目录 数据库约束 1.NULL约束 2.UNIQUE&#xff1a;唯一约束 3.DEFAULT&#xff1a;默认值约束 4.PRIMARY KEY&#xff1a;主键约束 5.FOREIGN KEY&#xff1a;外键约束 数据库约束 以下为本篇文章会介绍的约束 (1)NOT NULL - 指示某列不能存储 NULL 值。 (2)UNIQUE - …

蓝牙特征值示例1-迈金L308自行车尾灯夜骑智能表情尾灯的

了解商品级蓝牙特征值 1 服务器&#xff08;设备&#xff09;描述 0x02-01-06 05-03-0F180A18 09-FF-FFFF166B001C0101 0A-09-4C3330385F37393937 01设备标识 03服务UUID FF厂商自定义数据(厂家编号&#xff1a;FFFF-166B001C0101) 完整设备名称&#xff1a; L308-7997 2 服…

(论文阅读31/100)Stacked hourglass networks for human pose estimation

31.文献阅读笔记 简介 题目 Stacked hourglass networks for human pose estimation 作者 Alejandro Newell, Kaiyu Yang, and Jia Deng, ECCV, 2016. 原文链接 https://arxiv.org/pdf/1603.06937.pdf 关键词 Human Pose Estimation 研究问题 CNN运用于Human Pose E…

HelloWorld - 从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件&#xff0c;例如这里是Houdini19对应UE5.2的版本&#xff0c;我们就要保证先下载好UE5.2&#xff1a; 将Houdini插件粘贴到UE安装目录的Plugins文件夹下&#xff1a; 目前插件配置完成&#xff0c;打开UE会自动启用插…

python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积

每日小语 打碎的杯子&#xff0c;烫伤的手&#xff0c;对菩萨是堪忍&#xff0c;因为他在里面得悟甚深之法&#xff0c;心生欢喜。 可是对一般人来说&#xff0c;一生何止打破千百个杯子&#xff1f;何止烫伤过千百次手&#xff1f;他只是痛苦地忍受&#xff0c;只记得下次要…