文件包含漏洞利用和防御
文件包含漏洞
使用函数包含指定文件的代码,没对函数的参数进行过滤,可被用户控制包含恶意文件并执行代码
- 漏洞分类
本地文件包含:目录遍历、任意文件读取、包含日志文件getshell、图片马getshell、伪协议读取文件/命令执行、包含phpinfo上传的临时文件
远程文件包含:远程木马getshell(需要allow_url_fopen和allow_url_include都是on) - 漏洞挖掘
URL参数名出现了page、file、filename、include等关键字;URL参数值出现了文件名,如xx.php、xx.html等 - 漏洞利用
发现漏洞->上传shell或读取敏感文件(FUZZ)->执行恶意代码 - 漏洞修复
PHP配置中的allow_url_fopen和allow_url_include改为off
禁用动态包含
过滤协议、目录字符
设置包含文件白名单 
PHP相关函数
| 函数 | 作用 | 
|---|---|
| include | 包含并运行文件 | 
| include_once | 只包含并运行文件一次,不重复包含 | 
| require | 包含并运行文件,出错时终止运行 | 
| require_once | 只包含并运行文件一次,出错时终止运行 | 
| fopen | 打开文件或URL | 
| readfile | 读取文件并写入输出缓冲 | 
| highlight_file | 语法高亮一个文件 | 
| show_source | 语法高亮一个文件 | 
| file_get_contents | 把整个文件读入一个字符串 | 
| file | 把文件读入一个数组中 | 
PHP伪协议
| 协议 | 作用 | 
|---|---|
| file:// | 访问本地文件系统 | 
| http:// | 访问HTTP(s)网址 | 
| ftp:// | 访问FTP(s) URLs | 
| php:// | 访问各个输入/输出流 | 
| zlib:// | 压缩流 | 
| data:// | 数据流 | 
| glob:// | 查找匹配的文件路径模式 | 
| phar:// | PHP归档 | 
| ssh2:// | secure shell 2 | 
| rar:// | RAR | 
| ogg:// | 音频流 | 
| expect:// | 处理交互式的流 | 










