PHP伪协议精讲(文件包含漏洞)

PHP伪协议是用于访问资源的特殊方法,常见于文件包含漏洞的利用中,可能导致敏感信息泄露。文章列举了如php://input、php://filter等伪协议的用法,以及在PHP开发中如何避免安全风险。同时,提到了data://、phar://等协议的安全隐患,强调了对用户输入的校验和安全配置的重要性。
摘要由CSDN通过智能技术生成

1、什么是PHP伪协议PHP伪协议PHP伪协议

      PHP伪协议事实上就是支持的协议与封装协议,简单来说就是php定义的一种特殊访问资源的方法,在web渗透漏洞利用中常用于配合文件配合进行web攻击,查询到网站中隐藏的机密文件,造成敏感信息泄露等影响。

2、什么时候用PHP伪协议 

      文件包含漏洞, 对了,这次改个思路,不用漏洞作为本文章的切入点,而是用开发角度作为切入点,呵呵。

      我们在PHP开发中可能遇到的文件包含函数:
1、include 2、require 3、include_once 4、require_once 5、highlight_file 6、show_source 7、flie 8、readfile 9、file_get_contents 10、file_put_contents 11、fopen (比较常见)

      这些函数有潜在的风险,若前后端未对用户输入做安全校验,且用户输入恶意入参,可能导致以上函数与PHP伪协议结合,造成安全风险, 具体PHP开发涉及文件包含函数的用法就不一一列举了,可参考如下文章(大神写的很好,本哥就不自己解释了):

http://t.csdn.cn/7kbXG

3.常见伪协议即其用法

6988fb520be94d409acac00c97f4ee92.png

 

1)php://input 

php://input 是个可以访问请求的原始数据的只读流,获取POST请求数据的协议
当enctype=”multipart/form-data” 的时候 php://input 是无效的。

要使php://input 成功使用还需要配置php.ini 中的 allow_url_include设置为On

11d6071f772341249854bcf4993b1c26.png

案例代码

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

构造执行的代码,输出结果 

d0ffebc2e35241c891f5e114f31e191d.png 

2)php://filter

      php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
      在利用上很多都是与包含函数结合使用,读入或者输出获取文件源码然后编码让其不执行从而输出。

php://filter 的使用:如
php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

php://filter 伪协议组成:
read=<读链的筛选列表>
resource=<要过滤的数据流>
write=<写链的筛选列表>

php://filter/read=处理方式(base64编码,rot13等等)/resource=要读取的文件

read 对应要设置的过滤器:
常见的过滤器分字符串过滤器、转换过滤器、压缩过滤器、加密过滤器
其中convert.base64-encode ,convert.base64-decode都属于 转换过滤器

例子

<?php
$a=($_GET["file"]);
echo(file_get_contents($a));//获取文件内容
?>

访问输出base64编码后的内容 

a74bb7e1863a4b328822f86e97f74cb0.png

!!!非常重要!!!

转换过滤器,伪协议中的字符被过滤时,convert.*过滤器支持convert.iconv.* 格式,

使用方法:

convert.iconv.<input-encoding>.<output-encoding>或convert.iconv.<input-encoding>/<output-encoding>

例如:

convert.iconv.UCS-4*.UCS-4BE   --->  将指定的文件从UCS-4*转换为UCS-4BE 输出

构造url,然后使用bp进行爆破:?filename=php://filter/convert.iconv.a.b/resource=check.php

PHP支持的编码格式如下:

https://blog.csdn.net/m0_56107268/article/details/127846196?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168907808016800182181381%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168907808016800182181381&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-127846196-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=%E6%94%BB%E9%98%B2%E4%B8%96%E7%95%8C%20file_include&spm=1018.2226.3001.4187https://blog.csdn.net/m0_56107268/article/details/127846196?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168907808016800182181381%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168907808016800182181381&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-127846196-null-null.142%5Ev88%5Econtrol_2,239%5Ev2%5Einsert_chatgpt&utm_term=%E6%94%BB%E9%98%B2%E4%B8%96%E7%95%8C%20file_include&spm=1018.2226.3001.4187

3)zip:// , bzip2://, zlib:// 协议 

      zip:// 等属于压缩流的协议,通过直接压缩普通文件为zip文件(绕过文件上传检查用),再通过zip:// 协议读取,可以直接执行php代码。压缩后的zip文件可以随意修改后缀也不影响zip://协议读取。(注意是如phpinfo.txt直接压缩为zip,而不是文件夹压缩zip)
例: 

<?php
$a=($_GET["file"]);
include($a);
?>

压缩及协议访问格式: 

压缩文件为.zip后缀
zip://绝对路径/phpinfo.zip%23phpinfo.php
压缩文件为.bz2后缀
compress.bzip2://绝对路径/phpinfo.zip/phpinfo.php
压缩文件为.gz后缀
compress.zlib://绝对路径/phpinfo.zip/phpinfo.php

zip://访问 

66d78b7d6c3b4ffaab08c9150da7a778.png

4)data:// 

      data://协议与php://input 有很点相似的地方。他们都可以通过请求提交的php代码数据配合文件包含函数可以达到代码执行效果,data:// 的成功执行需要php.ini设置allow_url_include 与allow_url_open都为On。
      data://协议的格式是: data://数据流封装器,相应格式数据。

常见的用法为
data://,<?php%20phpinfo();?>   
data://text/plain,<?php%20phpinfo();?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

例子:

<?php
$a=($_GET["file"]);
include($a);
?>

构造data:// 访问 

735d0c914a6b4781ac269c4eecc6e7f8.png 

5)phar:// 

phar://伪协议可以对zip格式压缩包进行访问解析。
格式为:phar://绝对路径\phpinfo.zip\phpinfo.php 

1a2aca0a256148f19cd3adf915f8cbe0.png

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值