终于搞懂 XSS 为什么能盗号了:Cookie、Session、HttpOnly 一次讲明白
刚开始学习 XSS 的时候我一直有个疑问为什么很多人都说“XSS 能盗号”不就是弹个scriptalert(1)/script吗后来继续学习Cookie和Session之后我才慢慢明白XSS 真正危险的地方不是弹窗。而是它能获取用户的“登录状态”。这篇文章我想尽量用自己的语言以及理解方式把CookieSessionHttpOnlyXSS 为什么能盗号一次讲清楚。一、网站为什么知道“你是谁”比如你登录了某个网站。关闭页面后再打开网站居然还认识你。为什么总不能服务器把全国用户都记脑子里吧其实这里就涉及Cookie 和 Session二、Cookie 到底是什么简单理解Cookie 是浏览器保存的一小段数据。网站可以让浏览器保存Set-Cookie: sessionidabc123浏览器收到后就会自动保存。之后每次访问这个网站时浏览器都会自动携带Cookie: sessionidabc123于是服务器就知道“哦这还是刚才那个用户。”三、Session 又是什么很多新手第一次学的时候都会懵。其实Session 才是真正的“登录状态”服务器会保存sessionidabc123对应用户张三而浏览器只负责保存abc123这就是SessionID所以整个登录流程其实是四、现在回来看 XSS4.1 Session 劫持假设网站存在 XSS。攻击者成功执行了 JSdocument.cookie浏览器就会返回sessionidabc123这时候问题就来了。因为这个 SessionID本质上就是用户登录身份。如果攻击者拿到了它。那么服务器可能会认为攻击者就是这个用户。这就是Session 劫持4.2 那xss如何盗cookie呢五、所以 XSS 为什么危险以前我一直以为XSS 就是弹窗。后来才发现弹窗只是“漏洞存在”的测试方式真正危险的是面试会考获取登录态伪造用户操作获取敏感信息页面钓鱼JS 键盘记录本质上XSS 攻击者能在你的浏览器里执行 JS这才是最可怕的地方。六、那为什么现在很多网站偷不到 Cookie 了因为现代网站通常会加HttpOnly例如Set-Cookie: sessionidabc123; HttpOnly这个属性的作用就是不允许 JavaScript 读取 Cookie。于是document.cookie 就拿不到 SessionID 了。这也是为什么HttpOnly 是防御 XSS 的重要手段之一。七、HttpOnly 是不是就无敌了其实也不是。因为XSS 的本质是“执行 JS”即使偷不到 Cookie。攻击者仍然可能伪造请求修改页面钓鱼获取用户输入操作当前账号所以HttpOnly 只是降低风险。并不是彻底解决 XSS。八、我现在对 XSS 最大的理解变化以前我学习漏洞总喜欢背 payload找 alert看别人打靶场后来才发现真正重要的是Web 是怎么工作的比如浏览器为什么自动带 CookieSession 为什么能维持登录JS 为什么能读取 CookieHttpOnly 为什么能防御这些东西一旦串起来很多漏洞就理解了。给大家看一下真实环境截图九、新手学习 XSS 最容易踩的坑我目前感觉最大的坑就是只学 payload不理解原理这样后面会越来越乱。因为DOM 不懂Cookie 不懂Session 不懂浏览器机制不懂最后看起来学了很多漏洞实际上都是碎片知识。十、总结最近学习 Web 安全最大的感受就是很多漏洞之间其实是连着的。比如当这些东西真正串起来的时候。才会第一次有“我开始理解 Web 安全了”的感觉。后面准备继续学习CSPCSRFJWTSQL 注入文件上传也会继续整理学习笔记分享出来。