找回密码
 registerss
搜索

[游戏攻略] 使用混元4完成一次Discuz插件漏洞测试并提交作者的案例

[复制链接]
Waylee 发表于 2026-11-5 21:20 |浙江| 显示全部楼层 |阅读模式 | Chrome 157.0.0| Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?registerss

×

用混元 Hy4 给一款 Discuz 插件做"全身体检":从一行可疑代码,到一份能直接提交给作者的漏洞报告

一次真实的长程任务:静态审计 → 实测证伪 → 高危定位 → 本地复现 → 数据回滚 → 成文反馈 → 升级后复测 → 终审交付。

全程在 WorkBuddy 中选用混元 Hy4 完成。


一、为什么拿这个任务来测 Hy4

我维护的一个 Discuz 社区,上线了一款"付费可见内容"插件:作者把正文包在自定义标签里,读者付积分才能解锁。

这类插件的麻烦在于,它同时牵动论坛内核、模板渲染、积分体系、支付回调四条链路。靠人工读代码,很容易出现两种失误:把不是漏洞的地方当成漏洞报给作者,或者漏掉真正能造成资金损失的问题。而且最终要交付的不是一句"有 bug",而是一份作者看了能直接改的报告——这意味着每一条结论都得有证据链。

我给 Hy4 定的任务边界很清楚:

  • 只做防守性安全审计,目标是发现问题、推动修复;
  • 不改动线上源码,不在服务器留文件;
  • 所有验证优先在本地完成,线上只做只读检查;
  • 测试数据测完必须完整回滚;
  • 最后产出可直接提交给插件作者的正式文档。

这是一个典型的"多步骤、跨文件、要求可验证、中途会自我推翻"的长程任务。比写周报或做 PPT 更能看出模型在真实工作里到底靠不靠得住。


二、创作过程

阶段 1|静态审计:先给出一份"看起来很完整"的清单

我给的第一句指令极简:

检查一下有没有漏洞

Hy4 把插件目录通读了一遍,输出了分级清单,还标了"引用功能可能泄露付费正文"为高危。当时我觉得这条挺有说服力——引用回复会把原帖正文拼进新帖,听起来确实危险。

但它没有停在"交作业"。在后续追问下,它主动去追了论坛内核的调用顺序,发现引用生成时会先经过一次内容处理钩子,付费正文在那一步已经被替换成占位文字了。这条高危被它自己推翻了。

这个动作让我对整个任务的信任度上了一个台阶:它会区分"推测"和"验证过"。

阶段 2|接入测试环境,把纸面结论逐条落地

为了做真机验证,我提供了自有的测试服务器。随后我连着收窄了几次边界:

不需要修复问题,只要复现问题即可
工具的可以在本地写一个吗,用于本地测试,不要直接在服务器上测试
服务端不要放任何东西

Hy4 相应地把交付物改成了纯本地脚本,并把已经放到服务器上的临时文件全部删掉、把数据回滚到基线。这一步它做得比我想的细:不仅回滚了积分余额和购买记录,连"扣分触发的用户组降级"这种连带的副作用都查出来并恢复了。

过程中还碰到几个很现实的工程障碍,它逐个定位并解决了:

现象 定位结果
本地脚本执行后无任何输出 系统 python 指向应用商店占位符,改用真实解释器路径
抓回来的页面是一段混淆 JS,不是 HTML 服务器 WAF 的"防采集"在输出阶段替换了响应体,不是 CC 拦截
页面里只能解析出 1 张付费卡片 卡片切分逻辑写错,改为按卡片起点切分
每保存一次帖子,付费块 ID 就变 属插件行为,会导致老买家已购记录失效

其中 WAF 那条我印象最深:它没有把"页面不对"简单归因为网站挂了,而是从响应体长度、内容特征一路推到网关的输出过滤阶段。

阶段 3|高危定位:真正会造成损失的那个问题

确认下来的高危只有一条,但足够严重:并发购买可透支积分。

