V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhengjian
V2EX  ›  信息安全

请帮忙测试这个帖子中的 XSS 是否有效

  •  4
     
  •   zhengjian · 2023-01-12 00:36:20 +08:00 · 1849 次点击
    这是一个创建于 680 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://v2ex-gist-be9kzurst6pk.runkit.sh/js

    https://gist.github.com/1/1http<-点击这个按钮试试 https://gist.github.com/1/1


    如果多人测试有效,就需要麻烦 @Livid 尽快修复了。


    另外,上次分享了一个利用 CSRF 切换夜间模式的帖子,站长已经修复:





    如果有效的话我在附言中分享一下发现过程。
    第 1 条附言  ·  2023-01-12 01:19:54 +08:00
    当发表评论或使用 V2EX 原生格式发表帖子的时候,「正文中出现的网址会变成可以点击的 <a> 链接❶」,「 GitHub 的 Gist 链接会自动加载为嵌入式的代码展示」,实现上是将 https ://gist.github. com/user/hash 链接渲染成一个 div:

    <div><a href="Gist 链接">Gist 链接</a><button onClick="lazyGist">显示 Gist 代码</button></div>

    当点击「显示 Gist 代码」这个按钮的时候,会调用 lazyGist 函数,该函数大概逻辑是请求 Embed Gist 的 Api ,将 Gist Api 返回的 html 片段替换掉这个 div (使用 $button.parent() 函数,button 元素的 parent 是 div❷)。

    请求 Gist Api 的 Url 是从上文中渲染的 div 中的 a 标签取的(找 a 标签使用了 $button.parent().find("a")❸),没有任何校验。那么自然会想能不能替换成我们可以自己控制返回内容的 Url 呢?但后端的渲染引擎对 Gist Url 校验是很严格的,尝试多次后放弃。又尝试多种写法后,发现使用这种 payload 会出现渲染错误(防止渲染插入了空格):

    https:// gist.github. com/1/1http https: //gist.github. com/1/1


    会把 button 渲染在顶层,那么 button 的 parent 就成了帖子内容的顶级 div ,结合 ❶ ❷ ❸,我们只需在帖子顶部插入一个我们自己的 Url 就可以啦。

    修复建议:重写加载 Gist 的 JS 的逻辑。
    MossFox
        1
    MossFox  
       2023-01-12 00:40:27 +08:00
    确认有效 (移动端 Safari)
    learningman
        2
    learningman  
       2023-01-12 00:44:04 +08:00 via Android
    it works
    @livid
    phithon
        3
    phithon  
       2023-01-12 00:48:32 +08:00
    围观
    h0099
        4
    h0099  
       2023-01-12 00:53:43 +08:00
    经典 jsonp


    4ark
        5
    4ark  
       2023-01-12 01:21:19 +08:00 via iPhone
    nb
    jingfelix
        6
    jingfelix  
       2023-01-12 01:27:16 +08:00
    确认有效,安卓 Edge + PC Chrome
    SteveZou
        7
    SteveZou  
       2023-01-12 05:18:38 +08:00 via iPhone
    确认有效,ios Safari
    @livid
    Jamari
        8
    Jamari  
       2023-01-12 07:28:03 +08:00 via iPhone
    又没事,反正后端还是很严格
    Livid
        9
    Livid  
    MOD
       2023-01-12 07:51:35 +08:00
    谢谢。暂时将这个按钮的功能去掉了。
    godblessumilk
        10
    godblessumilk  
       2023-01-15 13:20:38 +08:00 via Android
    @Jamari xss 攻击可以盗取 cookie
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1177 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 18:06 · PVG 02:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.