第一部分:学习准备与环境配置
刚开始接触网络安全实践,搭建一个合适的实验环境是第一步。我主要准备了以下两种环境:
Windows平台测试环境:
使用 PHPStudy 集成环境包,快速搭建Apache+PHP+MySQL组合
配合 Xdebug 扩展进行PHP代码调试
使用 VSCode 作为代码编辑器,安装相关安全插件
Linux平台测试环境:
安装 Ubuntu 作为基础系统
手动编译安装 Nginx 和 PHP-FPM,更贴近生产环境
配置 Python 3.10 环境,用于编写测试脚本
行业现状简析:现在实际渗透测试经验比CTF竞赛技能更受重视,云环境和容器(如Docker)相关安全问题占比很高。传统SQL注入漏洞因预编译技术普及而减少,更多漏洞出现在协议层和逻辑层。
第二部分:PHP文件包含漏洞解析
文件包含漏洞是PHP应用中常见的安全问题,核心在于include、require等函数对用户输入处理不当。
基本漏洞原理 :
当PHP代码动态包含用户可控的文件路径时,如果没有充分过滤,攻击者可能读取或执行任意文件。
php
php
// 存在漏洞的代码示例
$page = $_GET['page'];
include($page . '.php');
PHP伪协议利用 :
PHP提供了多种伪协议,可被用于文件包含漏洞的利用:
php://filter:最常用的协议,可读取文件源码
php://input :当
allow_url_include开启时,可将POST数据作为PHP代码执行data://:直接在URI中嵌入代码执行
file://:访问本地文件系统,不受URL包含限制
实际测试发现 :
即使包含的文件扩展名不是.php(如.txt),只要文件内容包含有效的PHP标签和代码,依然会被执行。这是文件包含漏洞危险性的重要体现。
第三部分:PHAR协议与反序列化
PHAR协议提供了一个将文件包含与反序列化结合的攻击面,值得特别注意。
PHAR文件结构特点 :
PHAR是PHP的归档文件格式,包含存根(stub)、清单(manifest)、文件内容和签名四部分。其中清单部分使用序列化数据存储元数据。
攻击原理 :
当使用phar://协议包含文件时,PHP会自动反序列化清单中的元数据。如果其中包含恶意序列化对象,可能触发危险操作。
实际利用场景 :
攻击者可将恶意PHAR文件伪装成图片(如修改扩展名为.jpg)上传,然后通过文件包含漏洞以phar://协议引用该文件,触发反序列化漏洞,执行任意代码。
这种攻击方式绕过了常见的文件上传检查(仅检查文件扩展名或文件头),在同时存在文件上传和文件包含功能的应用中风险较高。
第四部分:高级利用技巧
在实际测试中,文件包含漏洞的利用方式非常灵活,以下是一些进阶技巧:
Session文件包含 :
如果知道Session文件存储路径且能控制Session部分内容,可通过包含Session文件执行代码。Session文件通常位于/tmp/sess_[PHPSESSID]或/var/lib/php/sessions/目录。
日志文件注入 :
通过污染Web服务器日志(如访问日志、错误日志)注入PHP代码,然后包含日志文件执行代码。常见日志路径包括/var/log/apache2/access.log、/var/log/nginx/access.log等。
临时文件竞争包含 :
PHP处理文件上传时会生成临时文件,处理完成后立即删除。通过精确的时间竞争,可能在删除前包含这些临时文件执行代码。
配置文件包含 :
尝试包含Web服务器配置文件(如nginx.conf、httpd.conf),可能获取敏感信息或通过配置特性进一步利用。