双URL 编码XSS – 错误赏金- 0x00sec

Updated on 12月 14, 2024 in 漏洞赏金
0 on 7月 1, 2023

隔离结束后,我经历了一个多月的迷你倦怠,我什至懒得去尝试寻找错误。经过一个半月的尝试再次找到我的动力后,我发现了一个XSS,它比典型的XSS 需要更多的思考 javascript:alert(1) 案例。

重新审视我在BB 程序中的旧笔记,我观察到了我上次尝试利用的一个端点,然后我才经历了那种倦怠。当时我无法利用它,所以现在我想给它第二次机会。终点是 https://example.com/dir/legacy-browser?redir=/。有一个按钮,您可以在其中重定向到参数redir 指向的端点。分析源代码,我可以看到该网站以这种方式重定向用户:

起初,我认为这应该很容易。我尝试通过注入来转义括号 ') 在里面 redir 范围。结果是非法字符被删除。实际上,如果有任何非法字符,应用程序会默认将您重定向到 /

我试图注入一个空字节 %00,只是为了看看应用程序会如何反应。应用程序将空字节转换为 NULL。所以有效载荷 redir=/%00/ 将反映到源代码中 javascript:redirect('/NULL/')。我想“太好了,url 编码的字符正在被解码”。我点击了按钮……我被重定向到 /NULL/。此外,任何其他非法url 编码字符都将被删除,正如我之前所述。

所以,显然,URL 正在被解码并发送到 javascript:redirect()。但我想注入一些非法字符来转义括号。经过一番思考,我得出的结论是,为了发送非法字符到 javascript:redirect(),这些字符在从URL 栏中解码后必须进行URL 编码。因此需要双重URL 编码!

我发送了第二个有效负载 https://www.example.com/dir/legacy-browser?redir=/%2500/test, 在哪里 %2500 是双URL 编码的空字节。结果是为了 javascript:redirect('/%00/test') 得到反映。点击按钮后,我被重定向到 https://example.com/,这意味着空字节 javascript:redirect() 实际上正在被解码。所以我实际上可以发送工作双URL 编码的有效负载。

考虑到这一点,我为这个端点制作了一个有效负载(通过制作,我的意思是从 野蛮逻辑有效负载AllTheThings 并添加一个 ') 在前)。我对它进行了双重URL 编码并将其注入到参数中。点击按钮后,XSS 就在用户被重定向到之前被触发 /

最终利用: https://example.com/enpoint?redir=/%2527)%253B%2520alert(document.cookies)%253B%252F%252F

太长了;博士

 
  • Liked by
Reply