我们在渗透测试的过程中,如果存在phpinfo界面,我们会想到什么?

大部分内容摘抄自:https://www.k0rz3n.com/2019/02/12/PHPINFO 中的重要信息/

关于phpinfo

PHP中提供了PHPInfo()函数,该函数返回 PHP 的所有信息,包括了 PHP 的编译选项及扩充配置、PHP 版本、服务器信息及环境变量、PHP 环境变量、操作系统版本信息、路径及环境变量配置、HTTP 标头、及版权宣告等信息。

我们编写test.php文件

<?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_fopenallow_url_include都为On的时候,则文件包含函数是可以加载远程文件的,可以利用远程文件包含漏洞直接执行任意命令。

攻击者在自己的web服务器上放一个可执行的恶意文件,通过目标网站存在的远程文件包含漏洞来加载文件,从而实现执行任意命令的目的

  • disable_functions

    命令执行,代码执行必看选项之一。该指令可用于禁止某些函数,接收逗号分隔的函数名列表作为参数,通过bypass目标站点的disable_functions达成RCE

  • display_errors & display_startup_errors

调试过程中经常使用的错误提示在没有关闭的情况下放入生产环境是不堪设想的

  • open_basedir

这个选项设置了文件读取的时候的目录限制,将用户可操作的文件限制在某目录下

但是这个限制是可以绕过的,之前P牛给出了绕过方法-PHP绕过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()查看一些特殊的程序服务,比如redismemcachemysqlSmtp,curl等等。如果服务器装了redis或者memcache,可以尝试寻找SSRF来getshell

检测POC

基于pocsuite3的phpinfo泄露检测脚本

from pocsuite3.api import requests
from pocsuite3.api import register_poc
from pocsuite3.api import Output, POCBase, logger
import ssl ssl._create_default_https_context = ssl._create_unverified_context class TestPOC(POCBase):
vulLevel = 3
vulID = ''
version = '1.0'
vulDate = ''
references = ['']
name = 'phpinfo敏感信息泄露'
appPowerLink = ''
appName = 'phpinfo'
appVersion = ''
vulType = 'phpinfo敏感信息泄露'
desc = '''
'''
samples = [''] def _verify(self):
result = {}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
}
phpinfoList=[
'/phpinfo.php','/1.php','/test.php'
] for path in phpinfoList:
vulurl = "{}{}".format(
self.url.rstrip('/'), path)
try:
resp = requests.get(url=vulurl, headers=headers, timeout=3, verify=False)
if "PHP Version" in resp.text and resp.status_code == 200:
result['VerifyInfo'] = {}
result['VerifyInfo']['url'] = vulurl
return self.parse_attack(result)
except Exception as e:
logger.error("connect target '{} failed!'".format(vulurl))
pass return self.parse_attack(result) def parse_attack(self, result):
output = Output(self)
if result:
output.success(result)
else:
output.fail('Internet nothing returned')
return output register_poc(TestPOC)

参考链接

END

建了一个微信的安全交流群,欢迎添加我微信备注进群,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注


当我们看到phpinfo时在谈论什么的更多相关文章

  1. [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2

    声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...

  2. 当我们谈论Erlang Maps时,我们谈论什么 Part 2

    声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.兴许Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...

  3. [Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1

         Erlang 增加 Maps数据类型并不是很突然,因为这个提议已经进行了2~3年之久,只不过Joe Armstrong老爷子最近一篇文章Big changes to Erlang掀起不小了风 ...

  4. 当我们谈论Erlang Maps时,我们谈论什么 Part 1

         Erlang 添加 Maps数据类型并非非常突然,由于这个提议已经进行了2~3年之久,仅仅只是Joe Armstrong老爷子近期一篇文章Big changes to Erlang掀起不小了 ...

  5. [Erlang 0121] 当我们谈论Erlang Maps时,我们谈论什么 Part 3

    Erlang/OTP 17.0 has been released  http://www.erlang.org/download/otp_src_17.0.readme     Erlang/OTP ...

  6. [转]用C/C++扩展PHP详解

    原文:http://www.imsiren.com/archives/547 一个简单的扩展模块 PHP非常容易扩展,因为它提供了我们想用的所有API. 如果要新建一个扩展,需要在PHP源码中执行ex ...

  7. windows8.1下php环境搭建及基本配置(php+apache+mysql)

    一.php下载安装:php-5.6.1-Win32-VC11-x64.zip.解压,操作: 1.复制php.ini-production,更名为php.ini 2.在环境变量PATH末尾添加:D:\p ...

  8. Windows7 x64配置 Apache2 + PHP5 + MySQL5

    1:相关软件下载: Apache HTTP Server             版本:(httpd-2.2.25-win32-x86-openssl-0.9.8y) PHP             ...

  9. php 环境的搭建

    ---恢复内容开始--- 在win7下配置 PHP + Apache + Mysql 环境 1. 准备环境 php: php-5.3.2-Win32-VC6-x86.VC9是专门为IIS定制的,VC6 ...

随机推荐

  1. Lua 语言: 语法

    转载请注明来源:https://www.cnblogs.com/hookjc/ -- 两个横线开始单行的注释 --[[  加上两个[和]表示     多行的注释.--]] -------------- ...

  2. 各种字体.效果和名字对应图. --- by 王朋

    原帖地址:http://www.oschina.net/question/565065_76244

  3. 带你十天轻松搞定 Go 微服务系列(九、链路追踪)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  4. Spring中的属性注入注解

    @Inject使用 JSR330规范实现的 默认按照类型注入 如果需要按照名称注入,@Inject需要和@Name一起使用 @Resource JSR250规范实现的,需要导入不同的包 @Resour ...

  5. 框架5--nginx安装部署 下(web服务)

    目录 1.提纲 2.Nginx虚拟主机 3.Nginx日志 4.Nginx访问控制模块 5.Nginx状态监控模块 6.访问连接控制模块 框架5--nginx安装部署 下(web服务) 1.提纲 1. ...

  6. pycharm软件安装

    目前热门的编程软件: 1.VScode 小巧轻便但是对小白不是很优化 2.sublime 时下最流行的代码编辑器,功能十分强大可以运行在windows.macOS和linux系统中,小白先不要使用 3 ...

  7. .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

  8. 树莓派使用docker安装青龙面板和改面板端口号

    配置环境 系统:Raspbian 11(64位) 设备:树莓派4B 系统默认没有防火墙,所以就不用在防火墙中开放端口. 一.安装docker(已安装省略) 1.安装 curl -fsSL https: ...

  9. C# 实例解释面向对象编程中的里氏替换原则

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...

  10. CentOS7防火墙firewall

    一.Firewall 1. 从CentOS7开始,默认使用firewall来配置防火墙,没有安装iptables(旧版默认安装). 2. firewall的配置文件是以xml的格式,存储在 /usr/ ...