Xiuno BBS 审计之问题13:管理员发帖 doctype=0 时存储型 XSS

简介: Xiuno BBS 4.0.4存在高危存储型XSS漏洞:管理员发HTML帖(doctype=0)时,内容绕过htmlspecialchars及xn_html_safe过滤直入库,前台模板裸echo输出,可执行任意脚本,窃取token、劫持账号。(239字)

问题:管理员发帖 doctype=0 时存储型 XSS(绕过 htmlspecialchars)

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

现象

Xiuno BBS 4.0.4 在帖子内容入库格式化时,对 doctype=0(HTML 类型)的处理存在特权分支:当发帖人 gid==1(管理员组)时,原文 message 未经 htmlspecialchars 也未经 xn_html_safe 白名单过滤,直接赋值给 message_fmt 入库。前台模板 post_list.inc.htmthread.htm 又以 <?php echo $first['message_fmt'];?> 原样输出,未做二次转义。

攻击者只要拿到管理员账号(或通过弱口令、CSRF 劫持后台),即可在帖子中植入任意 <script>,对所有浏览该帖的访客(含其他管理员、版主、普通会员)执行存储型 XSS,进而窃取 bbs_token/bbs_admin_token、伪造操作、挂马、水坑攻击。

源码证据

证据 1:入库格式化逻辑——gid==1doctype==0 时跳过转义 文件:xiunobbs_4.0.4/model/post.func.php 行 349-361

// 写入时格式化
function post_message_fmt(&$arr, $gid) {
  // hook post_message_fmt_start.php
  // 超长内容截取
  $arr['message'] = xn_substr($arr['message'], 0, 2028000);
  // 格式转换: 类型,0: html, 1: txt; 2: markdown; 3: ubb
  $arr['message_fmt'] = htmlspecialchars($arr['message']);
  // 入库的时候进行转换,编辑的时候,自行调取 message, 或者 message_fmt
  $arr['doctype'] == 0 && $arr['message_fmt'] = ($gid == 1 ? $arr['message'] : xn_html_safe($arr['message']));
  $arr['doctype'] == 1 && $arr['message_fmt'] = xn_txt_to_html($arr['message']);
}

第 360 行:$arr['doctype'] == 0 && $arr['message_fmt'] = ($gid == 1 ? $arr['message'] : xn_html_safe($arr['message']));

  • gid==1(管理员)→ message_fmt = message(原始 HTML,无任何过滤)
  • gid!=1message_fmt = xn_html_safe(message)(白名单过滤)

证据 2:前台模板原样输出 message_fmt,无二次转义 文件:xiunobbs_4.0.4/view/htm/post_list.inc.htm 行 64

<?php echo $_post['message_fmt'];?>

文件:xiunobbs_4.0.4/view/htm/thread.htm 行 61

<?php echo $first['message_fmt'];?>

两处均为裸 echo,未调用 htmlspecialchars,直接将入库的 message_fmt 输出到 HTML 文档流。

风险等级与结论

风险等级:高危

结论:

  1. 管理员发 HTML 帖(doctype=0)时内容不经任何转义/过滤直入库,前台裸输出,构成存储型 XSS。
  2. 虽然利用前提是管理员权限,但管理员账号常成为攻击目标(弱口令 md5、CSRF 无 token、Cookie 无 Secure),一旦被攻陷即可借此 XSS 横向打击全站用户,形成"管理员失陷→全站水坑"的攻击链。
  3. xn_html_safe 白名单本应作为兜底,但对 gid==1 完全豁免,属于典型的"信任管理员"假设缺陷——管理员账号被盗后该假设即失效。
  4. 修复建议:取消 gid==1 豁免分支,所有 doctype=0 内容统一经 xn_html_safe 白名单过滤;或在模板输出端对 message_fmt 强制二次转义;同时引入 CSP 头降低 XSS 危害。
