在我们平时的渗透、ctf的过程中,或多或少会碰到phpinfo
页面。但是这个页面包含的信息太多,常常感觉无从下手,在这里总结一下,可能没有那么全面。
2019.2.28 时代在发展,技术在进步。将近两年的时间已经有了好多新姿势,中间有好几次想完善一下这篇blog,一直没做,这次终于拔掉了这个flag,23333~
2019.3.4 修改了一些错误,写了一个抓取重要信息的小工具:https://github.com/proudwind/phpinfo_scanner
基本信息
php版本
这是最基本的,php更新速度非常快,各版本都有一些小特性。
http://www.cnblogs.com/iamstudy/articles/study_from_php_update_log.html
php7的一些特性:
图片内容来自p师傅小密圈。
system info
详细的操作系统信息,为提权做准备
server api
php解释器与应用层的桥梁。
FPM/FastCGI 多用于和nginx通信,当然也可用于其他web中间件。
Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编写
https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75
Apache 2.0 Handler php为apache提供的专用SAPI
Command Line Interface php命令行
CGI/FastCGI 碰见的几次都是用于iis
配置文件位置
某些情况下可以加载自己的扩展。
Registered PHP Streams and filters
常见的就不说了。
phar
利用phar/zip协议绕过有后缀的文件包含:include zip:///var/www/html/upload/1.gif#1.php
phar反序列化 https://paper.seebug.org/680/
gopher
dict
探测为主
核心配置
extension_dir
php扩展的路径
allow_url_include
远程文件包含,但是一般不会开启
asp_tags
php标签有4种形式,如果这个选项不开启的话,使用asp的标签是不会解析的。
这里有一篇.user.ini
+asp_tags
绕过的文章 针对内容(php tags)检测的一种绕过思路
原来的文章已经删了,说说大体意思。当<?php ?>
标签被过滤时,可以通过.user.ini来覆盖php.ini中的配置。.user.ini在nginx等其他web中间件中也是有效的,应用范围比.htaccess广。
注意: 在PHP 7已经完全移除了这种标签
short_open_tag
还是标签的问题,允许<??>
这种形式,并且<?=
等价于<? echo
disable_functions
有时候我们上传了一个webshell却不能用,有很大可能是管理员做了配置,禁用了php执行系统命令的函数。
绕过的方式有这么几个:
黑名单绕过
百密一疏,寻找黑名单中漏掉的函数,上图中禁用的函数算是比较全的了。
比如在编译php时如果加了**
-–enable-pcntl
**选项,就可以使用pcntl_exec()
来执行命令。利用扩展(如ImageMagick)绕过
利用环境变量LD_PRELOAD来绕过
利用环境变量LD_PRELOAD来绕过php disable_function
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
利用扩展库绕过
一个综合:https://github.com/l3m0n/Bypass_Disable_functions_Shell
enable_dl
上面说的利用扩展库绕过disable_functions,需要使用dl()
并且开启这个选项
magic_quotes_gpc
这个就不用多说了吧
open_basedir
这个参数将用户可操作的文件限制在某目录下,但是这个限制是可以绕过的。
PHP Variables
真实ip
iis用
cdn什么的都不存在的,找到真实ip,扫一扫旁站,没准就拿下几个站。
当网站使用了nginx反向代理时,如果反代服务器和web服务器在同一内网,这个值可能会是内网ip。
当网站在docker中运行时,这个值会是宿主机docker网卡上的ip。
web根目录
$_SERVER['DOCUMENT_ROOT']
可能会有偏差。
临时文件路径
向phpinfo()
页面post一个shell(自己写一个上传页面),可以在_FILES["file1"]
中看到上传的临时文件,如果有个lfi,便可以直接getshell了。
https://github.com/hxer/vulnapp/tree/master/lfi_phpinfo
扩展
imagick
前段时间影响比较大的漏洞,注意看版本。
漏洞影响ImageMagick 6.9.3-10之前的版本,包括ubuntu源中安装的ImageMagick。
libxml
libxml 2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的 xml 文件时未对 xml 文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,会导致XXE。
memcache
redis
redis也不用多说了吧
session
主要是序列化的一些问题
序列化处理器不一致导致对象注入
当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。
具体可以看我的另一篇文章php对象注入总结。
xdebug
xdebug命令执行
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