文件包含漏洞2

1. 函数
1)include_once
  • 作用: include_once语句在脚本执行期间包含并运行指定文件。
  • 特点: 与include类似,但唯一区别是如果文件已被包含过,则不会再次包含,且会返回true。
  • 用途: 用于确保文件只被包含一次,避免函数重定义、变量重新赋值等问题。
2)require
  • 作用: require和include几乎完全一样,用于包含并运行指定文件。
  • 区别: require在出错时产生E_COMPILE_ERROR级别的错误,导致脚本中止;而include只产生警告(E_WARNING),脚本会继续运行。
3)require_once
  • 作用: require_once与require类似,但确保文件只被包含一次。
  • 特点: 如果文件已被包含过,则不会再次包含,避免重复包含导致的错误。
4)file
  • 作用: file将整个文件读入一个数组中。
  • 用途: 便于对文件内容进行逐行处理或分析。
2. PHP伪协议
  • 定义: PHP伪协议是用来访问其他格式文件的一种协议。
  • 支持协议:
    • file:// - 访问本地文件系统
    • http:// - 访问HTTP(s)网址
    • ftp:// - 访问FTP(s) URLs
    • php:// - 访问各个输入/输出流(I/O streams)
    • zlib:// - 压缩流
    • data:// - 数据(RFC 2397)
    • glob:// - 查找匹配的文件路径模式
    • phar:// - PHP归档
    • ssh2:// - Secure Shell 2
    • rar:// - RAR
    • ogg:// - 音频流
    • expect:// - 处理交互式的流
  • 注意: 某些伪协议需要对应的扩展模块功能开启才能支持,例如expect协议用于执行命令,需开启相应模块。
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

文件包含漏洞相关函数

include, require, include_once, require_once, fopen, readfile, highlight_file, show_source, file_get_contents, file

区分include和require的错误处理方式;理解include_once和require_once的防重复包含机制

★★★

伪协议

PHP内置URL风格的封装协议,用于访问不同格式的文件

识别并理解各种伪协议的作用;了解伪协议使用所需的扩展模块

★★★★

include与require

include:包含并运行文件,错误时产生警告并继续运行;require:包含并运行文件,错误时终止运行并抛出错误

include与require的错误处理差异

★★

include_once与require_once

防止文件被多次包含,只包含一次

include_once与require_once的防重复机制;与include/require的区分

★★★

文件操作函数

fopen:打开文件或URL;readfile:读取并输出文件;highlight_file/show_source:语法高亮显示文件;file_get_contents:读取整个文件到字符串;file:读取整个文件到数组

各函数的具体功能和使用场景;识别可能导致文件包含漏洞的函数

★★★★

伪协议种类

支持多种伪协议,如file://, http://, ftp://等,用于访问不同格式的文件

了解并识别各种伪协议;了解伪协议使用的限制和条件

★★★★★

一、文件包含漏洞相关案例演示
1. 部署DVWA靶场
  • 部署环境:需要将DVWA的PHP代码解压到PHP集成环境(如PHPStudy)中,配置好Apache和PHP环境
  • 数据库配置:部署完成后需要配置数据库才能正常使用
  • 登录信息:默认用户名admin,密码password
2. 文件包含漏洞原理
  • 核心函数:漏洞产生的原因是使用了PHP的include函数
  • 设计意图:原本设计用于包含本地文件(file1.php、file2.php、file3.php)
  • 漏洞成因:未对用户输入进行严格过滤,导致可以包含任意文件
  • PHP配置要求:需要检查php.ini中的allow_url_fopen和allow_url_include配置是否开启
3. 文件包含漏洞演示
1)medium级别
  • 防护措施:使用str_replace过滤"http://"、"https://"和"../"等字符串
  • 绕过方法:采用双写方式绕过(如hthttp://tp://)
  • 示例演示:
    • 原始输入:http://192.168.142.66/alert.html
    • 绕过输入:hthttp://tp://192.168.142.66/alert.html
  • 限制:虽然有一定防护作用,但并非绝对安全
2)impossible级别
  • 防护优势:从根本上杜绝了任意文件包含的可能性
  • 最佳实践:这是最安全的防护方式,建议在实际开发中采用
  • 绕过限制:即使结合文件上传漏洞,也无法绕过白名单限制
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

文件包含漏洞原理

使用include函数未严格过滤用户输入导致可包含任意文件

本地包含与远程包含的区别

⭐⭐

DVWA靶场部署

PHPStudy环境配置+数据库部署

默认账号admin/password

Low级别漏洞利用

直接通过参数包含phpinfo.php或远程文件

路径跳转../../的使用

⭐⭐

Medium级别绕过

str_replace过滤http://和../的双写绕过

htthttp://tp://替换后重组

⭐⭐⭐

High级别突破

利用file://伪协议读取系统文件

需结合文件上传漏洞使用

⭐⭐⭐⭐

Impossible防护

白名单机制限制仅能访问file1/2/3.php

正确修复方案示范

渗透测试技巧

Cookie携带security=low&PHPSESSID保持会话

工具调用时的认证问题

⭐⭐⭐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值