XSS只能导致浏览器崩溃
去年秋天,只致浏一个朋友给我发来一条链接,览器说某个小论坛的崩溃页面“有点怪”。我点开,只致浏页面正常加载,览器几秒后浏览器标签突然卡死,崩溃风扇狂转,只致浏接着整个窗口无响应。览器强制结束后重新打开,崩溃一切又恢复正常。只致浏我当时没太在意,览器以为是崩溃那个论坛挂了什么挖矿脚本。直到后来他告诉我,只致浏那个页面被人注入了一段XSS payload,览器专门用来跑一个死循环的崩溃alert弹窗——关掉一个又弹一个,无限递归,浏览器直接被拖死。
很多人对XSS的理解就停在这个层面:弹窗、崩溃、恶作剧。OWASP把XSS列为Web应用最常见的漏洞之一,但不少开发者的第一反应仍然是“不就是弹个框吗,能有多严重”。这种认知偏差很危险,因为XSS真正的杀伤力根本不在于让浏览器崩溃,而在于它能做到的事情远比崩溃隐蔽、持久、致命。
崩溃只是最粗暴的用法。一个<script>while(true){ alert(1)}</script>确实能让标签页假死,但攻击者要的不是你的浏览器卡住,他要的是你的cookie。document.cookie这行代码在XSS上下文里执行时,同源策略不会拦住它——脚本来自目标站点本身,浏览器认为这是合法操作。session token、CSRF token、甚至某些HTTP-only没覆盖到的认证信息,全部可以被静默发往攻击者的服务器。整个过程页面不闪不跳,用户毫无感知。
我见过一个真实案例。某企业内部工单系统存在存储型XSS,攻击者在一张工单的备注字段里塞了一段混淆过的脚本。任何管理员打开这张工单,脚本就在后台用管理员的身份创建一个新的管理员账号,然后把账号密码外带到外部C2。没有弹窗,没有崩溃,没有异常。等安全团队发现时,攻击者已经用这个后门账号潜伏了将近三周。浏览器崩溃至少还让你知道出事了,这种静默利用连报警都不会触发。
再往深一层,XSS可以组合CSRF打出完整的攻击链。很多站点用token防CSRF,但token如果存在页面里、能被JavaScript读取,XSS就能先读token再发请求。防御体系在这里被从内部瓦解。更不用说XSS还能用来做键盘记录、篡改页面内容、发起钓鱼表单、甚至作为跳板探测内网——浏览器所在的网络位置往往比外部攻击者有利得多。
还有人觉得反射型XSS需要用户点链接,存储型XSS需要发帖权限,DOM型XSS需要特定操作,门槛都不低。实际情况是,一个存在XSS的搜索框,配合短链接和社工话术,点击率可以很高。而存储型XSS一旦打中后台管理页面,等于直接拿到了管理入口。攻击面比想象中大得多。
浏览器崩溃只是一个信号,告诉你“这里有注入点”。真正该担心的是,如果攻击者没有选择让你崩溃,你根本不会发现。那段脚本可以安安静静地跑上几个月,把你的会话、数据、权限一点点搬空。XSS不是弹窗玩具,它是Web安全里最灵活的入口之一。把认知停留在“崩溃”层面,等于把家门钥匙插在锁上还觉得自己很安全。