当前位置: 首页 > news >正文

PortSwigger靶场之将反射型 XSS 注入到带有尖括号和双引号的 JavaScript 字符串中,并使用 HTML 编码和单引号进行转义通关秘籍

一、题目分析

该实验室包含搜索查询跟踪功能中的反射型跨站点脚本漏洞,其中尖括号和双引号是 HTML 编码的,而单引号则被转义。

  • 尖括号 (< >) 被HTML编码: 这意味着我们不能使用 </script> 来闭合script标签。我们必须在当前的 <script> 块内完成所有操作。
  • 双引号 (") 被HTML编码: 这条限制影响不大,因为字符串是用单引号包裹的。
  • 单引号 (') 被转义: 这是最关键的限制。服务器会将我们输入的任何一个单引号 ' 替换为 \'。这导致我们无法通过简单地输入 ' 来闭合字符串。

综合来看,我们被困在了一个JavaScript字符串里,并且无法使用常规方法(闭合标签或闭合引号)来逃逸。

但是我们可以通过找到 ',然后把它变成 \'。因为服务器并没有考虑如果我们自己先输入一个反斜杠 \ 会怎么样。我们可以利用这一点来“欺骗”JavaScript的解析器。

核心思想是:注入我们自己的反斜杠 \,用它来转义掉服务器为我们添加的用于转义的反斜杠 \

二、攻击过程

1、构造payload

\'-alert(1)//

2、攻击流程

  1. 第一步:我们输入 Payload 我们向服务器提交的搜索词是 \'-alert(1)//

  2. 第二步:服务器进行转义 服务器的程序会扫描这个字符串,找到其中的单引号 ',并在它的前面加上一个反斜杠 \

    • 原始输入: \'-alert(1)//

    • 转义之后: \\'-alert(1)// (注意,现在有两个反斜杠了)

  3. 第三步:浏览器解析最终的JavaScript代码 最终,页面中的JavaScript代码会变成这样:

    var searchTerms = '\\'-alert(1)//';
    

    现在,我们来看看JavaScript是如何解析这行代码的:

    • 引擎首先看到第一个 ',开始解析一个字符串。

    • 紧接着它看到了 \\。在JavaScript中,两个反斜杠 \\ 是一个转义序列,代表一个字面意义上的反斜杠 \

    • 然后,它看到了一个 '。因为这个单引号前面没有反斜杠了(\\已经被消耗掉了),所以JavaScript引擎认为这个单引号就是字符串的结束符

    • 至此,var searchTerms = '\\' 这部分代码被成功执行。变量 searchTerms 的值就是一个反斜杠 \

    • 接下来,引擎继续向后解析,它看到了 -alert(1)。在 alert(1) 前面加上 - 是一种防御性编程思想,它能有效地将我们的代码与上下文分离开,确保我们的函数调用被当作一个独立的、新的表达式来执行,从而大大提高了Payload在各种未知环境下的成功率。这是一个合法的JavaScript表达式(alert(1) 会先执行,返回 undefined,然后进行一个无效的减法运算),最重要的 alert(1) 被成功执行了!

    • 最后,引擎看到了 //。这是JavaScript的单行注释符。它会将代码行中剩余的所有内容(包括原来代码中用于闭合的 ';)全部注释掉,从而避免了语法错误。

三、成功通关

http://www.dtcms.com/a/393516.html

相关文章:

  • win11电脑按键失灵,提供几个可能恢复的方法
  • Android 中获取稳定时间的方法
  • mac编译ffmpeg
  • Deepsoil V7.1.10+Shake2000,最新版程序、教学视频、PDF使用手册
  • Apollo相机数据RTMP推流与播放指南
  • 使用Python扩展Unity编辑器
  • 【Android】自定义控件
  • 探索 Event 框架 6:高级特性与性能优化
  • JavaSE基础——第九章 枚举类注解
  • 云计算在金融领域中的应用
  • 【入门算法】前缀和:先预存再求和,以空间换时间
  • mac编译vst3sdk
  • Java 网络原理(二)--- TCP的机制 + IP协议 +以太网协议 + DNS
  • Python文件名编码处理深度解析:绕过编码问题的专业指南
  • 如何利用简单的浏览器插件Web Scraper爬取知乎评论数据
  • 鹿鼎记豪侠传:Rust 重塑 iOS 江湖(下)
  • 03.博客版-镜像
  • 云原生docker离线二进制安装
  • RabbitMQ 的配置文件位置及常见配置项
  • Visual Prompt Builder-AI 提示词可视化工具
  • 一文掌握Flask:从基础使用到高级应用
  • 23种设计模式之【责任链模式】-核心原理与 Java 实践
  • 执行 conda update -n base -c defaults conda 后仍提示需要升级
  • 学习日报 20250921|NIO
  • 【Linux操作系统】Linux基础指令和权限
  • 谷歌nano banana官方Prompt模板
  • 基于Python大数据的新闻推荐分析
  • ​​[硬件电路-315]:AD7606BSTZ如何测量失调电压?
  • 微服务-分布式追踪 / 监控工具大全
  • The Library: 2靶场渗透