首页 > 编程语言 >【PHP系列】phpinfo里面有什么?

【PHP系列】phpinfo里面有什么?

时间:2024-07-27 18:50:18浏览次数:11  
标签:文件 php 系列 index phpinfo session PHP fastcgi

一、INFO_GENERAL:一般信息

1.1 版本

1.2 操作系统版本和SAPI

原创 猎豹安全中心 小豹讲安全 2021-05-25 14:30

在PHP中,我们往往通过phpinfo()函数(及可选选项)来检查配置设置和预定义变量,返回结果输出关于PHP的配置信息,其中包含了 PHP 编译选项、启用的扩展、PHP 版本、服务器信息和环境变量(如果编译为一个模块的话)、PHP环境变量、操作系统版本信息、path 变量、配置选项的本地值和主值、HTTP 头和PHP授权信息(License)。根据phpinfo()的可选选项,重点分析部分选项信息。

一、INFO_GENERAL:一般信息

1.1 版本

首先很明显就是PHP的版本了。截至写下这篇文章,PHP已经发布到PHP 8.0.3,但目前应用最广泛的仍然还是5和7版本了。PHP各个版本之间有很多特定的安全利用的trick,以下列举PHP 5到8版本之间与安全性的部分改动信息。

__autoload自动加载类,但只能一次调用;spl_autoload_register加载类,__autoload的实现
    修复空字符截断
    新增全局变量__DIR__
    phar://流包装,绕过后缀限制、文件操作触发反序列化
    glob://绕过open_dir列目录
    删除注册全局变量、魔术引号、和安全模式
    新增session.upload_progress.enabled,默认为1,可用来文件包含
    废除preg_replace中可代码执行的\e修饰符
    容易引发变量覆盖的函数import_request_variables()不可用
   运算符...实现函数中支持可变数量的参数列表
    移除script标签<script language="php"></script>、asp标签<% ... %>、<%= ... %>
    含十六进制字符串不再被认为是数字
    assert()成为一种语言构造,而不是一个函数,意味着很多assert一句话都会失效
    移除preg_replace中可代码执行的\e修饰符
    废除mb_ereg_replace()和mb_eregi_replace()的e模式修饰符
    禁用assert以字符串作为第一个参数
    废除可以动态执行字符串的create_function
    废除容易导致变量覆盖的parse_str()无设置参数的行为
    字符串数字弱类型比较优化
    assert()不再支持执行代码
    移除mb_ereg_replace()的e模式
    移除create_function
    移除php://filter中的string.strip_tags

这里仅仅列举各版本之间部分的改动信息,更多内容可在官方文档中进行查看。

1.2 操作系统版本和SAPI

操作系统版本信息可用于后续提权

SAPI可以明显地判断PHP的连接方式

Apache 2.0 Handler是通过Apache服务器的mod_php模块部署PHP服务的运行方式

FPM(FastCGI流程管理器)则是PHP FastCGI的一种替代实现。FPM有一个设计缺陷,由于两个进程间的通信没有进行安全性验证,可以伪造Nginx发送给FastCGI封装的数据给PHP-FPM去进行解析

1.3 配置文件路径和加载路径

Configuration File (php.ini) Path指的是PHP默认的配置文件路径,Loaded Configuration File是实际加载的配置文件。
这个php.ini文件可有或可无真实的文件(比如docker),其加载的配置文件会表示为"none"。

有无加载php.ini之间,其默认配置会有一些区别。
phith0n师傅在小密圈通过Discuz 7.x/6.x的全局变量防御绕过导致代码执行这个例子,提出了这样一个差异,request_order项在apt安装(有php.ini)和docker(无php.ini)下的默认值分别为GP和CGP。

由于这里显示的是apt安装自己设定好的情况,查看安装的模块配置文件是放在Scan this dir for additional .ini files目录,显示加载到的模块详情在Additional .ini files parsed查看,源码安装其值则为none。

当源码安装PHP或安装扩展时候,使用设置--with-config-file-path或--with-config-file-scan-dir选项来完成,那么在运行时,PHP将扫描加载所

有以.ini为后缀的文件,并在显示在Additional .ini files parsed项。

假设以上路径可控,即可读可写,那么可控制覆盖PHP配置进行提权等操作。

1.4 协议/包装器(Registered PHP Streams)

php://是php特有的协议,用于访问PHP的输入输出流、标准输入输出和错误描述符等功能

