CTFHub 信息泄露通关笔记2:PHPINFO泄露

目录

一、PHPINFO泄露

1、什么是phpinfo?

[(1)PHP 版本信息 (PHP Version)](#(1)PHP 版本信息 (PHP Version))

(2)系统信息 (System)

[(3)PHP 指令 (PHP Variables)](#(3)PHP 指令 (PHP Variables))

(4)模块信息 (Modules)

(5)环境变量 (Environment)

[(6)HTTP 请求和响应头](#(6)HTTP 请求和响应头)

2、为什么phpinfo会泄露?

(1)根源:开发运维的坏习惯

(2)技术层面:服务器如何处理请求

3、phpinfo泄露的危害

二、PHPINFO渗透实战

1、打开靶场

2、查看phpinfo

3、获取flag值


本文讲解CTFHub的信息泄露-PHPINFO关卡的原理和渗透实战的全过程,系统分析了PHPINFO泄露的安全风险及实战渗透过程。phpinfo()函数会输出PHP环境的详细配置信息,包括系统路径、环境变量等敏感数据。开发者常因调试后未删除临时文件导致该风险。攻击者利用这些信息可实施进一步渗透。文中演示了通过靶场环境访问phpinfo页面,搜索关键词获取flag值的完整渗透流程,强调了及时清理调试文件的重要性。

一、PHPINFO泄露

1、什么是phpinfo?

phpinfo() 是PHP内置的一个函数。当在PHP脚本中调用该函数时,它会生成一个详细的HTML页面,显示关于当前PHP环境的几乎所有配置信息。

复制代码
<?php phpinfo(); ?>

phpinfo() 的输出被组织成多个模块化的章节,每一部分都揭示了不同层面的信息。以下是其输出的关键内容的详细分解:

(1)PHP 版本信息 (PHP Version)

  • 内容 :显示当前安装的 PHP 的确切版本号(如 8.1.12)。

  • 风险:攻击者可以根据已知的 PHP 版本,寻找该版本特有的公开安全风险和 exploits(攻击代码)。使用已停止维护的旧版本(如 PHP 5.x)风险极高。

(2)系统信息 (System)

  • 内容 :运行 Web 服务器的操作系统的类型/版本/各种系统信息(如 Linux server01 5.15.0-xx-generic #xx-Ubuntu SMP ...)。

  • 关键风险点

    • 可用于寻找针对特定操作系统版本的攻击手段。

    • 显示 PHP 正在使用的 php.ini 主配置文件的绝对路径(如 /etc/php/8.1/apache2/php.ini)。知道了路径,攻击者可能会尝试利用文件包含去获取该配置文件,从而了解所有的环境设置。

(3)PHP 指令 (PHP Variables)

  • 内容 :这是最庞大的部分,列出了 php.ini 中所有配置指令的当前生效值。

  • 关键项与风险

    • allow_url_include :如果为 On,PHP 可以通过 include()require() 函数加载远程 URL 的文件,这为远程文件包含 (RFI) 打开了大门。

    • disable_functions :显示被禁用的函数列表。攻击者会查看哪些危险的函数(如 system, exec, passthru, shell_exec)未被禁用,从而规划攻击载荷。

    • open_basedir:定义了 PHP 可以访问文件的目录范围。攻击者可以了解限制的边界,尝试绕过。

    • display_errors :如果为 On,可能会在网站上泄露敏感的错误信息,帮助攻击者推断程序逻辑和数据库结构。

Directive Local Value Master Value
allow_url_fopen On On
allow_url_include Off Off
arg_separator.input & &
arg_separator.output & &
auto_append_file no value no value
auto_globals_jit On On
auto_prepend_file no value no value
browscap no value no value
default_charset UTF-8 UTF-8
default_mimetype text/html text/html
disable_classes no value no value
disable_functions no value no value
display_errors On On
display_startup_errors Off Off
doc_root no value no value
docref_ext no value no value
docref_root no value no value
enable_dl On On
enable_post_data_reading On On
error_append_string no value no value
error_log no value no value
error_prepend_string no value no value
error_reporting no value no value
expose_php On On
extension_dir /usr/local/lib/php/extensions/no-debug-non-zts-20180731 /usr/local/lib/php/extensions/no-debug-non-zts-20180731
file_uploads On On
hard_timeout 2 2
highlight.comment #FF8000 #FF8000
highlight.default #0000BB #0000BB
highlight.html #000000 #000000
highlight.keyword #007700 #007700
highlight.string #DD0000 #DD0000
html_errors On On
ignore_repeated_errors Off Off
ignore_repeated_source Off Off
ignore_user_abort Off Off
implicit_flush Off Off
include_path .:/usr/local/lib/php .:/usr/local/lib/php
input_encoding no value no value
internal_encoding no value no value
log_errors Off Off
log_errors_max_len 1024 1024
mail.add_x_header Off Off
mail.force_extra_parameters no value no value
mail.log no value no value
max_execution_time 30 30
max_file_uploads 20 20
max_input_nesting_level 64 64
max_input_time -1 -1
max_input_vars 1000 1000
memory_limit 128M 128M
open_basedir no value no value
output_buffering 0 0
output_encoding no value no value
output_handler no value no value
post_max_size 8M 8M
precision 14 14
realpath_cache_size 4096K 4096K
realpath_cache_ttl 120 120
register_argc_argv On On
report_memleaks On On
report_zend_debug On On
request_order no value no value
sendmail_from no value no value
sendmail_path -t -i -t -i
serialize_precision -1 -1
short_open_tag On On
SMTP localhost localhost
smtp_port 25 25
sys_temp_dir no value no value
syslog.facility LOG_USER LOG_USER
syslog.filter no-ctrl no-ctrl
syslog.ident php php
track_errors Off Off
unserialize_callback_func no value no value
upload_max_filesize 2M 2M
upload_tmp_dir no value no value
user_dir no value no value
user_ini.cache_ttl 300 300
user_ini.filename .user.ini .user.ini
variables_order EGPCS EGPCS
xmlrpc_error_number 0 0
xmlrpc_errors Off Off
zend.assertions 1 1
zend.detect_unicode On On
zend.enable_gc On On
zend.multibyte Off Off
zend.script_encoding no value no value
zend.signal_check Off Off

(4)模块信息 (Modules)

  • 内容 :列出所有已编译和加载的 PHP 扩展模块(如 mysqli, gd, curl, openssl等)。

  • 风险:每个模块都可能引入新的函数和潜在的安全风险,攻击者会寻找特定模块的已知风险。

(5)环境变量 (Environment)

  • 内容:显示操作系统环境变量。

  • 风险:这些变量可能包含由运维人员设置的敏感信息,如数据库连接字符串、API 密钥、加密密钥等。如果配置不当,这些秘密会直接暴露。

    • $_SERVER['SCRIPT_FILENAME'] :这是绝对路径泄露 中最致命的一项。它显示了当前执行的脚本在服务器上的完整路径(如 /var/www/html/public/index.php)。这是利用本地文件包含 (LFI) 的关键,因为很多 LFI 需要知道文件的绝对路径才能成功包含。

    • $_SERVER['DOCUMENT_ROOT']:显示了 Web 服务器的根目录绝对路径。

    • $_SERVER['PATH']:系统的 PATH 环境变量。

(6)HTTP 请求和响应头

  • 内容:显示当前请求的所有 HTTP 请求头和响应头。

  • 风险 :可能会泄露使用的 Web 服务器软件版本、PHP 版本(通过 X-Powered-By 头)等,这些信息同样可用于指纹识别和寻找安全风险。

2、为什么phpinfo会泄露?

phpinfo泄露的原理是:开发者将包含 phpinfo() 函数的调试脚本遗留在生产环境的Web目录中,导致任何用户都能访问该页面,从而获取关于服务器PHP环境的极度敏感和详细的配置信息。

(1)根源:开发运维的坏习惯

  • 调试目的phpinfo() 是PHP内置的一个极其有用的调试函数。开发者和运维人员会创建一个包含 <?php phpinfo(); ?> 的脚本(如 info.php, test.php, phpinfo.php),用于:

    • 验证PHP是否安装成功。

    • 检查扩展(如 mysql, gd)是否加载。

    • 查看 php.ini 配置文件的具体设置。

    • 确认环境变量和系统路径是否正确。

  • 疏忽遗留 :问题在于,在完成调试并将代码部署到生产服务器后,这个临时用于调试的文件没有被删除 。它就被静静地留在了Web根目录(如 /var/www/html/)下,对互联网上的任何人可见。

(2)技术层面:服务器如何处理请求

  • 静态文件 vs. 动态文件:Web服务器(如Apache、Nginx)对待不同文件的处理方式不同。

    • 对于 .jpg, .txt 等静态文件,服务器会直接将其内容返回给浏览器。

    • 对于 .php 等动态文件,服务器会先将文件交给 PHP解释器 执行,然后将执行后的 输出结果 返回给浏览器。

  • phpinfo() 的执行 :当用户访问 http://example.com/phpinfo.php 时:

    • Web服务器识别到这是一个 .php 文件。

    • 服务器将该文件交给PHP解释器。

    • PHP解释器执行 phpinfo() 函数。

    • 该函数生成一个包含大量系统信息的HTML页面。

    • 这个HTML页面作为执行结果被发回给用户的浏览器。

3、phpinfo泄露的危害

phpinfo() 页面是一个信息宝库,对攻击者来说价值连城。它泄露的信息主要包括:

  • 系统路径

    • _SERVER["SCRIPT_FILENAME"]: 当前脚本的绝对路径。这是最关键的信息之一。

    • _SERVER["PATH_TRANSLATED"]: 另一个显示绝对路径的变量。

    • Configuration File (php.ini) Pathphp.ini 配置文件的位置。

  • 环境变量

    • _SERVER_ENV 数组中的所有变量,可能包含数据库密码等硬编码的敏感信息。
  • PHP配置

    • allow_url_include: 是否允许远程文件包含(RFI)。如果为On,则可以利用文件包含获取Webshell。

    • open_basedir: PHP可访问的目录限制。

    • disable_functions: 被禁用的函数列表,帮助攻击者规避防护,选择可用的函数。

  • 扩展模块: 已安装的PHP扩展,这可以帮助攻击者寻找特定扩展相关安全风险点。

二、PHPINFO渗透实战

1、打开靶场

通过信息泄露-PHPINFO打开靶场题目,本关卡没有提示,只能根据题目名称为phpinfo,分析可能与phpinfo相关,具体如下所示。

点击打开题目,此时系统自动创建Docker环境,下图蓝色部分的URL地址就是靶场环境。

打开靶场链接(challenge-3ed19e9090db0182.sandbox.ctfhub.com),如下所示,提示点击查看phpinfo。

复制代码
http://challenge-3ed19e9090db0182.sandbox.ctfhub.com:10800/

2、查看phpinfo

点击查看phpinfo,如下所示,当前页面显示phpinfo的执行效果。

复制代码
http://challenge-3ed19e9090db0182.sandbox.ctfhub.com:10800/phpinfo.php

3、获取flag值

打开浏览器的搜索功能(Ctrl+F),重点搜索以下关键词搜索关键字ctfhub,如下所示找到flag值,渗透成功。

提交flag后如下所示,告知flag正确,说明渗透成功。

相关推荐
mooyuan天天2 天前
CTFHub 信息泄露通关笔记5:备份文件下载 vim文件
信息泄露·ctfhub·vim信息泄露·swp信息泄露
mooyuan天天3 天前
CTFHub 信息泄露通关笔记9:Git泄露 Index
信息泄露·ctfhub·git泄露·githack
mooyuan天天6 天前
CTFHub RCE通关笔记6:命令注入
rce·命令注入·ctfhub·命令注入漏洞
mooyuan天天10 天前
CTFHub RCE通关笔记3:文件包含 php://input
文件包含·rce·伪协议·文件包含漏洞·ctfhub·phpinput
mooyuan天天10 天前
CTFHub RCE通关笔记5:文件包含 远程包含
文件包含·rce·文件包含漏洞·ctfhub·远程包含·本地包含·phpinput
mooyuan天天12 天前
CTFHub RCE通关笔记1:eval执行(两种方法渗透)
rce·eval·命令执行·ctfhub
mooyuan天天24 天前
CTFHub SSRF通关笔记10:DNS重绑定 Bypass 原理详解与渗透实战
ssrf·ctfhub·ssrf漏洞·数字ip·dns重定向·dns重绑定·ssrf dns重绑定
mooyuan天天25 天前
CTFHub SSRF通关笔记7:URL Bypass 原理详解与渗透实战
ssrf·ctfhub·ssrf漏洞·ip绕过·url绕过
mooyuan天天1 个月前
CTFHub靶场之SSRF Gopher POST请求(python脚本法)
ssrf·ctfhub·gopher·ssrf漏洞·ssrf gopher·gopher协议