Xiuno BBS 审计之问题02:后台用户搜索可能造成严重性能 DoS

简介: 该漏洞存在于XiunoBBS 4.0.4后台用户/主题搜索功能中:用户输入的`$keyword`未经校验直接拼入SQL,仅依赖`addslashes()`转义,存在宽字节SQL注入(GBK下可绕过)、LIKE通配符注入(导致全表扫描DoS)及列名注入风险,属高危漏洞。

问题:后台用户搜索将用户输入作为 LIKE/精确条件拼接进 SQL,依赖 addslashes 防注入

现象

后台 admin/route/user.php 的用户搜索接口将用户从 URL 接收的 $keyword 直接作为查询条件,通过 $cond[$srchtype] = $keyword 写入条件数组后交给 db_find() → db_cond_to_sqladd() 拼接 SQL。该流程最终仅靠 addslashes() 进行转义,未做参数预处理。在 GBK/多字节字符集场景下可被宽字节绕过;同时 LIKE 条件未对 %、_ 进行转义,存在 LIKE 注入导致全表遍历和性能 DoS。

$srchtype 虽然做了 in_array($srchtype, $allowtype) 白名单校验,但 $keyword 本身未做任何字符校验,且 $srchtype 同样来自 param(2)(默认 htmlspecialchars),最终被用作列名拼接 `"$srchtype"`=...,若白名单逻辑被插件修改可导致列名注入。

源码证据

文件:xiunobbs_4.0.4/admin/route/user.php 行 14-35(接收用户搜索关键词并写入 cond 数组)

$pagesize = 20;$srchtype = param(2);$keyword  = trim(xn_urldecode(param(3)));$page     = param(4, 1);$cond = array();$allowtype = array('uid', 'username', 'email', 'gid', 'create_ip');if($keyword) {    !in_array($srchtype, $allowtype) AND $srchtype = 'uid';    $cond[$srchtype] = $srchtype == 'create_ip' ? ip2long($keyword) : $keyword; }$n = user_count($cond);$userlist = user_find($cond, array('uid'=>-1), $page, $pagesize);$pagination = pagination(url("user-list-$srchtype-".urlencode($keyword).'-{page}'), $n, $page, $pagesize);Php
代码解读复制代码

文件:xiunobbs_4.0.4/xiunophp/db.func.php 行 242-279(条件拼接最终走 addslashes)

