内容简介:思考一下获得了 PHPINFO 以后我们需要观察哪些比较重要的信息来帮助我们进一步渗透我们知道 PHP 不同版本之间在很多方面都有着差异,当然我么重点关注的肯定是一些函数参数以及一些安全性机制的差异。特别是 PHP5 和 PHP7 之间的差异尤其的大,因此知道了 PHP 的确切版本是我们需要做的第一步。
思考一下获得了 PHPINFO 以后我们需要观察哪些比较重要的信息来帮助我们进一步渗透
0X01 PHPINFO 中的敏感信息
1.PHP 版本信息
我们知道 PHP 不同版本之间在很多方面都有着差异,当然我么重点关注的肯定是一些函数参数以及一些安全性机制的差异。特别是 PHP5 和 PHP7 之间的差异尤其的大,因此知道了 PHP 的确切版本是我们需要做的第一步。
2.系统的版本信息
系统无非是两种 Linux 和 Windows ,这在我们后期命令执行的时候或者是 bypass disable_function 的时候有用
3.Configure Command(编译命令)
这个其实就是编译 php 的时候的命令,这里面其实包含了几乎所有的, php 要加载的扩展和功能,但是看起来不是很方便(因为比较乱),但也是一目了然,当然这些功能在后面都有专门的栏目介绍。
4.Loaded Configuration File(配置文件位置)
这一栏表明了 php.ini 这个 php 配置文件的位置,在有文件读取的情况下可以进行读取,在渗透中还是很有帮助的。
5.Registered PHP Streams(支持的流)
这个在文件包含、反序列化还有一些关键的 bypass 的时候非常有用
6.Registered Stream Filters(支持的流过滤器)
这个同样在文件包含、反序列化还有一些关键的 bypass 的时候非常有用
7.Core(核心)
这个栏目里面有非常多重要的配置信息,我们可以简单的看一下:
(1)allow_url_fopen&allow_url_include
文件包含必看选项之一
(2)disable_functions
命令执行、代码执行必看选项之一,具体可以看我的这篇文章
(3)错误提示
调试过程中经常使用的错误提示在没有关闭的情况下放入生产环境是不堪设想的
(4)enable_dl
该选项 默认为 on(在未来将被移除) ,我们看一下 官方手册怎么说的
该指令仅对 Apache 模块版本的 PHP 有效。 你可以针对每个虚拟机或每个目录开启或关闭 dl() 动态加载 PHP 模块。
关闭动态加载的主要原因是为了安全。通过动态加载,有可能忽略所有 open_basedir 限制。 默认允许动态加载,除了使用 安全模式。在安全模式,总是无法使用 dl()。
(5)extension_dir
和 dl() 配合使用效果更好,具体可以看这篇文章
(6)include_path
PHP 用include()函数包函文件时的默认路径
(7)open_basedir
这个选项设置了文件读取的时候的目录限制
(8)short_open_tag
判断服务器是不是支持短标签,这在写 shell 的时候很有帮助
8.phar
文件包含还有反序列化重点关注
9.SESSION
session.save_path=”” –设置session的存储路径
session.save_handler=”” –设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式)
session.auto_start boolen –指定会话模块是否在请求开始时启动一个会话,默认为0不启动
session.serialize_handler string –定义用来序列化/反序列化的处理器名字。默认使用php
例如:
session.save_path="D:\xampp\tmp"表明所有的session文件都是存储在xampp/tmp下 session.save_handler=files 表明session是以文件的方式来进行存储的 session.auto_start=0表明默认不启动session session.serialize_handler=php 表明session的默认序列话引擎使用的是php序列话引擎
这几个选项在文件包含的时候以及反序列化的时候非常的有用,具体可以参考一下LCTF2018 的一道题 以及我之前的这篇文章
10.PHP Variables
(1)_SERVER[‘PATH’]
这个是 windows 下特有的,能显示出系统的所有环境变量
(2)_SERVER[“SCRIPT_FILENAME”]
这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的。
(3)_SERVER[“SERVER_ADDR”]
显示该网站的真实的 ip 地址,有时候通过phpinfo()泄漏的ip可以查查旁站、c段什么的,直接无视cdn。
(4)_FILES[“filename”]
在给PHP发送POST数据包时,如果数据包里包含文件区块,无论你访问的代码中有没有处理文件上传的逻辑,PHP都会将这个文件保存成一个临时文件(通常是/tmp/php[6个随机字符]),文件名可以在$_FILES变量中找到。这个临时文件,在请求结束后就会被删除。
这是常用的配合文件包含 get,shell 的方式,具体可见这篇文章
11.gopher
可以配合 SSRF 发起攻击
12.fastcgi
查看是否开启fastcgi和fastcgi的版本,可能导致解析漏洞、远程命令执行、任意文件读取等问题
13.支持的程序
可以通过phpinfo()查看一些特殊的程序服务,比如 redis 、memcache、 mysql 、SMTP、curl等等如果服务器装了redis或者memcache可以通过ssrf来getshell了,在discuz中都出现过此类问题。如果确定装了redis或memcache的话,在没有思路的情况下,可以着重找一下ssrf
0X02 PHPINFO 中要解释的信息
1.Thread Safety
这个信息有点意思,我们一般看到的都是 disable ,但是这不代表不安全,因此这个选项严格的讲并不叫“线程安全”,应该叫 “线程安全检查”。
None Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查。 Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程,耗尽系统资源。
再看看这两者的选择。
为了与外部交换数据,PHP提供了一种叫SAPI的接口。
SAPI是一个中间过程,提供了一个和外部通信的接口,有点类似于socket。
SAPI使得PHP可以和其他应用进行交互数据(如Apache、Nginx等)。
PHP默认提供了很多种SAPI,常见的提供给Apache、Nginx、IIS6/7的FastCGI,单独给IIS的ISAPI,以及Shell的CLI。
FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率。
而线程安全检查是为ISAPI方式的PHP准备的,也就是为IIS准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。
所以,如果是以 FastCGI 执行 PHP ,都建议用Non Thread Safe的 PHP (zip安装包)。
2.expose_php
这个选项开启将会在 http 包的头部显示 php 的版本等信息,是一种信息泄露,建议关闭
0X03 总结
简单翻了一下 phpinfo 花了一点时间整理,为了以后方便吧~
以上所述就是小编给大家介绍的《PHPINFO 中的重要信息》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 热烈祝贺闪捷信息正式成为中国信息协会量子信息分会会员单位
- 安盟信息法院信息系统勒索病毒防护方案
- SQL Server 查找统计信息的相关采样信息
- 关键信息基础设施重要信息资产漏洞治理的实践和思考
- 干货 | 聚焦「信息压缩」,IBM 携手 MIT 再解读「信息瓶颈」理论
- 医疗行业信息安全敲响警钟 黑客攻击或致大量公民个人信息泄露
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Art of UNIX Programming
Eric S. Raymond / Addison-Wesley / 2003-10-3 / USD 54.99
Writing better software: 30 years of UNIX development wisdom In this book, five years in the making, the author encapsulates three decades of unwritten, hard-won software engineering wisdom. Raymond b......一起来看看 《The Art of UNIX Programming》 这本书的介绍吧!