本地文件包含和远程文件包含:
本地文件包含:只要内容中带有<?php ?>即可解析成php文件执行。即使包含的文件后缀是.txt或是.jpg等。
远程文件包含:需要allow_url_fopen=on和allow_url_include=on才能进行包含。不能解析后缀为php可解析的文件。例如.php、php3等都是不行的。可以利用伪协议进行文件读写等操作。
常见的几个伪协议:php:// file:// zip:// phar:// data:
今日实践的三个伪协议:php:// file:// data:
一、php://filter和php://input
php://filter/resource=可以将非php代码文件内容直接输出。php代码文件直接执行。在读取文件时可以利用php://filter/read=convert.base64-encode/resource=将文件base64编码再进行包含,不会再被执行,可以直接输出文件内容的base64编码。解码即可获取文件内容。
php://input可以利用post方式传入命令执行
二、file://
file://和php://filter很相似。但是只能依靠绝对路径查看文件内容。
三、data:
类似于php://input,直接执行输入的命令。
关于文件包含防护:
1. 利用open_basedir = 限制用户访问路径。
2. allow_url_include = Off 和 allow_url_fopen=Off
3.注意伪协议的滥用
4.设置白名单
网友评论