机制是典型的检查与使用不同步(TOCTOU):请求开始时读取一次会员缓存里的余额做校验,随后调用扣分;两个并发请求都读到同一份余额、都通过校验,各自执行扣减,而 SQL 层没有下限约束。购买记录的唯一键只能挡住"同一个付费块重复买",挡不住"两个不同付费块同时买"。

Hy4 没有满足于"能复现就行",还补了两件事:

  1. 写了串行对照组,证明单线程下第二笔会被正常拒绝——排除了"脚本写错导致的两笔都成功"这种误判;
  2. 把复现器做成参数化的,可调并发数、余额、单价、积分下限,方便作者复验。

阶段 4|升级后的复测:这才是整件事最有价值的一段

我把问题反馈给作者后,插件更新了新版。于是我给出新指令:

我更新最新版插件了,审查一下漏洞

Hy4 先做了一次溯源校验:把本地副本与服务器现行文件逐个做 MD5 比对,确认 14 个 PHP 文件全部一致、拉取时间晚于插件更新时间——先证明"审的是最新版,不是本地缓存的旧文件",再开始下结论。这个习惯很关键,作者最容易用"你审的是旧版"来否认问题。

新版确实加了针对并发的防护:扣款后二次读取余额,若为负数就回滚。Hy4 先肯定了这一点,并实测确认串行场景下防护有效。

但它接着往下追了一层,追到了论坛内核:积分扣减后,内核会把负余额钳制回积分下限(该下限默认为 0)。于是插件二次读到的不是负数,而是 0,回滚分支永远不成立,函数返回成功;随后授权逻辑又按订单全额给作者入账。

结论是:买家最多只损失到余额下限,作者却按每一单全额收款,差额就是凭空产生的积分。从"透支"升级成了"积分增发"。

为了证明这个因果链,它设计了对照实验:把下限改成允许负数再跑一遍,回滚就稳定触发、透支消失。

量化结果(本地复现环境,买家余额 111、单价 100、下限 0):

场景 结果
串行对照 成功 1 笔 / 拒绝 1 笔,无透支
并发 2 路 × 10 次 透支 8/10 次,积分增发 9/10 次,最大单次增发 89
对照实验(下限允许负数) 回滚生效,透支消失

阶段 5|从"能看"到"能交":反馈文档的三轮打磨

作者后来要求"整理成小清单再反馈"。第一版出来后,我判断不适合外发——里面混了文件指纹、代码拉取方式、发送前自查项这类内部痕迹。于是:

整理正式版,直接提交的

Hy4 重构成正式报告:问题统一编号、把"未修复"改成中性的"复测结果:仍可触发"、先肯定新版防护的正确部分再指出边界、主动加一节"已确认修复的问题"说明哪些不用再提。同时给了 Markdown 和纯文本两个版本,后者去掉格式符号,方便直接粘贴到聊天或工单。

最后我要求:

最后审查一遍,有问题的话修改好

这一轮它回读了实际代码和数据库配置,改掉了 6 处。最值得说的是其中两处:

  • 报告原写"插件使用的是 extcredits2",实际配置是另一个积分字段——一处会被作者直接反驳的事实错误;
  • 某条标题写"未校验访问者身份",但代码里其实有登录校验,缺的是权限校验——措辞不严谨,已改。

它还主动把"实测已正常"降级为"代码审查结论,未做实际验证",把"所有验证均在隔离环境完成"改成更准确的"以代码审查与本地逻辑复现为主"。宁可少说,不说满。


三、成果展示

交付物

类别 内容
漏洞清单 1 项高危、3 项中危、1 项低危、1 项配置风险提醒,逐条标注文件位置与影响
复现工具 参数化本地复现器(含串行对照组、对照实验)、只读页面检查脚本
审查报告 含代码溯源、机制分析、量化数据、修复建议
作者反馈 正式报告 Markdown + 纯文本双版本,可直接提交
环境清理 测试记录、积分流水、临时文件全部回滚,帖子正文 MD5 精确复原