目录
相关文章
|
1天前
|
缓存 安全 搜索推荐
Xiuno BBS 审计之问题10:后台 phpinfo() 暴露完整服务器环境信息
Xiuno BBS 4.0.4 后台存在 `phpinfo()` 接口(`admin-index-phpinfo.htm`),无 CSRF 防护,可被诱导触发。该接口直接输出完整 PHP 环境信息,泄露绝对路径、PHP 版本、`disable_functions`、`bbs_admin_token` 等敏感数据,属中高危信息泄露风险。(239字)
42 0
|
1天前
|
算法 PHP 数据安全/隐私保护
Xiuno BBS 审计之问题14:依赖XXTEA 弱加密算法的鉴权令牌可被伪造
本文分享了Xiunox版本重构审计中发现的问题,该问题已在新版本中修复,供基于xiunobbs4.0.4版本开发者和站长参考。核心加密函数xn_encrypt/xn_decrypt在未加载xiuno.so时回退到纯PHP实现的XXTEA算法,该算法非现代标准,存在密钥派生弱、密文无完整性校验等问题。密钥派生仅md5,密文可被篡改,影响bbs_token、bbs_admin_token等鉴权令牌,存在身份伪造风险。修复建议改用现代AEAD算法,使用HKDF/PBKDF2进行密钥派生,并增加随机IV与认证标签及MAC校验,同时强制随机生成auth_key。
27 0
|
1天前
|
安全 PHP 数据安全/隐私保护
Xiuno BBS 审计之问题15:PHP 8下SMTP 的功能不可用
本文揭示Xiuno BBS 4.0.4中PHPMailer兼容类因使用已移除的`each()`函数,在PHP 8.0+下触发Fatal Error,导致邮件功能全面失效。文中定位3处问题代码,并提供`foreach`替换方案及升级建议,供开发者快速修复兼容性问题。(239字)
27 2
|
1天前
|
网络安全 开发者
Xiuno BBS 审计之问题12:HTTPS 请求关闭 SSL 证书校验,存在中间人攻击风险
Xiuno BBS 4.0.4 的 `https_post()` 函数禁用SSL证书校验(`CURLOPT_SSL_VERIFYPEER=0`),仅验证主机名,导致HTTPS通信易遭中间人攻击,插件下载、远程图片抓取等场景可被劫持并执行RCE。XIUNOX已修复,供4.0.4维护者参考。(239字)
46 0
|
1天前
|
缓存 人工智能 自然语言处理
成本直降50%!GPT-5.6 Terra与GPT-5.5跑分、延迟、稳定性深度实测
随着大模型技术持续迭代更新,高效能、低成本成为企业开发、个人项目落地的核心诉求。OpenAI推出的GPT-5.6系列模型,针对性优化了前代模型的成本高、资源消耗大、推理延迟波动等痛点,其中**GPT-5.6 Terra**作为中端均衡主力模型,主打平替GPT-5.5、成本减半的核心优势,一经推出便成为各类AI应用、智能问答、代码开发、文本处理场景的首选模型。
38 1
|
21小时前
|
人工智能 JSON API
Agentforce APIs 和 SDKs 开发指南
Agentforce 完整 API 和 SDK 生态指南。涵盖构建工具(Agent Script/DX/Python SDK)、测试工具(Testing Center/DX/Testing API)、对话工具(Agent API/Custom Connections/Mobile SDK/Enhanced Chat),以及 Agent API 深度实战:从创建 External Client App、获取 Token 到启动会话、发送同步/流式消息、处理 Citations、传递 Agent 变量、故障排查全流程。
28 1
|
22小时前
|
人工智能
AI Agent Skill Engineering Methodology
A comprehensive guide to building AI Agent Skills from scratch.
|
1天前
|
存储 关系型数据库 API
|
1天前
|
弹性计算 人工智能 自然语言处理
零基础上手!阿里云ECS云服务器部署 OpenClaw 配置百炼Token Plan保姆级教程
想要让OpenClaw正常调用大模型能力,核心关键就是完成百炼Token Plan密钥配置,正确接入百炼大模型接口,才能解锁文本生成、智能问答、任务自动化、多场景交互等核心功能。为帮助零基础用户快速完成搭建部署,本文将从环境准备、服务器初始化、代码部署、端口配置、Token密钥绑定、功能测试、故障排查等全维度,带来一套可直接复刻、全程无卡点的保姆级实操教程,所有操作命令、配置参数均可直接复制使用,新手也能一次部署成功。
39 3
|
1天前
|
人工智能 监控 前端开发
用通义千问和阿里云做一个网站:结构化推理篇
用通义千问和阿里云做一个网站:结构化推理篇