WEB入门——文件包含漏洞与PHP伪协议

本文详细介绍了PHP的文件包含漏洞,包括本地和远程文件包含,并讲解了PHP的伪协议,如file://、php://filter和php://input等,通过实例展示了如何利用这些协议读取和执行代码。此外,还提供了CTF练习来加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、文件包含

1、简介

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

随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。

2、常见文件包含漏洞

1、include()
当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,然后继续向下执行。
 
2、include_once()
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次
 
3、require()
Require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
 
4、require_once()
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
 
5、highlight_file()、show_source()
函数对文件进行语法高亮显示,通常能看到源代码
 
6、readfile()、file_get_contents()、
函数读取一个文件,并写入到输出缓冲
 
7、fopen()
打开一个文件或者url

3、文件包含漏洞分类

3.1、本地文件包含

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

3.2、远程文件包含漏洞

本地文件包含和远程文件包含造成漏洞的原因是一样的,

当php.ini 中的配 置选项allow_url_fopen和allow_url_include为ON的话,则包含的文件可以 是第三方服务器中的文件,这样就形成了远程文件包含漏洞。
所以远程文件包含条件:需要满足两个条件在php.ini中。当php.ini 中的配置选项

  • allow_url_fopen:on
  • allow_url_include:on

4、搭建平台

  • 在phpstudy软件 WWW目录下创建一个flag.txt文件。
  • 在** www/test**目录下创建一个test_include.php,代码如下:
    <?php 
    
    highlight_file(__FILE__);
    
    if(isset($_GET['file'])) {
         
        $str = $_GET['file'];
    
        include $_GET[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值