一起来玩一些BAT的XSS实例(一)

一起来玩一些BAT的XSS实例(一)
最新回答
你瞎啊撞我心上了

2026-01-16 22:09:35

针对第一题XSS实例的绕过方法为在URL的hash部分注入闭合语句并执行任意JavaScript代码,具体构造的payload为#');alert('1,完整测试链接为

http://px1624.sinaapp.com/test/xsstest1/#'
);alert('1。

代码分析

题目提供的代码逻辑如下:

<script type="text/javascript">var x=location.hash; // 获取URL的hash部分(#之后的内容)console.log("aa('"+x+"')"); // 打印拼接后的字符串function aa(x){}; // 定义空函数aasetTimeout("aa('"+x+"')",100); // 100毫秒后执行拼接的字符串</script>
  • 关键漏洞点:setTimeout中直接拼接location.hash的值并作为字符串执行,未对输入进行过滤或转义。
  • 攻击目标:通过构造特殊的hash值,闭合原有的字符串拼接逻辑,插入可执行的JavaScript代码(如alert(1))。
绕过原理
  1. 原始拼接逻辑:假设location.hash为空,setTimeout执行的代码为:

    aa('') // 调用空函数aa,无实际效果
  2. 注入攻击:若location.hash为#');alert('1,拼接后的代码变为:

    aa('');alert('1') // 闭合原字符串后插入新代码

    aa(''):调用空函数,无害。

    alert('1'):执行弹窗,验证XSS成功。

详细步骤
  1. 构造Payload:

    需闭合aa('和'),并在中间插入恶意代码。

    最终hash部分为:#');alert('1。

  2. 完整测试链接:

    http://px1624.sinaapp.com/test/xsstest1/#'
    );alert('1

    访问后,页面会执行alert(1),弹出对话框。

  3. 代码执行流程:

    浏览器解析URL,location.hash获取值为#');alert('1。

    代码拼接为aa('');alert('1'),并作为字符串传入setTimeout。

    100毫秒后,JavaScript引擎执行该字符串,触发弹窗。

其他变种

若目标环境对单引号或括号过滤,可尝试以下替代方案:

  • 双引号绕过:

    http://px1624.sinaapp.com/test/xsstest1/#"
    );alert(1);//

    拼接后代码:

    aa("");alert(1);//') // 注释掉后续内容
  • 无引号绕过(利用javascript:伪协议):

    http://px1624.sinaapp.com/test/xsstest1/#javascript:alert
    (1)

    需结合其他漏洞(如<a>标签的href属性)才能生效,本题不适用。

防御建议
  1. 输入过滤:对location.hash等用户输入进行严格过滤,禁止直接拼接未转义的字符串。
  2. 输出编码:使用textContent或innerText替代innerHTML,避免HTML解析。
  3. CSP策略:部署内容安全策略(CSP),限制内联脚本执行。
验证截图(图中展示了通过构造hash触发弹窗的效果)

通过上述方法,可成功绕过第一题的XSS防护,执行任意JavaScript代码。后续题目若涉及其他过滤机制(如HTML实体编码、WAF规则等),需进一步调整Payload结构。