web安全--文件包含(本地包含,远程包含)

前言

文件包含漏洞简介:

文件包含的函数的参数没有经过过滤或者是严格的定义,并且参数可以被用户所控制,这样就可能包含非预期的文件。

.文件包含漏洞常见的函数(默认都以php脚本为准啊)

①include: 包含并运行指定的文件,Include在出错的时候产生警告,脚本会继续运行

②include_once:在脚本执行期间包含并运行指定文件。该函数和include 函数类似,两者唯一的区别是 使用该函数的时候,php会加检查指定文件是否已经被包含过,如果是,则不会再被包含。

③require :包含并运行指定文件。require在出错的时候产生E_COMPLE_ERROR级别的错误,导致脚本终止运行。

④require_once: 和require函数完全相同。区别类似include和include_once。

文件包含漏洞示例(文件名称就叫做include.php吧)

无限制:没有为包含文件指定特定的前缀或者.php .html 等扩展名

$filename=$_GET['filename'];

Include($filename);

?>

有限制:(随便加一个扩展名上去)

$filename=$_GET['filename'];

Include($filename.".html");

?>

.本地包含漏洞

无限制本地包含漏洞

1)常见的敏感信息路径

window系统:
\boot.ini     系统版本信息

\php.ini      PHP配置信息

\my.ini       MYSQL配置信息

\httpd.conf  Apache配置信息

linux系统:

/etc/passwd  linux系统账号信息

/etc/httpd/conf/httpd.conf   Apache配置信息

/etc/my.conf  MYSQL配置信息

/usr/etc/php.ini  PHP配置信息

2)漏洞利用

读取文件内容(还未纠正)

通过目录遍历可以获取系统中的文件:

http://XXX.X.X.X./include.php?finame=     (传路径即可)

例:我们要访问四级目录中的1.php文件

那就是  http://XXX.X.X.X./include.php?finame=../../../1.php

利用无限制本地包含漏洞执行代码

利用无限制本地包含漏洞,可以通过文件包含功能执行扩展名的文件中的代码

Os:学到这里的时候终于解惑之前的一个疑惑:在做文件上传的题目时,为什么我上传一个图片马,访问该图片用蚁剑无法连接。原因当然是:图片马里面的php代码没有办法解析,如果要解析的话可以配合文件包含漏洞,那样就可以解析图片马里面的php代码(死靶文件随便加加减减呗)

例:Test.txt文件内容是

利用文件包含漏洞test.txt 文件,就可以执行文件中的php代码并输出phpinfo信息

web安全--文件包含(本地包含,远程包含)_第1张图片

有限制本地包含漏洞

如下:

绕过方法:

1)%00截断文件包含

漏洞利用条件:
php版本要低于5.3.4

Magic_quotes_gpc=off

测试:http://127.0.0.1/include.php?filename=1.txt%00

2)路径长度截断文件包含

操作系统存在最大路径长度的限制。可以通过输入超过最大路径的长度的目录,这样系统就会将后面的的路径给舍弃,导致扩展名截断。

漏洞利用条件:

window系统目录下的最大路径长度是256B

Linux系统目录下的最大路径长度是4096B

测试:http://127.0.0.1/include.php?finame=1.txt/../../../../../../../../../../../../../../../../../../../../../../../../../../../(省略不想打了)

3)点号截断文件包含

和‘路径长度文件截断文件包含’同理

三.远程包含漏洞

①无限制远程文件包含漏洞

无限制远程文件包含是指包含文件的位置并不是在本地服务器,而是通过URL的形式包含其他服务器上的文件,执行文件中的恶意代码。

漏洞利用条件:

allow_url_fopen=on

allow_url_include=on

漏洞利用:

直接传参文件的url即可,就不做演示了。

②有限制远程文件包含漏洞(后面再补图)

绕过方法:

1)问号绕过

可以在问好(?)后面添加HTML字符串,问号后面的扩展名.html会被当成查询,从而绕或扩展名过滤

2)井号绕过

可以在井号(#)后面添加HTML字符串,#号会截断后面的扩展名.html,从而逃过扩展名过滤。#号的URL编码为%23

3)空格绕过

在payload的最后对空格进行URL编码  %20

四.PHP伪协议

①常见的php伪协议

1)file://     访问本地文件系统

2)http://   访问HTTP(S)网址

3)ftp://      访问FTP(S)URL

4)php://      访问各个输出输入流

5)zlib://       处理压缩流

6)data://     读取数据

7)glob://      查找匹配的文件路径模式

8)phar://      PHP归档

9)rar://         RAR数据压缩

②php://伪协议

php://伪协议是php提供的一些输入输出流访问功能,允许访问php的输入输出流,标准输入输出和错误描述符,内存中,磁盘备份的临时文件流,以及可以操作其他读取和写入文件的过滤器。

1)php://filter

php://filter是元封装器,设计用于了数据流打开时的筛选过滤应用,对本地磁盘文件进行读写。

以下两种用法相同:
 

?filename=php://filter/read=convert.base64-encode/resource=XXX.php

?filename=php://filter/convert.base64-encode/resource=XXX.php
名称 描述
resource=<要过滤的数据流> 该参数是必需的。指定要过滤的数据流
read=<读链的筛选器列表> 该参数可选。可以设定一个或者多个筛选器名称,以管道符(|分隔
write=<写链的筛选器列表> 该参数可选。可以设定一个或者多个筛选器名称,以管道符(|)分隔

2)php://input

php://input可以访问请求的原始数据的只读流,既可以直接读取POST上没有经过解析的原始数据,但是使用enctype='multipat/from-data"的时候php://input是无效的。

php://input有以下三种用法:


读取POST数据

有空再更

你可能感兴趣的:(web安全)