function db_cond_to_sqladd($cond) {    $s = '';    if(!empty($cond)) {        $s = ' WHERE ';        foreach($cond as $k=>$v) {            if(!is_array($v)) {                $v = (is_int($v) || is_float($v)) ? $v : "'".addslashes($v)."'";                $s .= "`$k`=$v AND ";            } elseif(isset($v[0])) {                // ...            } else {                foreach($v as $k1=>$v1) {                    if($k1 == 'LIKE') {                        $k1 = ' LIKE ';                        $v1="%$v1%";              // 未对 %、_ 转义                    }                    $v1 = (is_int($v1) || is_float($v1)) ? $v1 : "'".addslashes($v1)."'";                    $s .= "`$k`$k1$v1 AND ";                }            }        }    }    return $s;}Php
代码解读复制代码

文件:xiunobbs_4.0.4/route/thread.php 行 85 + 117(前台关键词搜索同样将 $keyword 传入 LIKE 条件)

$tid = param(1, 0);$page = param(2, 1);$keyword = param(3);// ...if($keyword) {    $thread['subject'] = post_highlight_keyword($thread['subject'], $keyword);    $keywordurl = "-$keyword";}Php
代码解读复制代码

文件:xiunobbs_4.0.4/model/thread.func.php 行 290-292(关键词搜索最终调用 db_find + LIKE 条件)

function thread_find_by_keyword($keyword) {    $threadlist = db_find('thread', array('subject'=>array('LIKE'=>$keyword)), array(), 1, 60);    // ...}Php
代码解读复制代码

文件:xiunobbs_4.0.4/admin/route/thread.php 行 64-66(后台主题扫描关键词同样未校验)

$userip = param('userip');$cond['userip'] = $userip ? ip2long($userip) : 0;$cond['keyword'] = param('keyword');Php
代码解读复制代码

风险等级与结论

高危

危害后果:

  • 在 GBK 等多字节字符集环境下,$keyword 通过 addslashes 后仍可被宽字节绕过,导致后台 SQL 注入。后台注入因管理员权限高,可直接写马提权至服务器 RCE。
  • LIKE 查询未对 %、_ 转义,攻击者可提交 % 触发全表 LIKE 扫描,对大表造成严重性能 DoS。
  • 列名 $srchtype 通过 `"$srchtype"` 直接拼接,白名单虽限制了 5 种字段,但任何对白名单的修改(如插件 hook)都会立即转为列名注入点。
  • 攻击面:后台接口需管理员登录,但配合 CSRF 缺陷(参见另案)可在管理员不知情的情况下被外部触发。

修复建议:

  1. 将所有 db_cond_to_sqladd 调用改为 PDO prepare() + bindValue(),参数化绑定彻底消除注入。
  2. LIKE 查询对 $keyword 中的 %、_、\ 调用 addcslashes($keyword, '%_\\') 转义,避免通配符注入。
  3. 列名 $srchtype 用严格的 switch-case 映射到固定字符串,禁止直接用用户输入做列名拼接。
  4. 强制 utf8mb4 字符集连接,关闭 PDO::ATTR_EMULATE_PREPARES,杜绝宽字节注入温床。
目录
相关文章
|
3月前
|
人工智能 定位技术 数据安全/隐私保护
如何用阿里云轻量应用服务器【快速部署Dify搭建AI知识库】?完整步骤讲解
本文详解如何用阿里云轻量应用服务器快速部署开源LLM平台Dify,构建企业级AI知识库问答系统。涵盖服务器创建、Dify镜像选择、通义千问模型接入、知识库上传与索引、AI应用编排发布及网站嵌入全流程,零基础也能轻松上手。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
305 3
|
3月前
|
弹性计算 安全 数据库
海外用户如何进行阿里云账号实名认证:痛点剖析与全渠道通关指南!!!
本文由阿里云国际分销商零度云撰写,详解海外用户(外籍个人、港澳台居民、海外企业)在阿里云国内站(aliyun.com)完成中国大陆节点实名认证的合规路径:涵盖证件要求、人工审核、外币打款、避坑指南及替代方案,助力安全高效入华用云。
|
3月前
|
人工智能 定位技术 API
阿里云轻量应用服务器快速部署Dify|搭建企业知识库AI问答系统完整教程
Dify是开源大语言模型(LLM)应用开发平台,支持快速构建知识库问答系统。本文详解如何通过阿里云轻量应用服务器+Dify镜像,一键部署AI助手:创建服务器→选择Dify镜像→配置通义千问等模型→上传文档建知识库→编排提示词→嵌入网站,全流程低门槛、高效率。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
359 1
|
3月前
|
监控 Java 中间件
Java动态线程池:避坑原生线程池,吃透Dynamic-TP,手写一个Demo
Java线程池参数写死、改配置就得重启?本文讲透动态线程池原理,对比Dynamic-TP与Hippo4j,带你手写一个基于Nacos的动态线程池Demo。
Java动态线程池:避坑原生线程池,吃透Dynamic-TP,手写一个Demo
|
2月前
|
缓存 前端开发 测试技术
Xiuno BBS 审计之问题:全局变量滥用,状态混乱
本文揭示Xiuno BBS 4.0.4中131处global变量滥用问题:状态共享混乱、函数副作用不可控、单元测试难、并发易串态、重构成本高。XIUNOX版已通过依赖注入与单例封装优化修复,供二次开发参考。(239字)
138 2
|
3月前
|
安全 PHP 数据安全/隐私保护
Xiuno BBS 审计之问题15:PHP 8下SMTP 的功能不可用
本文揭示Xiuno BBS 4.0.4中PHPMailer兼容类因使用已移除的`each()`函数,在PHP 8.0+下触发Fatal Error,导致邮件功能全面失效。文中定位3处问题代码,并提供`foreach`替换方案及升级建议,供开发者快速修复兼容性问题。(239字)
190 2
|
3月前
|
传感器 人工智能 前端开发
从移动指纹到App隔离:TikTok Shop跨境电商账号安全管理实战
指纹浏览器与云手机组合需要同步进化——在设备层做到硬件级、真机化的隔离,在行为层通过拟真让每个环境像独立真实用户,在跨端层保持身份逻辑一致。工具的角色,从“把指纹改掉”升级为“为每一套业务提供一整套可信的数字身份”。
|
3月前
|
监控 安全 JavaScript
斐济 BSP 银行钓鱼攻击事件复盘与金融机构多层级反钓鱼检测防御体系研究
本文以2026年斐济BSP银行高仿钓鱼事件为样本,剖析误植域名、同形字符、页面克隆等新型攻击技术,提出轻量化三层自动化检测框架(URL初筛、DOM深度检测、基础设施校验),附可落地Python代码;构建“事前识别—事中阻断—事后溯源—策略迭代”闭环防御体系,并针对中小银行技术薄弱、跨境监管难等痛点,提出批量域名保护、简化用户教育等本地化策略。(239字)
186 1
|
3月前
|
存储 缓存 人工智能
抖音多窗口管理与设备级环境隔离实践解析
未来的多平台运营管理,会从"工具堆叠"走向"一体化工程化"——环境、网络、行为、内容在一个可编排的体系里协同运转,运营者从重复劳动中解放出来,把精力放在策略与内容上。技术会继续演进,但"尊重平台规则、像真实用户一样运营"这条底线,不会变。
|
3月前
|
人工智能 自然语言处理 测试技术
TID质量竞争大会分享议题|科大讯飞:端到端大模型效果评测,从人工周级到自动化天级
大模型落地加速,效果评测面临效率低、标准不一、端到端难评估等挑战。科大讯飞陈明将在TID大会分享《端到端大模型效果评测》实践,揭秘如何实现从人工周级到自动化天级的工程突破,覆盖内容创作等真实场景。

热门文章

最新文章