一些BAT的XSS实例(一)基础篇
字数 1051 2025-08-26 22:11:28

BAT XSS实例分析(基础篇)教学文档

一、XSS基础概念回顾

XSS(跨站脚本攻击)是一种将恶意脚本注入到网页中的攻击方式,分为反射型、存储型和DOM型三种。

二、实例分析

实例1:DOM型XSS基础

题目描述:通过location.hash获取输入并执行

关键代码

setTimeout("aa('"+x+"')",100);

解题思路:

  1. 观察法:分析代码逻辑构造payload

    • 需要构造:setTimeout("aa('"+"',alert(1),'"+"')",100);
    • 最终payload:',alert(1),'
  2. JS断点调试法

    • 在Chrome开发者工具中设置断点
    • 观察变量变化和代码执行流程
  3. 错误调试法

    • 输入特殊字符触发错误
    • 通过错误信息反向推导正确构造

最短payload

  • #',alert(1),'
  • #');alert(1)//

实例2:jQuery特性利用

题目描述:通过location.search获取参数并执行DOM操作

关键代码

$("#xx")[x]($("#xx")[y]());

解题思路:

  1. 利用jQuery的text()方法会还原HTML编码的特性
  2. 构造参数使代码执行:
    • 第一个参数可以是html、append等DOM操作方法
    • 第二个参数必须为text

payload示例

?x=html&y=text

实例3:运算符同步输出

题目描述:两个输出点需要同步构造

关键代码

echo "<script>var a='".htmlspecialchars($_GET['px'])."';var b='".htmlspecialchars($_GET['px'])."';</script>";

解题思路:

  1. 使用运算符连接两个输出点
  2. 确保前后语法都正确

payload示例

px=1*alert(1)*1
px=1+alert(1)+1
px=1-alert(1)-1

实例4:运算符过滤绕过

题目描述:过滤了所有运算符的进阶版

解题思路:

  1. 寻找不依赖运算符的JS语法结构
  2. 利用逗号操作符或其他未被过滤的语法

最短payload(13字符):
(作者未在文中直接给出,需进一步分析)

三、调试技巧总结

  1. Chrome开发者工具使用

    • 断点调试
    • 变量观察
    • Console测试
  2. 错误分析法

    • 故意触发错误
    • 通过错误信息反推
  3. 代码分析法

    • 静态分析代码逻辑
    • 动态跟踪执行流程

四、防御建议

  1. 对所有输出进行适当的编码/转义
  2. 避免使用eval、setTimeout等动态执行字符串的函数
  3. 注意jQuery方法特性(如text()会解码HTML实体)
  4. 实现内容安全策略(CSP)

五、扩展阅读

  1. JavaScript运算符参考
  2. mXSS攻击的成因及常见种类
  3. JS断点调试教程

六、练习题目

  1. 尝试复现文中所有XSS实例
  2. 寻找实例4的最短payload
  3. 探索其他不依赖运算符的JS语法结构
  4. 研究不同jQuery方法的XSS利用可能性

注:实际练习时请确保在授权环境下进行测试,避免非法攻击行为。

BAT XSS实例分析(基础篇)教学文档 一、XSS基础概念回顾 XSS(跨站脚本攻击)是一种将恶意脚本注入到网页中的攻击方式,分为反射型、存储型和DOM型三种。 二、实例分析 实例1:DOM型XSS基础 题目描述 :通过location.hash获取输入并执行 关键代码 : 解题思路: 观察法 :分析代码逻辑构造payload 需要构造: setTimeout("aa('"+"',alert(1),'"+"')",100); 最终payload: ',alert(1),' JS断点调试法 : 在Chrome开发者工具中设置断点 观察变量变化和代码执行流程 错误调试法 : 输入特殊字符触发错误 通过错误信息反向推导正确构造 最短payload : #',alert(1),' #');alert(1)// 实例2:jQuery特性利用 题目描述 :通过location.search获取参数并执行DOM操作 关键代码 : 解题思路: 利用jQuery的text()方法会还原HTML编码的特性 构造参数使代码执行: 第一个参数可以是html、append等DOM操作方法 第二个参数必须为text payload示例 : 实例3:运算符同步输出 题目描述 :两个输出点需要同步构造 关键代码 : 解题思路: 使用运算符连接两个输出点 确保前后语法都正确 payload示例 : 实例4:运算符过滤绕过 题目描述 :过滤了所有运算符的进阶版 解题思路: 寻找不依赖运算符的JS语法结构 利用逗号操作符或其他未被过滤的语法 最短payload (13字符): (作者未在文中直接给出,需进一步分析) 三、调试技巧总结 Chrome开发者工具使用 : 断点调试 变量观察 Console测试 错误分析法 : 故意触发错误 通过错误信息反推 代码分析法 : 静态分析代码逻辑 动态跟踪执行流程 四、防御建议 对所有输出进行适当的编码/转义 避免使用eval、setTimeout等动态执行字符串的函数 注意jQuery方法特性(如text()会解码HTML实体) 实现内容安全策略(CSP) 五、扩展阅读 JavaScript运算符参考 mXSS攻击的成因及常见种类 JS断点调试教程 六、练习题目 尝试复现文中所有XSS实例 寻找实例4的最短payload 探索其他不依赖运算符的JS语法结构 研究不同jQuery方法的XSS利用可能性 注:实际练习时请确保在授权环境下进行测试,避免非法攻击行为。