在我们平时的渗透、ctf的过程中,或多或少会碰到phpinfo页面。但是这个页面包含的信息太多,常常感觉无从下手,在这里总结一下,可能没有那么全面。

基本信息

php版本

phpinfo正确食用方式 - 图1
这是最基本的,php更新速度非常快,各版本都有一些小特性。
http://www.cnblogs.com/iamstudy/articles/study_from_php_update_log.html
phpinfo正确食用方式 - 图2

SYSTEM INFO

phpinfo正确食用方式 - 图3
详细的操作系统信息,为提权做准备

SERVER API

phpinfo正确食用方式 - 图4
php解释器与应用层的桥梁。
1、FPM/FastCGI 多用于和nginx通信,当然也可用于其他web中间件。
Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编写
https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75
2、Apache 2.0 Handler php为apache提供的专用SAPI
3、Command Line Interface php命令行
4、CGI/FastCGI 碰见的几次都是用于iis

配置文件位置

phpinfo正确食用方式 - 图5
某些情况下可以加载自己的扩展。

REGISTERED PHP STREAMS AND FILTERS

常见的就不说了。
1、phar
利用phar/zip协议绕过有后缀的文件包含:include zip:///var/www/html/upload/1.gif#1.php
phar反序列化
https://paper.seebug.org/680/
2、gopher
利用 Gopher 协议拓展攻击面
https://github.com/tarunkant/Gopherus
3、dict
探测为主
phpinfo正确食用方式 - 图6
谈一谈php://filter的妙用

核心配置

EXTENSION_DIR

phpinfo正确食用方式 - 图7
php扩展的路径

ALLOW_URL_INCLUDE

远程文件包含,但是一般不会开启

ASP_TAGS

phpinfo正确食用方式 - 图8
php标签有4种形式,如果这个选项不开启的话,使用asp的标签是不会解析的。
当标签被过滤时,可以通过.user.ini来覆盖php.ini中的配置。.user.ini在nginx等其他web中间件中也是有效的,应用范围比.htaccess广。
注意: 在PHP 7已经完全移除了这种标签

SHORT_OPEN_TAG

phpinfo正确食用方式 - 图9
还是标签的问题,允许这种形式,并且<?=等价于<? echo

DISABLE_FUNCTIONS

phpinfo正确食用方式 - 图10
有时候我们上传了一个webshell却不能用,有很大可能是管理员做了配置,禁用了php执行系统命令的函数。
绕过的方式有这么几个:
1、黑名单绕过:
百密一疏,寻找黑名单中漏掉的函数,上图中禁用的函数算是比较全的了。
比如在编译php时如果加了-–enable-pcntl选项,就可以使用pcntl_exec()来执行命令。
2、利用扩展(如ImageMagick)绕过
利用ImageMagick漏洞绕过disable_function
3、利用环境变量LD_PRELOAD来绕过
利用环境变量LD_PRELOAD来绕过php disable_function
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
4、利用扩展库绕过
http://www.91ri.org/8700.html
一个综合:https://github.com/l3m0n/Bypass_Disable_functions_Shell

ENABLE_DL

phpinfo正确食用方式 - 图11
上面说的利用扩展库绕过disable_functions,需要使用dl()并且开启这个选项

MAGIC_QUOTES_GPC

phpinfo正确食用方式 - 图12
这个就不用多说了吧

OPEN_BASEDIR

phpinfo正确食用方式 - 图13
这个参数将用户可操作的文件限制在某目录下,但是这个限制是可以绕过的。
PHP绕过open_basedir列目录的研究
php5全版本绕过open_basedir读文件脚本
绕过open_basedir读文件脚本

PHP VARIABLES

真实IP
phpinfo正确食用方式 - 图14
phpinfo正确食用方式 - 图15
cdn什么的都不存在的,找到真实ip,扫一扫旁站,没准就拿下几个站。
当网站使用了nginx反向代理时,如果反代服务器和web服务器在同一内网,这个值可能会是内网ip。
当网站在docker中运行时,这个值会是宿主机docker网卡上的ip。

WEB根目录

phpinfo正确食用方式 - 图16
$_SERVER[‘DOCUMENT_ROOT’]可能会有偏差。

临时文件路径

向phpinfo()页面post一个shell(自己写一个上传页面),可以在_FILES[“file1”]中看到上传的临时文件,如果有个lfi,便可以直接getshell了。
phpinfo正确食用方式 - 图17
https://github.com/hxer/vulnapp/tree/master/lfi_phpinfo

扩展

IMAGICK

前段时间影响比较大的漏洞,注意看版本。
漏洞影响ImageMagick 6.9.3-10之前的版本,包括ubuntu源中安装的ImageMagick。
ImageMagick 漏洞利用方式及分析

LIBXML

libxml 2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的 xml 文件时未对 xml 文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,会导致XXE。

MEMCACHE

Memcache未授权访问漏洞利用及修复

REDIS

redis也不用多说了吧

SESSION

主要是序列化的一些问题
phpinfo正确食用方式 - 图18
序列化处理器不一致导致对象注入:
当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。
具体可看:https://seaii-blog.com/index.php/2017/09/12/70.html

OPCACHE

当开启了opcache并可以上传文件时,可以在本地生成一个与服务器文件名相同的文件,并生成缓存文件xx.php.bin。上传后恶意缓存文件会将服务器上的原文件覆盖,从而getshell。
需要将缓存文件的system_id和timestamp两个字段为服务器上文件的值。
system_id可以使用工具https://github.com/GoSecure/php7-opcache-override修改。

IMAP

https://github.com/vulhub/vulhub/blob/master/php/CVE-2018-19518/README.md


另外发一个小工具:https://github.com/proudwind/phpinfo_scanner
这个能自动抓取phpinfo把有用的信息给呈现出来