
文件包含漏洞的由来开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时直接调用此文件,而无需再次编写,这种调用文件的过程被称为“包含”。有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员没有对其进行安全防护,就导致攻击者可以通过修改文件的位置来让后台 执行任意文件,从而导致文件包含漏洞。Security Level: Low/ Medium/High#1 比较代码Level Low没有任何验证或过滤可以直接修改URL 用’…/’ 进行任意目录遍历( LFI ); 或传入外部URL 进行远程包含 RFI Level Medium 引入黑名单字符替换 通过str_replace()函数将http://和https://都替换成了空,主要是为了防止远程文件包含, 还过滤了…/ 和 …\ 防本地包含函数只擦除一层,不会循环递归过滤因此可以双写例如: ‘…//’ 或 hthttp://tp://‘绕过远程包含 RFI 漏洞前提, 需要服务器的 php.ini配置文件满足如下:allow_url_fopen On /默认打开allow_url_include On /默认关闭magic_quotes_gpc Off //默认关闭Level High 使用 fnmatch()函数进行前缀匹配限制——它要求变量必须以’file’开头, 或者完全等同于 ‘include.php’ 但是该限制忽略了PHP 内置的‘伪协议机制’所以Payload 以’file://’ 开头的伪协议路径 例如:’ file:///etc/passwd’绕过