phpinfo关注信息
phpinfo介绍
PHP中提供phpinfo()
函数,该函数返回 PHP 的所有信息,包括了 PHP 的编译选项及扩充配置、PHP 版本、服务器信息及环境变量、PHP 环境变量、操作系统版本信息、路径及环境变量配置、HTTP 标头及版权宣告等信息。
代码
<?php phpinfo(); ?>示例
利用
很多PHP站点在测试搭建PHP环境是否正确后没有及时删除,这些敏感信息的泄露将会增大服务器被渗透的风险。
-
php版本信息
方便本地搭建环境,不同版本之间也存在函数参数和安全性机制的差异
-
系统的版本信息
-
Loaded Configuration File(配置文件位置)
php.ini
的位置 -
Registered PHP Streams(支持的流) 在文件包含、反序列化还有一些关键的bypass的时候非常有用
-
Registered Stream Filters(支持的流过滤器) 同样是在文件包含、反序列化还有一些关键的bypass的时候有用
-
allow_url_fopen & allow_url_include 文件包含必看选项之一,如果
allow_url_fopen
和allow_url_include
都为On的时候,则文件包含函数是可以加载远程文件的,可以利用远程文件包含漏洞直接执行任意命令。攻击者在自己的web服务器上放一个可执行的恶意文件,通过目标网站存在的远程文件包含漏洞来加载文件,从而实现执行任意命令的目的
-
disable_functions 命令执行、代码执行必看选项之一。该指令可用于禁止某些函数,接收逗号分隔的函数名列表作为参数,通过bypass目标站点的
disable_functions
达成RCE -
display_errors & display_startup_errors 调试过程中经常使用的错误提示,在没有关闭的情况下放入生产环境是不堪设想的
-
open_basedir 这个选项设置了文件读取的时候的目录限制,将用户可操作的文件限制在某目录下(可绕过)
-
short_open_tag 判断服务器是否支持短标签,方便写入
shell
-
phar 文件包含还有反序列化重点关注,在文件系统函数( file_get_contents 、 unlink 等)参数可控的情况下,配合
phar://
伪协议 ,可以不依赖反序列化函数unserialize()
直接进行反序列化的操作 -
session 查看session的相关配置,在文件包含和反序列化的时候有用
-
SERVER_ADDR 真实IP
-
_FILE[“file”] 获取临时文件名字和路径,本地文件包含GetShell
-
_SERVER[“PATH”] 这是windows下特有的,能显示出系统的所有环境变量
-
_SERVER[“SCRIPT_FILENAME”] 找到网站的绝对路径
-
Gopher 可以配合SSRF发起攻击
-
Fastcgi 查看是否开启Fastcgi和Fastcgi的版本,可能导致解析漏洞,远程命令执行,任意文件读取等问题
-
支持的程序 可以通过
phpinfo()
查看一些特殊的程序服务,比如redis
,memcache
,mysql
,Smtp
,curl
等等。如果服务器装了redis
或者memcache
,可以尝试寻找SSRF来getshell
安全建议
- 禁用phpinfo页面:在Web服务器配置中禁用phpinfo页面,可以有效避免phpinfo信息泄露攻击
- 删除phpinfo脚本文件:在开发和测试过程中,删除或者关闭phpinfo脚本文件,避免其对外暴露
- 设置phpinfo脚本文件的权限:设置phpinfo脚本文件的权限,只允许授权用户访问该文件,避免攻击者利用漏洞访问该文件
- 进行Web应用程序安全测试:通过渗透测试等方式对Web应用程序进行安全测试,及时发现和修复可能存在的安全漏洞,避免敏感信息泄露