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

文件包含

时间:2023-11-25 22:02:03浏览次数:17  
标签:文件 include 包含 file 服务器 php

文件包含

什么是文件包含

文件包含,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。

文件包含漏洞成因

在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

PHP文件包含的函数

  • include( ) 当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含 进来,发生错误时之给出一个警告,继续向下执行。
  • include_once( ) 功能与 Include()相同,区别在于当重复调用同一文件时,程序只调用一次
  • require( ) require()与 include()的区别在于 require()执行如果发生错误,函数会输出 错误信息,并终止脚本的运行。
  • require_once( ) 功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次。

敏感文件

Linux/Unix系统
/etc/passwd                                                                 //  账户信息
/etc/shadow                                                                 //  账户密码文件
/usr/local/app/apache2/conf/httpd.conf                       //   Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf    //   虚拟网站配置
/usr/local/app/php5/lib/php.ini                                     //   PHP相关配置
/etc/httpd/conf/httpd.conf                                            //   Apache配置文件
/etc/my.conf                                                                 //   mysql 配置文件

文件包含漏洞分类

本地文件包含漏洞

本地文件包含漏洞

当包含的文件在服务器本地时,就形成了本地文件包含。

比如:

<?php
    $file = $_GET['file'];
    include($file);
    .....

get一个参数file,来控制包含的$file的值 假如有一个file.txt

<?php
phpinfo();
?>

img 如果限制包含文件的后缀:

<?php
    $file = $_GET['file'] . '.php';
    echo $file;
    include($file);

就无法找到要包含的文件 img 此时,可以使用%00截断,不过需要有前提条件: 1). PHP版本 < 5.3 (不包括5.3) ; 2). PHPmagic_quotes_gpc = off; 3).PHP对所接收的参数,如以上代码的$_GET['file']未使用addslashes函数

远程文件包含漏洞

远程文件包含漏洞

当包含的文件在远程服务器上时,就形成了远程文件包含。

远程文件包含的注意点:

1.需要php.ini中allow_url_include = on以及allow_url_fopen=on

2.所包含远程服务器的文件后缀不能与目标服务器语言相同。(比如目标服务器是php脚本语言解析的,那么包含的远程服务器文件后缀不能是php)

主要解释下第2点: 比如远程服务器文件yuancheng.php,内容为:

<?php
phpinfo();
?>

远程服务器 再来看下目标服务器的信息 目标服务器 执行远程包含: 执行,显示为远程服务器结果 原因:因为目标服务器包含的代码并不是:

<?php phpinfo();?>

而是远程服务器执行完这段代码的源代码 远程服务器 因此,正确远程包含文件漏洞利用如下: 首先确保配置文件allow_url_fopen = On以及allow_url_include = On

其次,修改文件后缀,只要不是php就行,比如后缀为.txt,然后再来包含。

成功

文件包含漏洞之伪协议

1.data:text/plain 或 data:text/plain;base64 2.php://input 3.php://filter 4.file:// 5.zip://

data:text/plain

直接在对应URL参数内输出:data:text/plain,需要执行的php代码

img

如果过滤了php,可以结合base64绕过

data:text/plain;base64,php代码的base64编码

php://input

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行

post内容可以直接写shell

<?php fputs(fopen('info.php','w'),'<?php phpinfo();?>')?>

img

php://filter

php://filter 该伪协议可以读取php文件代码以base64编码输出,比如说我们想读取一个php文件但是不想让它正常php执行代码后的结果,我们想要这个php文件的代码的时候就可以使用这个伪协议。

img

1、是格式 2、是可选参数,有read和write,字面意思就是读和写 3、是过滤器。主要有四种:字符串过滤器,转换过滤器,压缩过滤器,加密过滤器。filter里可以用一或多个过滤器(中间用|隔开),这也为解题提供了多种方法,灵活运用过滤器是解题的关键。这里的过滤器是把文件flag.php里的代码转换(convert)为base64编码(encode) 4、是必选参数,后面写你要处理的文件名读取源码:

读取源码:?file=php://filter/read=convert.base64-encode/resource=flag.php
大写转换:?file=php://filter/read=string.toupper/resource=flag.php

file://

file:// 用于访问本地文件系统,且不受allow_url_fopen与allow_url_include的影响。

使用方法:file://文件绝对路径 file://C:/Windows/system.ini

img

zip://

zip://可以访问压缩文件中的文件。但是需要绝对路径。

使用方法: zip://[压缩包绝对路径]%23(#和url规则冲突,所以用%23代替)[压缩文件内的文件名]

