Xiuno BBS 审计之问题11:后台 phpinfo() 暴露完整服务器环境信息
贰先生 12小时前

问题:后台 phpinfo() 暴露完整服务器环境信息

此文章为XIUNOX版本重构审计时发现问题,XIUNOX版本已优化修复此问题。分享出来方便后续想基于xiuno bbs4.0.4版本制作维护版本或插件模板等需求的开发者和站长参考。

现象

Xiuno BBS 4.0.4 后台 admin/route/index.php 提供了一个 phpinfo 动作分支,直接调用 phpinfo() 输出完整 PHP 环境信息。虽然该接口位于后台(需管理员权限),但后台存在无 CSRF Token 漏洞(见独立审计文件),攻击者可通过 CSRF 诱导管理员访问 admin-index-phpinfo.htm,使 phpinfo 页面在管理员浏览器中渲染;又因 phpinfo 页面包含大量敏感信息(绝对路径、PHP 版本、已加载扩展、$_SERVER$_ENV$_COOKIE、数据库连接句柄等),可被用于:

  • 探测绝对路径,辅助文件包含/路径穿越利用
  • 探测 PHP 版本与已禁用函数(disable_functions),辅助命令执行利用
  • 探测 document_rootupload_tmp_diropen_basedir 等关键路径配置
  • 若 phpinfo 页面被搜索引擎收录或缓存(后台 URL 简短可猜测),则未认证泄露

代码中虽 unset($_SERVER['conf'])unset($_SERVER['db'])unset($_SERVER['cache']) 试图擦除业务变量,但 phpinfo 仍会暴露 $_COOKIE(含 bbs_admin_token)、$_SERVER['HTTP_COOKIE']、环境变量、所有 ini 配置等大量敏感数据。

源码证据

证据 1:后台 phpinfo 动作直接调用 phpinfo() 文件:xiunobbs_4.0.4/admin/route/index.php 行 50-57

} elseif ($action == 'phpinfo') {
	
	unset($_SERVER['conf']);
	unset($_SERVER['db']);
	unset($_SERVER['cache']);
	phpinfo();
	exit;
	
}

第 55 行 phpinfo(); 直接输出完整 PHP 信息页面。$action 来自 param(1)(第 5 行 $action = param(1);),即 URL 路径第二段,访问 admin-index-phpinfo.htm 即触发。exit 前无任何额外的访问控制或输出过滤。

证据 2:后台鉴权依赖可被 CSRF 绕过的 Cookie 文件:xiunobbs_4.0.4/admin/admin.func.php 行 8-17

function admin_token_check() {
	global $longip, $time, $useragent, $conf;
	$useragent_md5 = md5($useragent);
	
	//$key = md5($longip.$useragent_md5.$conf['auth_key']); // 有些环境是动态 IP
	$key = md5((XN_ADMIN_BIND_IP ? $longip : '').$useragent_md5.xn_key());
	
	// hook admin_token_check_start.php
	
	$admin_token = param('bbs_admin_token');

后台仅校验 bbs_admin_token Cookie,无 CSRF Token。攻击者可构造  img src="admin-index-phpinfo.htm"> 诱导管理员访问;虽然 <img> 不会渲染 phpinfo HTML,但通过 <script>/fetch/表单提交等方式可使管理员浏览器加载该页面,配合 XSS 读取页面 DOM 即可窃取 phpinfo 文本内容。

证据 3:phpinfo 暴露的敏感信息类别(PHP 标准行为) phpinfo() 默认输出 -1(全部)级别,包含:

  • $_COOKIE:含 bbs_tokenbbs_admin_token(Cookie 值明文显示)
  • $_SERVER['HTTP_COOKIE']:原始 Cookie 头
  • $_SERVER['DOCUMENT_ROOT']SCRIPT_FILENAME:绝对路径
  • disable_functionsopen_basedir:环境限制
  • PHP 版本、已加载扩展(用于版本漏洞利用)
  • $_ENV:环境变量(可能含 DB 密码等)

风险等级与结论

风险等级:中高危

结论:

  1. 后台 phpinfo 动作直接输出完整 PHP 环境信息,暴露绝对路径、PHP 版本、disable_functions、Cookie 值等敏感数据。
  2. 虽需管理员权限,但后台无 CSRF Token,攻击者可诱导管理员访问,间接获取 phpinfo 内容(配合 XSS 读取 DOM)。
  3. unset($_SERVER['conf']/['db']/['cache']) 仅擦除三个自定义键,无法阻止 phpinfo 暴露 $_COOKIE$_SERVER$_ENV、ini 配置等大量信息。
  4. 修复建议:移除 phpinfo 动作分支,或将其限制为超级管理员且需二次密码确认;如必须保留,改用 phpinfo(INFO_LICENSE) 等最小化输出;后台 CSRF Token 修复后该接口的间接泄露面方可收敛。
最新回复 (0)
全部楼主
返回