实验环境
? ? 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文件被远程服务器解析过,解析过后,目标服务器去包含这个文件,是没有任何东西的,会让包含失败? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?