在本地创建一个文件2.php,并且压缩成2.zip压缩包,然后包含压缩包里面的文件:

img

日志文件include

  • 原理:对网站进行访问时,日志文件会记录相关信息(请求头中的信息)
  • 前提:知道日志文件所在,并能进行包含(通常在 ?file=/var/log/nginx/access.log)img
  • 步骤:
    • 先访问网站在请求头中写入一句话(一般写在user-agent中)
    • 然后通过post去尝试执行
    • 执行成功后通过蚁剑连接得到shell
    • 或者知道flag存在位置直接执行system命令

标签:文件,include,包含,file,服务器,php
From: https://www.cnblogs.com/hermitaria/p/17856199.html

相关文章

  • 微信小程序文件预览和下载-文件系统
    文件预览和下载在下载之前,我们得先调用接口获取文件下载的url然后通过wx.downloadFile将下载文件资源到本地wx.downloadFile({url:res.data.url,success:function(res){console.log('数据',res);}})tempFilePath就是临时临时文件路径。通过wx.openD......
  • 13-Linux系统中批量替换文件名
     #1,现在我有一批文件,原名要被替换成新的名字,我们做一个names.txt文件,前面一列是oldname,后一列是newname,用制表符(\t)分隔,最后空出一行即可:A.txtL1.txtB.txtL2.txtC.txtL3.txtD.txtL4.txtE.txtL5.txtF.txtL6.txt  #2,将这个names.txt文件上传到服务器后,修改命令......
  • Linux学习随笔——文件权限
    一、基本权限UGOU:属主;G:属组;O:其他用户;r:read(读取),数字设定为4;w:write(写入),数字设定为2;x:execute(执行),数字设定为1;使用ll命令查看文件属性,如下例子,忽略第一个“-”,前面3个字符表示属主的权限,中间3个表示属组的权限,后面3个表示其他用户的权限;-rw-r--r--(表示属主权限为读写6,属组权限......
  • 文件的压缩与解压缩
    Java中提供了ZipOutputStream和GZIPOutputStream类供文件压缩使用。importjava.io.*;importjava.nio.charset.Charset;importjava.util.Enumeration;importjava.util.zip.ZipEntry;importjava.util.zip.ZipFile;importjava.util.zip.ZipOutputStream;publicfinalc......
  • 无涯教程-Linux - 文件管理
    在本章中,我们将详细讨论Unix中的文件管理,Unix中的所有数据都是文件,所有文件都组织在目录中,这些目录被组织成称为文件系统的树状结构。在Unix中,文件有三种基本类型-OrdinaryFiles  -普通文件是系统上包含数据,文本或程序指令的文件。Directories     -目录存储......
  • 公众号怎么上传PDF文件
    微信公众号在信息传播领域的影响力日益增强。然而,公众号并不直接支持PDF文件上传,这让许多需要分享长篇文档和报告的作者感到困惑。不过,好消息是,有一些第三方工具,如“微附件”,可以帮助我们轻松地实现这一目的。下面,我们将详细介绍如何利用“微附件”在公众号上上传PDF文件。1.注册/......
  • linux 中du命令指定以不同的单位显示文件的大小
     001、(base)[root@pc1test]#ls(base)[root@pc1test]#ddif=/dev/zeroof=a.txtcount=30bs=1M##生成一个测试文件30+0recordsin30+0recordsout31457280bytes(31MB)copied,0.0231627s,1.4GB/s(base)[root@pc1test]#ll-h......
  • 【Windows】SAM文件破解
    目录win7win10nullwin7在对方不知情,不知道对方密码的情况下,破解密码以Win7为例步骤使用kali-live镜像(U盘版本),直接插入他人电脑就可直接运行模仿插入U盘进入BIOS,设置从镜像启动选择启动项将CD—ROM移动至第一个F10保存默认选中第一个,回车进来后,点击桌面Home,选......
  • C语言编程技巧 全局变量在多个c文件中公用的方法
    在使用C语言编写程序时,经常会遇到这样的情况:我们希望在头文件中定义一个全局变量,并将其包含在两个不同的C文件中,以便这个全局变量可以在这两个文件中共享。举个例子,假设项目文件夹"project"下有三个文件:main.c、common.c和common.h。在这种情况下,我们希望声明一个字符型变量"key",......
  • JavaWeb中的文件上传和下载功能的实现
    导入相关支持jar包:commons-fileupload.jar,commons-io.jar对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件......