当我们看到phpinfo时在谈论什么
我们在渗透测试的过程中,如果存在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_fopen
和allow_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()
查看一些特殊的程序服务,比如redis
,memcache
,mysql
,Smtp
,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)
参考链接
- https://xz.aliyun.com/t/2222
- https://xz.aliyun.com/t/521
- https://www.k0rz3n.com/2019/02/12/PHPINFO 中的重要信息/
- https://xz.aliyun.com/t/5535
END
建了一个微信的安全交流群,欢迎添加我微信备注进群
,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注
当我们看到phpinfo时在谈论什么的更多相关文章
- [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2
声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...
- 当我们谈论Erlang Maps时,我们谈论什么 Part 2
声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.兴许Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...
- [Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1
Erlang 增加 Maps数据类型并不是很突然,因为这个提议已经进行了2~3年之久,只不过Joe Armstrong老爷子最近一篇文章Big changes to Erlang掀起不小了风 ...
- 当我们谈论Erlang Maps时,我们谈论什么 Part 1
Erlang 添加 Maps数据类型并非非常突然,由于这个提议已经进行了2~3年之久,仅仅只是Joe Armstrong老爷子近期一篇文章Big changes to Erlang掀起不小了 ...
- [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 ...
- [转]用C/C++扩展PHP详解
原文:http://www.imsiren.com/archives/547 一个简单的扩展模块 PHP非常容易扩展,因为它提供了我们想用的所有API. 如果要新建一个扩展,需要在PHP源码中执行ex ...
- 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 ...
- Windows7 x64配置 Apache2 + PHP5 + MySQL5
1:相关软件下载: Apache HTTP Server 版本:(httpd-2.2.25-win32-x86-openssl-0.9.8y) PHP ...
- php 环境的搭建
---恢复内容开始--- 在win7下配置 PHP + Apache + Mysql 环境 1. 准备环境 php: php-5.3.2-Win32-VC6-x86.VC9是专门为IIS定制的,VC6 ...
随机推荐
- 利用 Python 进行数据分析(Python 数据分析)· 第 2 版
译者:SeanCheney 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 机器学习交流群 629470233 ApacheCN 学习资源 Sklearn 与 ...
- AT3527 [ARC082D] Sandglass
解法一 直接考虑在初始为 \(a\) 的情况下时刻 \(t\) 时 \(A\) 中剩余的沙子是行不通的,不妨反过来考虑在时刻 \(t\) 每个初始值 \(a\) 的答案,令其为 \(f_t(a)\). ...
- Network Kit与三七游戏共创流畅游戏体验,无惧网络延迟
本文分享于HMS Core联盟论坛<[开发者说]无惧高网络吞吐量,HMS Core Network Kit与三七游戏共创流畅游戏体验>的采访整理. 三七游戏拥有<斗罗大陆·魂师对决& ...
- git命令log与reflog的比较
感谢原文作者:杨鲜生 原文链接:https://blog.csdn.net/u013252047/article/details/80230781 用git命令,想看到自己的操作记录,则可以使用log ...
- windows doc命令复制粘贴文件
# 删除前端文件 rmdir /s/q E:\yuanbo2019\public\static del E:\yuanbo2019\public\index.html @echo off ::被复制的 ...
- Linux文件系统与日志分析的了解
Linux文件系统与日志分析 1.inode和block概述 2.模拟inode耗尽实验 3.ext类型文件恢复 4.xfs类型文件恢复 5.日志文件 6.日志分析 1.文件:文件是存储在硬盘上的,硬 ...
- Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构
Zookeeper.Kafka集群与Filebeat+Kafka+ELK架构 目录 Zookeeper.Kafka集群与Filebeat+Kafka+ELK架构 一.Zookeeper 1. Zook ...
- Solution -「多校联训」轮回
\(\mathcal{Description}\) 有 \(n\) 个黑盒,第 \(i\) 个黑盒可以让输入变量以 \(p_i\) 的概率保持不变,以 \(\frac{1-p_i}2\) 的概率加 ...
- linux 运维工程师如何降低工作难度
文章目录 1.Linux "优化" 2.git "优化" 3.mysql "优化" 4.kubernetes "优化" ...
- CobaltStrike逆向学习系列(7):Controller 任务发布流程分析
这是[信安成长计划]的第 7 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller->TeamServer 0x02 TeamServer->Beacon ...