首页 > 其他 > 详细

文件包含

时间:2021-03-30 15:11:19      阅读:24      评论:0      收藏:0      [点我收藏+]

文件包含是代码注入的一种,其原理是注入一段用户能控制的脚本或代码,并让服务器端执行.文件包含可能出现在JSP,PHP,ASP等语言中.

常见导致文件包含的函数

PHP:include(),include_once,require(),require_once(),fopen(),readfile()...
JSP:ava.io.File(),java.io.FileReader()...
ASP:include file,include virtual...

PHP文件包含

文件包含是PHP的一种常见用法,主要由四个函数完成:

  • include()
  • require()
  • include_once
  • require_once()

当使用这四个函数包含一个新的文件时,该文件讲作为PHP代码执行,PHP内核并不会在意被包含的文件时什么类型(如果被包含的文件时txt.jpg等,也作为PHP代码执行)

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

  2. 而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题

产生条件

  1. include()等函数通过动态变量方式引入需要包含的文件
  2. 用户能够控制该动态变量

本地文件包含

能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞(简称LFI)

文件包含漏洞能够读取敏感文件或服务器端脚本的源代码,从而为攻击者进一步攻击奠定基础,这种使用了"../../"来返回到上层目录中的方式,又被称为目录遍历

// 测试代码
<?php
$filename  = $_GET[‘filename‘];
include($filename);
?>
// 通过目录遍历漏洞可以获取到系统中其他文件的内容:
http://127.0.0.1/file.php?filename=../../../etc/passwd

远程文件包含

如果PHP的配置选项allow_url_include为NO的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含(EFI)

远程文件包含可以用来执行任意命令,如包含远程恶意代码
// 测试代码
<?php
echo system("ver;");
?>
// 通过远程文件包含可以获得命令执行:
http://127.0.0.1/file.php?filename=http://127.0.0.1/test.php

文件包含

原文:https://www.cnblogs.com/Frieza/p/14596500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!