前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用 URN 绕过 URL 检查

利用 URN 绕过 URL 检查

作者头像
C4rpeDime
发布2021-09-07 10:51:35
5580
发布2021-09-07 10:51:35
举报
文章被收录于专栏:黑白安全

0x00 前言

最近痴迷于看 RFC 及各类规范文档,从中发现一些有趣的利用。刚好前段时间发现了一处有趣的特性,成功绕过了某个知名站点的 XSS 防御,最终执行 XSS 攻击。本来以为只是一个小 trick,后来被某偶像拿来出了道 CTF 题目,觉得有必要分享一下。

0x01 一个真实 case 及其绕过

几个月前发现某网站上有类似于下面的逻辑,会从 URL 中取 next 参数的值,并解析出 pathname 部分,执行跳转。

代码语言:javascript
复制
   const getParam = (key) => {
      return new URL(location).searchParams.get(key)
    }

    const nextURL = getParam('next')
    if (nextURL) {
      const u = new URL(nextURL)
      location.href = "" + u.pathname
    }

老司机应当可以发现,如果 u.pathname 能够以 javascript: 开头,那么就可以执行 XSS 攻击了。然而,pathname 会多带一个 ‘/’ ,导致利用失败,无法 XSS。

爱折腾的人怎么会止步于此呢,这个问题的突破点在于 new URL(M).pathname 。根据 whatwg 的规范[1],如果cannot-be-a-base-URL 为 true,那么 pathname 等价于 `path[0]`。

刚好规范中就给出了满足这类条件的 case [2],如下图所示

因此,只要构造

代码语言:javascript
复制
?next=url:javascript:alert(location.origin)

即可绕过改限制并执行 XSS 攻击。

0x02 举一反三

经偶像指点,发现除了使用 URN 协议外,任意符合格式的 URI 都可以利用。比如,可以试试下面的代码。

代码语言:javascript
复制
new URL('a:javascript:alert(1)').pathname

0x03 总结

  1. 规范、RFC 中有许多非常有趣的特性,没准可以拿来做一些绕过
  2. 偶像np

[1] https://url.spec.whatwg.org/#dom-url-pathname

[2] https://url.spec.whatwg.org/#url-cannot-be-a-base-url-flag

原文由漕河泾小黑屋

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档