文件包含漏洞学习(1)
简介
程序开发人员一般会把重复使用的函数写道单个文件中,需要使用某个函数时直接调用此文件,而无需再踩编写,这个文件调用的过程一般称为文件包含。有时候将包含的文件设置为变量,用来动态调试,这样就可能导致客户端可调用一个恶意文件,造成文件包含漏洞。文件包含漏洞常见于PHP语言中,但不代表其他的语言没有。
文件包含函数
php中文件包含函数有以下四种:
require()
require_once()
include()
include_once()
include()和require()的区别,include在包含的过程中执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行,require 只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本。
而include_once() ,require_once() 这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
利用条件
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
示例:
<?php
$file = $_GET[ 'page' ];
?>
这里$_GET[‘page’]参数未进行任何过滤,尝试本地包含。
PHP中只要文件内容符合PHP语法规范,包含时不管扩展名是什么都会被PHP解析, 若文件内容不符合PHP语法规范则会暴漏其源码。
还分为本地包含,远程包含等等,今天简单学习一下,这里后续一一补充。
参考: https://www.freebuf.com/articles/web/182280.html https://www.cnblogs.com/bmjoker/p/9035259.html
|