web伪协议总结

本文参考公众号 QLU Security
原文链接:click me

一、漏洞依附

  1. allow_url_fopen()打开文件->通常设置为On,使得可以访问 URL 对象文件等。

  2. allow_url_include()引用文件->通常设置为off,包含URL 对象文件等

均可在配置文件,php.ini中查看(通常位置:/usr/local/php/lib)

二、常见协议

  1. data:
    访问本地文件系统

实例:1.?file=data:text/plain, #GET数据

2.?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4= #后面的base64字符是需要传入的字符串的base64编码

  1. phar:
    可以查找指定压缩包内的文件,说通俗点就是php解压缩包的一个函数,解压的压缩包与后缀无关。

实例:filename=phar://test.[zip/jpg/png…]/file.txt

可以将任意后缀名的文件(必须要有后缀名),只要是zip格式压缩的,都可以进行解压,因此上面可以改为phar://test.test/file.txt也可以运行。

  1. temp:
    一个类似文件 包装器的数据流,允许读写临时数据.会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。

  2. php://filter:
    (1) 一般用于任意文件读取,有时也可以用于getshell.在双OFF的情况下也可以使用.

(2) 参数设置:read用于include()和file_get_contents(),write用于file_put_contents()中。
在这里插入图片描述

①实例用法:php://filter/[read/write]=string.[rot13/strip_tags/……]/resource=xxx

②php://filter/convert.base64-[encode/decode]/resource=xxx

这是使用的过滤器是convert.base64-encode.它的作用就是读取upload.php的内容进行base64编码后输出。可以用于读取程序源代码经过base64编码后的数据

  1. php://input:
    可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。enctype=”multipart/form-data时,php://input是无效的。

实例:file=php://input hackbarPost数据
在这里插入图片描述

  1. memory:
    是一个类似文件 包装器的数据流,允许读写临时数据,总是把数据储存在内存中

  2. file:f在双OFF的时候也可以用,用于本地文件包含注:file://协议必须是绝对路径

实例:file:// [文件的绝对路径和文件名]

Linux:http://127.0.0.1/FI/LFI.php?file=file:///etc/passwd

Windows:http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

8.zip:
压缩流。

9.Expect:
处理交互式的流

总的来说就是:
在这里插入图片描述

三,常见漏洞函数

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

四,常见绕过过滤方法

在这里插入图片描述

