您当前的位置: 首页 >  web安全

暂无认证

  • 1浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

发布时间:2022-04-05 12:50:52 ,浏览量:1

前言

文件包含漏洞简介:

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

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

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

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

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

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

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

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

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

②有限制本地包含漏洞

如下:

绕过方法:

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数据

有空再更

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

1.7162s