当前位置: 首页 > news >正文

[渗透测试] 任意文件读取漏洞

任意文件读取漏洞

概述

漏洞成因

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

漏洞危害

  • 下载服务器中的文件(源代码文件、系统敏感文件、配置文件等)
  • 可以配合其他漏洞,构成完整的攻击链。
  • 对源代码进行审计,查找更多漏洞。

任意文件读取漏洞

文件读取函数(PHP)

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

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'];
readfile($fp);

使用filepath传递,在filepath中输入地址来获取文件内容

使用Burp抓包:
在这里插入图片描述

结果:

在这里插入图片描述

任意文件下载漏洞

PHP实现文件下载

<?php
$fp = './111.jpg';
header('Content-Type:image/jpg');
header('Content-Disposition:attachment;fileName='.basename($fp));
readfile($fp);

任意文件下载

$fp = $_GET['filepath']
header('Content-Type:image/jpg');
header('Content-Disposition:attachment;fileName='.basename($fp));
readfile($fp);

任意文件读取攻防

路径过滤(…/)

1.过滤 …/

使用str_replace进行替换

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

简单绕过

1.双写绕过

..././..././..././windows/system32

2.绝对路径

C:/windows/system32

**3.使用…\ **

..\..\..\windows\system32

任意文件读取挖掘

手工挖掘

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

漏洞修复方案

输入验证

让用户只能访问一定的路径

限定文件的访问范围

让用户不能访问根目录以外的路径:

​ php.ini配置文件中,限定文件访问范围

open_basedir = c:\www\

不包含其他漏洞

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

http://www.lryc.cn/news/385293.html

相关文章:

  • sudo: /etc/init.d/ssh: command not found
  • 秋招倒计时?到底需要准备到什么程度?
  • 6.26.4.1 基于交叉视角变换的未配准医学图像多视角分析
  • 62.指针和二维数组(2)
  • 学生表的DDL和DML
  • 视觉灵感的探索和分享平台
  • 使用 Reqable 在 MuMu 模拟器进行App抓包(https)
  • RedisConnectionException: Unable to connect to localhost/<unresolved>:6379
  • poi word写入图片
  • 【监控】2.Grafana的安装
  • Java入门教程(上)
  • 【Linux】Linux下使用套接字进行网络编程
  • 强化学习-Q-learning、SARSA和PPO等算法
  • HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”
  • Java基础入门day72
  • 文本编辑命令和正则表达式
  • 云手机群控功能讲解
  • gdb用法
  • 聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?
  • 配置Nginx二级域名
  • LeetCode——判断回文数
  • shell:使用结构化语句(for、while循环)
  • 数据结构_绪论
  • AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。
  • 【经典面试题】RabbitMQ如何防止重复消费?
  • 如何自己录制教学视频?零基础也能上手
  • 【android】用 ExpandableListView 来实现 TreeView树形菜单视图
  • 策略模式与函数式编程应用
  • docker原理记录C-N-A
  • 【LeetCode】每日一题:二叉树的层次遍历