<think> 我们正在处理用户关于PHP伪协议和伪静态的请求。用户希望了解这两个概念的定义、原理、应用等相关信息。我们将根据提供的引用内容,结合相关知识,以清晰的结构组织回答。 首先,我们注意到引用中提供了关于伪静态的信息: - 引用[1]说明伪静态是改变URL表现形式,实际仍是动态页面,但具有类似静态页面的SEO优势。 - 引用[2]提到伪静态在SEO优化中的作用,以及不同服务器环境(独立服务器和虚拟主机)的实现方式。 - 引用[3]解释了伪静态通过URL重写实现,使URL更规范美观,但会降低性能(因为增加了CPU开销)。 - 引用[4]补充了伪静态会增加CPU开销,而真实静态化主要开销在磁盘IO。 关于PHP伪协议,引用[5]提到了“php伪协议分析”,但具体内容不多。因此,我们需要结合其他知识来补充。 下面我们分别介绍伪静态和PHP伪协议: ### 1. 伪静态 **定义**:伪静态是指通过服务器端规则(如URL重写)将动态URL转换为静态形式的技术。虽然URL看起来像静态页面(例如以.html结尾),但实际内容仍是动态生成的。 **原理**: - 通过Web服务器(如Apache的mod_rewrite模块)或应用程序框架的路由机制,将用户请求的静态URL重写为服务器内部可处理的动态URL。 - 例如,用户请求`http://example.com/page/3`,服务器内部将其重写为`http://example.com/index.php?page=3`,然后由PHP脚本处理并返回内容。 **应用**: - **SEO优化**:静态URL更易被搜索引擎抓取和索引(引用[2])。 - **用户友好**:简洁的URL提升用户体验(引用[3])。 - **兼容性**:在不支持生成真静态页面的环境下(如虚拟主机),实现类似静态URL的效果。 **优缺点**: - 优点:改善SEO,提升URL美观度,无需生成大量静态文件(节省存储空间)。 - 缺点:增加服务器CPU负担(每次请求需重写URL并执行动态脚本)(引用[3][4])。 **实现方式**: - **Apache**:使用`.htaccess`文件配置RewriteRule(引用[2])。 - **Nginx**:在配置文件中使用`rewrite`指令。 - **PHP框架**:如Laravel、ThinkPHP等内置路由功能。 ### 2. PHP伪协议 **定义**:PHP伪协议(PHP Wrappers)是PHP提供的用于访问不同流资源(如文件、HTTP、FTP等)的封装协议。它们以`<scheme>://...`格式使用,常见于文件处理函数(如`fopen()`、`include()`)。 **原理**: - PHP内置了多种流封装协议,通过特定前缀标识协议类型。当使用这些协议时,PHP会调用对应的流处理器来读写数据。 - 例如:`file://`访问本地文件,`http://`发起HTTP请求,`php://`访问输入/输出流等。 **常见伪协议及用途**: 1. `php://input`:读取POST请求的原始数据(常用于获取未解析的POST体)。 2. `php://output`:直接写入输出缓冲(可用于生成动态文件下载)。 3. `php://filter`:在读写流时应用过滤器(如编码转换),常被用于文件包含漏洞利用(引用[5]间接提及)。 4. `data://`:直接嵌入数据(如`data:text/plain;base64,SSBsb3ZlIFBIUA==`)。 5. `phar://`:访问PHAR(PHP归档)文件内的内容。 **安全风险**: - 部分伪协议(如`php://filter`、`phar://`)可能被恶意利用进行文件包含或反序列化攻击(引用[5]中的“php伪协议分析”可能指此)。 **应用场景**: - **数据处理**:动态读取POST数据(`php://input`)。 - **资源操作**:通过统一接口处理不同来源的数据流(文件、网络等)。 - **调试与测试**:模拟数据流。 ### 对比总结 | **特性** | **伪静态** | **PHP伪协议** | |----------------|-------------------------------|-----------------------------| | **目的** | 优化URL结构,提升SEO | 统一资源访问接口 | | **实现层面** | Web服务器或应用路由 | PHP语言内置协议处理 | | **性能影响** | 增加CPU开销(重写规则+动态处理) | 取决于具体协议(一般无显著开销) | | **典型应用** | 内容管理系统(CMS)、博客 | 文件操作、数据流处理 | §§相关问题§§ 1. 伪静态与真静态网页在性能上有何区别? 2. 如何通过.htaccess文件实现伪静态? 3. PHP伪协议在安全方面有哪些风险? 4. 如何防御利用PHP伪协议的攻击? </think> ### PHP伪协议与伪静态详解 #### 一、伪静态(Pseudo-Static) 1. **定义与原理** 伪静态通过URL重写技术(如Apache的`mod_rewrite`或Nginx的`rewrite`规则)将动态URL转换为静态形式,例如: 原始动态URL:`https://example.com/index.php?page=3` 伪静态URL:`https://example.com/page/3` **核心原理**:服务器内部将静态化URL重定向到对应的动态脚本处理,实际仍是动态页面[^1][^3]。 2. **应用场景** - **SEO优化**:静态URL(如`/news/123.html`)比动态URL(`news.php?id=123`)更易被搜索引擎收录,提升排名[^2]。 - **用户体验**:简洁美观的URL提高用户信任度和分享率(如百度网盘伪静态链接)[^3]。 - **兼容性需求**:虚拟主机用户无法直接生成真静态页时,伪静态是折中方案[^2]。 3. **实现方式** - **独立服务器**:通过`ISAPI_Rewrite`(IIS)或`.htaccess`(Apache)编写规则[^2]。 - **虚拟主机**:依赖程序框架(如WordPress、Discuz!)的路由功能实现[^2]。 ```nginx # Nginx伪静态规则示例 location / { try_files $uri $uri/ /index.php?$query_string; } ``` 4. **优缺点** | **优点** | **缺点** | |------------------------------|-----------------------------------| | 提升SEO效果 | **增加CPU开销**(重写解析消耗资源)| | 隐藏技术细节,增强安全性 | **性能低于真静态**(需动态生成内容)| | 兼容动态功能(如用户登录) | 规则配置复杂,调试困难 | --- #### 二、PHP伪协议(PHP Wrappers) 1. **定义与原理** PHP伪协议是PHP内置的流处理协议,格式为`<scheme>://...`,用于访问不同数据源(文件/网络/内存等)。常见协议: - `php://input`:读取原始POST数据 - `php://filter`:对流进行过滤处理(如编码转换) - `data://`:直接嵌入数据(如`data:text/plain,Hello`) - `phar://`:访问PHAR归档文件 2. **应用场景** - **数据处理**:通过`php://input`获取未解析的POST数据(如API接收JSON)。 - **文件操作**:用`php://filter`对文件流进行编码: ```php $content = file_get_contents("php://filter/read=convert.base64-encode/resource=config.ini"); ``` - **安全测试**:渗透测试中利用协议读取敏感文件(如`php://filter/resource=/etc/passwd`)[^5]。 3. **安全风险** - **文件包含漏洞**: ```php include($_GET['file']); // 若传入?file=php://filter/convert.base64-encode/resource=index.php ``` 可泄露源码(Base64编码后输出)。 - **远程代码执行**:结合`phar://`触发反序列化漏洞(需依赖`phar`扩展)。 --- #### 三、对比总结 | **特性** | 伪静态 | PHP伪协议 | |----------------|--------------------------------|-------------------------------| | **目的** | URL美化与SEO优化 | 统一资源访问接口 | | **实现层** | Web服务器/应用层路由 | PHP语言内部流处理 | | **性能影响** | 增加CPU开销[^4] | 几乎无额外开销 | | **典型工具** | Apache的mod_rewrite, Nginx规则 | PHP的流包装器函数 | | **安全关注点** | 规则错误导致循环重定向 | 不当使用引发文件包含/代码执行 | #### 四、实践建议 1. **伪静态优化**: - 对高并发站点,用缓存(如Redis)缓解CPU压力[^4]。 - 避免过度重定向,规则需精确匹配(如正则优化)。 2. **伪协议防护**: - 禁用危险协议:在`php.ini`中设置`allow_url_include=Off`。 - 过滤用户输入:避免直接传入`include()`/`file_get_contents()`的参数。 > 提示:伪静态适用于内容型网站(如博客/论坛),而伪协议需谨慎用于数据流处理场景[^1][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北境L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值