php://input可访问请求的原始数据的只读流,即POST请求的情况下,php://input可以获取到POST数据,但使用enctype="multipart/form-data"的时候,php://input是无效的
php://output只写的数据流,允许允许以print和echo一样的方式写入到输出缓冲区
php://filter常用到的伪协议,设计用于数据流打开时的筛选过滤应用(即Registered Stream Filters),读文件、读源码等有明显效果

file://访问本地文件系统(绝对路径)guan,比如浏览器打开file:///d:/www/example.html

读取本地文件readfile('file:///etc/passwd');

glob://查找匹配的文件路径模式,查找的文件路径也需要限定在open_basedir范围内

data://可分为三部分,比如data://text/plain;base64,cGhwaW5mbw==

第一部分就是data协议头,标识了这个内容为一个data URI资源
第二部分为MIME类型,表示这个内容以怎样的方式去展现,比如text/plain即以文本类型展示
第三部分为编码设置,默认编码是 charset=US-ASCII,以上示例即为base64

http、https、ftp和ftps这些再熟悉不过了,略...

zipPHP的读写zip文件的压缩流,zip文件压缩包可以压缩存放一个webshell,利用文件读取或者包含漏洞,
比如file=zip:///var/www/html/upload/abc.zip#shell.php可执行利用。

除此之外,类似的压缩流协议还有compress.bzip2://compress.zlib://等。

pharPHP的读写归档,在不经过解压的情况下能够被php所访问并且执行。phar配合文件操作直接拓展了PHP反序列化攻击的利用面,并且还能绕过一大部分文件上传检测。

1.5 流过滤器(Registered Stream Filters)

PHP在Registered Stream Filters项默认提供了可用过滤器列表,以用于在调用php://filter打开数据流进行读写时,应用相应的流过滤器对数据筛选。

可用过滤器列表如下:

标签:文件,php,系列,index,phpinfo,session,PHP,fastcgi
From: https://www.cnblogs.com/o-O-oO/p/18269167

相关文章

  • PHP 之腾讯云对象存储生成临时地址
    一、代码示例/***生成cos签名*@paramstring$httpURI你的url地址,如:https://xxxx.com/123/23/test.png*@paramstring$expires有效时间分钟*@paramstring$headerList*@paramstring$urlParamList*@paramstring$httpParameters*@paramstring$htt......
  • ctfshow-web入门-php特性(web142-web146)
    目录1、web1422、web1433、web1444、web1455、web1461、web142要求 v1是数字,之后将v1乘以0x36d(即16进制的869)五次,然后将结果转换为整数并赋值给变量$d,使用sleep函数使程序休眠$d秒,最后读取flag.php文件的内容并输出到浏览器。那直接传0呗,不然乘出来都太......
  • 从零开始搭建博客系列-终
    结束,也是新的开始。‍不知不觉也写了接近30篇博客了,也帮助到了很多人,甚是欣慰。本文就做一个小结吧......
  • 从零开始搭建博客系列-终
    结束,也是新的开始。‍不知不觉也写了接近30篇博客了,也帮助到了很多人,甚是欣慰。本文就做一个小结吧......
  • 4、内存品牌分类介绍(芝奇) - 计算机硬件品牌系列文章
    芝奇(‌G.Skill)‌是一家全球领先的内存模块专业制造商,‌属于一线品牌。‌芝奇,‌全称芝奇国际实业股份有限公司,‌是一家来自中国台湾台北市的内存模块专业制造商。‌自2003年开始涉足计算机内存制造业,‌芝奇以其出色的DDR、‌DDR2、‌DDR3和DDR4计算机内存而著称。‌该品牌......
  • Hisiphp2.0.11的文件上传
    侵权声明本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系:[[email protected]]。我们将在确......
  • nginx 代理php
    centos7.6nginx编译安装./configure--prefix=/data/apps/nginx\--user=nginx\--group=nginx\--with-http_stub_status_module\--with-http_ssl_module\--with-http_gzip_static_module\--with-stream\--with-http_v2_module\--with-http_realip_mo......
  • 【愚公系列】《短视频生成与剪辑实战》005-使用 Midjourney 进行 Al 绘图
    ......
  • Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应
    什么是授权(Authorization)?在ASP.NETCore中,授权(Authorization)是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,授权与身份验证相互独立,但是,授权需要一种身......
  • Redis系列---【Linux系统离线安装redis5.0.7】
    Linux系统离线安装redis5.0.71.下载redis安装包方式一:shell命令下载wgethttp://download.redis.io/releases/redis-5.0.7.tar.gz方式二:手动官网下载官网地址:https://redis.io/download2.上传到服务器上传到/opt/app/middles/目录下3.解压并安装tar-zvxfredi......