大家好,今天给大家复盘一次近期众测挖到的某APP存储型XSS漏洞,从前端限制突破、WAF规则绕过、事件FUZZ、字符截断踩坑到最终成功拿洞拿赏金,完整还原每一步测试逻辑,新手也能看懂核心绕过思路。
本文章敏感信息全部脱敏打码处理,请勿使用文章技术进行违法犯罪活动。
一、突破前端限制
本次测试目标为某APP个人账户昵称修改功能,属于典型的用户可控输入点,是存储型XSS的高危测试位置。

首次测试发现,前端页面对昵称输入做了字符输入限制,无法直接发送payload。
突破思路:抓包修改绕过前端校验
所有前端校验都是客户端校验,完全可控可绕过。前端的限制仅作用于页面输入,抓包拦截修改接口请求数据包,即可绕过所有前端JS校验,直接向服务端提交恶意载荷。
初步测试 payload:<s>Test</s>

提交后页面正常解析标签、字体生效,证明服务端未过滤HTML标签、前端渲染无转义,存在XSS漏洞基础条件。

二、时间戳校验

重放数据包发现响应修改已经超时,这里猜测服务端可能做了一些时间范围限制。
三、WAF拦截高危事件
在确认标签可解析后,使用常规hover触发payload测试:<svg onmouseover=1>
提交后直接拒绝连接,初步判定:服务端WAF未拦截HTML标签,但是严格拦截常见高危JS事件。

为验证猜想,单独提交纯标签 <svg>,数据包正常回显、无拦截,这里修改超时提示不影响后续WAF响应状态的判断。

四、事件大小写绕过
针对事件做大小写变形测试,例如 OnMouseOver、ONMOUSEOVER 等,结果全部被WAF拦截。该站点WAF对常见高危事件开启了大小写忽略匹配规则,普通大小写混淆的绕过方式完全失效,必须FUZZWAF黑名单缺失的冷门事件。
五、黑名单FUZZ

针对DOM交互事件进行批量FUZZ测试,最终筛选出WAF完全放行、可正常触发JS冷门事件,也是本次漏洞利用的核心关键
OnMouseEnter、onmouseenter、OnMouseLeave、onmouseleave、OnChange、onchange、OnToggle、ontoggle
这类事件属于HTML5小众交互事件,WAF规则库未收录,无拦截策略,是本次绕过的核心突破口。
六、进阶绕过
确定可用事件后,选择兼容性最强、触发最稳定的 ontoggle 事件(details标签专属折叠展开事件)搭配大小写混淆标签:<dETAILS>
初步测试 payload:<dETAILS OnToggle=alert(document.cookie)>

<dETAILS OnToggle=alert(document.cookie)> 被WAF拦截
利用逗号表达式写法:从根源抹除攻击特征
绕过 payload:<dETAILS OnToggle=a=alert,a(document.cookie)>
该写法利用 JS逗号运算符特性,将「函数定义」和「函数调用」拆分执行,彻底规避WAF特征检测,语法逻辑如下:
第一步:a=alert // 将原生alert函数地址赋值给自定义变量a,无任何高危特征
第二步:a(document.cookie) // 调用自定义变量a执行弹窗拿Cookie操作
关键核心:整个请求报文里,不存在 alert( 这个高危特征串,WAF只能看到普通变量a的调用,无法通过文本匹配识别恶意行为,直接放行。

七、服务端32位字符硬截断
来到昵称这,发现确实解析出了折叠标签,但是没弹窗

站点存在固定32字符硬截断机制:超出32位的内容会被直接截断丢弃,不会报错、无提示。

测试 payload:<dETAILS OnToggle=a=alert,a(document.cookie)>
被服务端强制截断为:<dETAILS OnToggle=a=alert,a(docu
JS语法残缺、表达式不完整,完全无法执行,这也是上一步无弹窗的核心原因。
索性放弃弹cookie,直接弹窗1即可
<dETAILS OnToggle=a=alert,a(1)>


核心优势&绕过原理
1. 规避WAF alert() 特征拦截:常规 payload 会出现明文 alert(,极易被WAF匹配拦截;本载荷采用 逗号表达式赋值执行,原文无 alert( 特征,先赋值 a=alert,再调用 a(1),完美绕过函数特征检测。
2. 小众事件免拦截:ontoggle 非高危自动事件,无WAF默认拦截规则。
最终提交 payload,页面正常渲染折叠标签,点击展开后成功弹窗,存储型XSS漏洞验证成功,成功拿下300元众测赏金。
九、漏洞总结&挖洞思路复盘
1. 前端限制全部可被抓包绕过,不要被前端输入拦截迷惑;
2. WAF大多拦截显性高危特征,小众HTML5事件、变量赋值调用语法,是高效绕过手段;
3. 遇到无报错不执行的情况,优先排查服务端字符硬截断,而非单纯纠结WAF拦截;
4. 逗号表达式伪协议,是规避alert、eval等高危函数特征的通用高阶XSS绕过技巧。
本次漏洞难度不高,但非常适合新手学习「从踩坑、判断环境、FUZZ筛选、适配限制到最终利用」的完整众测思路,所有绕过手法均为实战通用、可复用的技巧。
夜雨聆风