文件包含基础

作者: const27 分类: All,文件包含漏洞 发布时间: 2020-06-03 12:04

文件包含基础

1.利用协议:

利用伪协议php://filter/read=convert.base64-encode/resource=path

读取流读取出的东西是base64加密的,包含进当前页面代码中后也不能被解析,故而已被加密的形式被展示在页面中
而且,php://filter协议可以嵌套任意字符而不影响的的,如
php://filter/read=convert.base64-encode/xxxxxxxx/resource=path

利用伪协议控制输入流来使payload被包含进代码(需有远程文件包含参数支持)

image
image

遇到有文件包含include($_GET[])之类的函数,可以利用伪协议直接控制输入流,使我们的payload直接被包含进代码。
控制远程文件包含的两个参数一般是php.ini里的allow_url_include和allow_url_fopen
allow_url_include在php5.2后默认关闭所以比较鸡肋,而allow_url_fopen是默认开启的
下图是php5.6.40的测试结果

具体流程为大概这样,这里也可以试试用http://协议

利用伪协议控制输入流来执行代码从而新建一个有指定内容的文件:

image
image


在我的目录中可见这个文件确实被创建了

利用file协议读取文件信息:

image

zip://和phar://协议

image
image
image

我们可以使用zip://和phar://协议来包含一个压缩包里的文件,无视后缀名
先将phpinfo打包并以1.jpg的名字上传到服务器

我们先用zip://协议去包含他:

用zip协议解析压缩包时,压缩包内部文件和外部文件之间要用字符%23隔开
再试试phar://协议:

phar://协议不需要%23隔开.

http:// https:// 协议(http远程包含):

image

控制远程文件包含的两个参数一般是php.ini里的allow_url_include和allow_url_fopen,allow_url_include在php5.2后默认关闭所以比较鸡肋,而allow_url_fopen是默认开启的 下图是php5.6.40的测试结果

以下是实际演示:

image

data://协议

可以理解为php://input的get版(2333)

data://text/plain,<?php%20phpinfo();%20?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

2.利用包含日志来getshell

首先要有访问错误日志的权限,错误日志一般在windows主机像phpstudy一键安装会有高权限,而linux一般权限较低.其次要知道错误日志的路径,从而才能在接下来去包含错误日志
先向服务器发出(考虑到转码问题,建议在burp上发包) 带有的字符串,如:

ip/, 报错,此时被记录到了错误日志中,此时我们就可以包含错误日志使我们的payload被包含进代码。可换成其他payload,从而达到getshell的目的

3.包含session文件

image
image
image
image
image
image
image

先来讲讲session,这是环境。

默认开启session.upload_progress.enabled和关闭session.upload_progress.cleanup这两个参数

有了session_start(),这样我们每次发送请求时都会带上一个Cookie: PHPSESSID

然后,服务端的一个文件夹会专门把不同session的请求的里的$session[]变量存储起来,并命名为sess你的phpsessid。
里面的内容像这样:

那我们就可以尝试去包含这种sess文件来达到getshell的目的(前提是要知道路径,可以从phpinfo里获取:

下面我们去包含一下sess_abccc包含成功

这个sess_abccc里的内容是:

另外的,还可以通过session.upload_progress来进行包含,具体方法我写在php反序列化的session里了

4.截断绕过

image

环境都是这样:

00截断:

在php5.3以前切GPC关闭的情况下,可以通过%00截断来绕过.php的限制。
你可以 传参 ?name=1.txt%00 那么服务器真正包含的文件会是1.txt ,%00会被视作字符串的结束符,从而把字符串截断在.php之前

超长字符串绕过:

在php5.3前,226个英文句号会形成截断效果

问号截断:

image
image

这是专门针对远程文件包含情况的,原理是利用url问号后面部分视作传参部分。
所有版本皆通用(因为严格意义上不算是种漏洞)。


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Leave a Reply

Your email address will not be published. Required fields are marked *

标签云