常见漏洞总结----文件包含漏洞

1、文件包含
开发人员将相同的函数写入单独的文件中,需要使用某个函数时,直接调用此文件,无需自此编写,这种通过文件调用的过程称为文件包含。

2、文件包含漏洞
开发人员为了使代码灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

3、文件包含相关函数

require():找不到被包含的文件,报错并且停止运行脚本。
include():找不到被包含的文件,只会报错,但会继续运行脚本。
require_once():与require()类似,区别在于重复调用同一脚本时,程序只调用一次。
include_once():与include()类似,区别在于重复调用同一函数时,程序只调用一次。

4、文件包含的特征:

?page=
?home=
?file=

5、文件包含分类

1)本地文件包含
2)远程文件包含

6、目录遍历与文件包含
目录遍历是可以读取web目录以外的其他目录,其根源在于对路径访问权限设置不严格,针对于本系统。
文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。

·当处于PHP环境时,被包含的文件会被优先当作php文件进行解析,当被包含的文件含有php代码时,会执行该文件中的php代码,不包含php代码时,会被原样输出。因此我们可以在包含的文件中植入php代码(如,一句话木马。)

7、绕过方法:

1)滤掉了http://和https://:可采用双写或者大小写的方式绕过。
2)滤掉了“../”和“..\”:可采用...//./或者....//绕过。
3)使用%00截断

服务器底层语言基本都是用C家族语言编写的,在C语言中%00表示空,例如,对于禁止包含php文件的规则,假如要上传一个php文件,可将文件名写成1.jpg%00.php,当浏览器的中间件含有解析漏洞时,浏览器会把文件解析为jpg文件,%00后面的内容被截断,就会将此文件放过,而最终包含的 文件为1.jpg.php

4)使用长字节截断
在Windows下目录最大长度为256字节,Linux下为4096字节,后面超过的部分会被忽略。因此可以使用足够长的目录进行访问,前面使用./././或等内容进行填充,超过256字节或者4096字节后再在后面添加想要包含的内容,这样超过的部分服务器就不会再进行检测,但是执行的时候还是会对后面添加的内容进行执行。

8、防御方法

1

)严格限制包含中的参数,取消那些不可控的参数。
2)开启open_basedir()函数,将其设置为指定目录,则只有该目录的文件允许被访问。
3)如果不需要文件包含,则关闭allow_url_include()函数,防止远程文件包含,这是最安全的办法。
4)如果需要使用文件包含,则通过使用白名单的方法对要包含的文件进行限制,这样可以做到既使用了文件包含,又可以防止文件包含漏洞。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值