文件包含
文件包含漏洞原理
文件包含:程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用过程,称为文件包含。
文件包含漏洞:为使代码更加灵活,会将包含的文件设置为变量,用来进行动态调用,漏洞产生的原因正是函数通过变量引入文件时,没有对传入的文件名进行合理的校验,从而操作了意想之外的文件,导致文件泄露甚至恶意代码注入。
PHP: include(), include_once(), require(), require_once(), fopen(), readfile()
当使用前4个函数包含一个新的文件时,该文件将作为 php 代码执行,php 内核不会在意该被包含的文件是什么类型。
include() 出错仅是警告,脚本继续执行
require() 出错则爆出致命错误,脚本立刻终止
include_once() 同include,区别在当被包含的代码存在时,则不重复包含
require_once() 同require,区别在当被包含的代码存在时,则不重复包含
文件包含漏洞包含的任意文件都可以当成php文件来执行
漏洞利用
- 读取敏感信息
- 远程包含写shell
- 本地包含配合文件上传
- 使用php封装协议
- 包含Apache封装协议
- 截断包含