目录

PortSwigger靶场之Reflected-XSS-in-canonical-link-tag通关秘籍

PortSwigger靶场之Reflected XSS in canonical link tag通关秘籍

https://i-blog.csdnimg.cn/direct/aa4efe732ffe4baa8ed53f66ff02ea13.png

一、题目分析

该靶场规范链接标签中用户输入并转义尖括号,由于尖括号<>被编码,无法注入标签,不能注入像 <script><img src=x onerror=alert(1)> 这样的新标签。

所以我们需要利用页面中已存在的标签,通过其属性事件或内容触发脚本执行。我们可以发现注入点在<link>标签内,但是由于<link> 标签本身是一个“不可见”也“不可交互”的元素。用户不会去点击它,鼠标也无法悬停(hover)在上面。这就意味着,即使我们成功注入了像 onclickonmouseoveronfocus 这样的事件处理器,也没有常规的办法去触发它们。用户不会去点击一个看不见的 <link> 标签。

https://i-blog.csdnimg.cn/direct/a01bb32b2ebd4b9ea1e96373802fc592.png

本靶场我们利用的accesskey 属性就是解决这个“无法触发”问题的关键。

  • accesskey 的作用:它是一个HTML全局属性,功能是为页面上的一个元素创建一个键盘快捷键

  • 攻击思路:通过注入 accesskey='x',您就等于给那个原本无法交互的 <link> 标签赋予了一个快捷键 x。当用户按下与该快捷键匹配的组合键时(比如 Alt+X),浏览器会执行两件事:

    1. 聚焦 (focus) 到这个 <link> 元素上。
    2. 激活 (activate) 这个元素,这通常等同于模拟一次鼠标点击(click)事件。

因此,当您同时注入 accesskey='x'onclick='alert(1)' 时,整个攻击链就形成了:

accesskey='x' 负责提供【触发器】,而 onclick='alert(1)' 负责提供【攻击载荷】。

没有 accesskeyonclick 就是个空有威力的炸弹但没有引信;没有 onclickaccesskey 就只是个无害的快捷键。两者结合,才能完成攻击。

ps:这就体现了提示告诉我们的可以假设模拟用户将按下以下组合键:

不同的操作系统和浏览器激活 accesskey 的方式不同(提示的X就是我们的key):

  • Chrome/Edge (Windows/Linux): Alt + [key]
  • Firefox (Windows/Linux): Alt + Shift + [key]
  • Chrome/Firefox (Mac): Ctrl + Alt + [key]

二、攻击过程

1、初步尝试

一般来说,反射型 XSS 的注入点在 URL 参数或者表单提交等会被服务器直接返回给浏览器的地方。

一般我们可以尝试在页面上的各种输入框中输入测试字符,进入页面发现没有搜索框,进入帖子发现是评论区。此时查看代码发现随着打开帖子的不同,postId 参数的值在改变。

https://i-blog.csdnimg.cn/direct/8becab3e346848369aca7512cb9c0b2d.png

https://i-blog.csdnimg.cn/direct/a01bb32b2ebd4b9ea1e96373802fc592.png

尝试修改 postId 的值,发现 **“Invalid blog post ID” ,**页面不存在。

https://i-blog.csdnimg.cn/direct/177b7ab4f6f84616a56916b1c473eb02.png

既然无法修改参数内容,那我们尝试修改参数名,发现页面有响应,且被写入  标签 ,通过参数赋值写入尖括号<>发现如题目所说被编码,尝试利用页面中已存在的  标签,通过其属性事件或内容触发脚本执行。

https://i-blog.csdnimg.cn/direct/3bebdeff04514871ab2ab981dd1df579.png

2、构造payload

accesskey 是 HTML 元素的一个全局属性,用于定义快捷键。当用户按下对应的快捷键,浏览器会聚焦到该元素,方便键盘导航。如我们上面的题目分析


Payload:?'accesskey='x'onclick='alert(1)
//此处不能加空格:?'accesskey='x' onclick='alert(1)不然空格可能会被错误地编码(如变成+或%20)或导致参数解析中断

利用第一个单引号闭合 **href ,**跳出 href 属性的限制,注入新的属性,当用户访问这个链接就相当于按下对应的快捷键,浏览器会执行 alert(1),弹出提示框。

ps:Chrome 中用Alt+X快捷键

3、攻击流程

  • 我们将这个构造好的恶意URL提交给靶场。
  • 靶场的模拟用户机器人访问该URL。
  • 机器人自动按下 Alt+X 组合键。
  • 浏览器检测到这个快捷键,激活了 <link> 元素,并模拟了一次 click 事件。

三、成功通关

https://i-blog.csdnimg.cn/direct/757f01e8f57b4039ba45b047ea3553ca.png