给作者的修复建议(节选)

不能用"扣完再看是否为负"来判断,因为内核会钳制。应改为带条件的原子更新,把判断余额与扣减合并为一条语句,并用影响行数判断是否成功;同时把作者入账金额与实际扣款金额挂钩。

闭环

  • 问题以私密方式提交给插件作者,未在公开渠道披露 PoC 细节;
  • 所有测试数据已完整回滚,服务器零残留,插件源码指纹未变;
  • 全部材料做了脱敏与出处核对,未包含任何凭据、域名或账号信息。

四、真实使用感受

1. 长程任务没有断线。 这个项目横跨多轮对话、多次环境变化,中间还换过一次工作目录。Hy4 能把"哪条结论已被实测推翻""哪份文件是给作者看的、哪份是自用"一直分得清,没有出现把旧结论重新端上来的情况。

2. 最打动我的不是找到漏洞,是主动推翻自己。 第一轮那份清单里最像高危的一条,是它自己后来证伪的;新版报告里"extcredits2"这种细节错误,也是终审时它自己查出来的。做安全审计,这种"敢否掉自己上一轮输出"比多报几条问题有价值得多。

3. 证据纪律。 它会主动区分"实测""代码审查结论""推测"三种强度,并在措辞上标出来。写反馈给第三方时,这一点直接决定对方是认真修还是直接驳回。

4. 产物是分层的。 同一份结论,能给出内部速查版、正式提交版、纯文本粘贴版三种形态,而且知道哪些内容不能出现在对外版本里。这已经超出"回答问题",更接近协作交付。

5. 效率对比。 换作人工,跨内核追调用顺序、写带对照组的复现器、逐文件做指纹溯源、再整理三版文档,是几天量级且容易漏项的工作。这次是边对话边产出,且每一步都留下了可复跑的脚本。

也要说局限(这部分我照实写):

  • 高并发结论来自本地逻辑复现,忠实复刻了扣费时序与内核钳制,但没有做线上端到端验证——因为那会在真实站点产生测试数据,我主动叫停了;
  • 报告里凡涉及站点具体配置的地方,最终都靠我人工核对了一遍数据库。模型会推理,但不该替人签"事实确认"这一栏;
  • 某条"已修复"的判断只基于代码阅读,它明确标注了未做实际验证,没有包装成结论。

把边界写清楚,反而比一路"全部搞定"更让我放心。


五、关于合规与脱敏

这个案例涉及漏洞,所以特意说明边界,也作为投稿材料的合规声明:

  • 对象为本人自有并授权的测试站点,属防守性安全审计,目的是推动作者修复;
  • 全程负责任披露:先私聊作者,不公开 PoC、不提供可直接利用的攻击代码,投稿内容仅保留机制层面的技术抽象;
  • 不含任何凭据、真实域名、账号、个人信息或第三方可定位信息;插件名称、版本号、作者联系方式均已隐去;
  • 测试数据完成后完整回滚,未对线上数据造成留存影响;
  • 内容不涉及金融理财建议、时政议题或任何活动规则禁止的类别。

六、结语

以前我对"AI 能不能干专业活"的判断标准比较朴素:看它写得像不像。这次换了个标准——看它愿不愿意在没人提醒的情况下,去否掉自己上一轮看上去挺漂亮的结论。

从一行可疑代码,到一份能被作者直接拿去改代码的报告,中间隔着证伪、复现、回滚、溯源、终审好几道关。Hy4 帮我把这些关一道道走完了,而且在几个关键节点上,它比我更早提出"这里还不能下结论"。

这大概就是我理解的"真实生产力":不是替你把话说漂亮,是替你把事做扎实。


#WorkBuddy #Hy4

您需要登录后才可以回帖 登录 | registerss

本版积分规则

手机版|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )

GMT+8, 2026-11-13 13:20 , Processed in 0.021842 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表