文件包含漏洞

环境:phpStudy 2016、DVWA v1.10 0x00 文件包含 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。 程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。 几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。 在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。 0x01 常见文件包含函数 include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行 require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本 include_once()和require_once():若文件中代码已被包含则不会再次包含 0x02 利用条件 程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件 用户能够控制该动态变量 注:PHP中只要文件内容符合PHP语法规范,包含时不管扩展名是什么都会被PHP解析, 若文件内容不符合PHP语法规范则会暴漏其源码。包含不存在的文件则可能暴露路径 0x03 漏洞危害 执行任意代码 读取文件源码或敏感信息 包含恶意文件控制网站 甚至控制服务器 0x04 漏洞分类 本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码 读敏感文件,读PHP文件 包含日志文件GetShell 上传图片马,然后包含从而GetShell 包含/proc/self/envion文件GetShell 包含data:或php://input等伪协议 若有phpinfo则可以包含临时文件 远程文件包含:可以直接执行任意代码 要保证php.ini中allow_url_fopen和allow_url_include要为On 0x05 漏洞挖掘 上AWVS或者自己写代码测试 0x06 本地包含GetShell 简单代码示例 <?php if (@$_GET['page']) { include("./action/".$_GET['page']); } else { include ".



可以返回顶部