原文链接:https://visat.me/security/reflected-xss-in-tokopedia-train-ticket/
为了更好的阅读附件中有漏洞挖掘视频
在Tokopedia中bypass两个xss过滤器得到反射型XSS漏洞
有一个XSS过滤器,GET如果它包含<字符后跟>字符,它将编码参数。该过滤器可以通过拆分进行绕过,可以绕过</script/>关闭标签成</script/和>两个反射参数。
早在2018年5月,我在Tokopedia平台中发现了一个反射型XSS。它是JavaScript上下文中简单的反映XSS。
我向Tokopedia安全团队报告,他们告诉我我的报告是重复的。我没有用心去检查它是否已经修好。
今年3月,我浏览了旧电子邮件并找到了报告。我重新测试这个漏洞是否还有,最终,我在同一页面上发现了该漏洞。
如果你在Tokopedia平台中搜索火车票,你将被重定向到这样的URL
https://tiket.tokopedia.com/kereta-api/search/Jakarta-Gambir-GMR/Bandung-Bandung-BD?adult=1&infant=0&trip=departure&dep_date=16-09-2019&ori=GMR&dest=BD
它将所有GET参数存储到JavaScript变量dataJs.query中。
所有GET参数都存储在dataJs.query
它存在于JavaScript上下文中。因此,如果你想要触发XSS,你必须:
- 绕过JavaScript
插入
</script><script>alert(1)</script>
参数。这将使HTML解析器不正确地关闭上下文,导致先前的JavaScript执行错误(我们不关心这个!)并启动新的攻击者控制的脚本内容。
绕过JavaScript变量中的dataJs.query。
插入
"}; alert(1); //
其中一个参数。这将导致JavaScript解析器关闭变量,直接执行我们的受控脚本,并忽略其余的。
我以前的报告使用的是第一种方法。服务器没有编码危险字符,例如<into <
。然而,它编码"
成\"
和\
成\\
,所以不能使用第二种方法。
然后我注意到一种奇怪的行为。ori和dest参数中使用的编码与其他编码不同。请注意在其他参数中,"字符是如何被编码的%22。
使用了不同的编码
我尝试使用另一个参数>
> 没有在两个参数中编码
有趣的是,它没有编码ori和dest参数。如果我插入两个<和>字符怎么办?
>< 没有编码
<> 编码
显然,服务器确实清理了参数,但只有<.*>在参数中出现!
我搜索了一些XSS payloads并找到了这个paylaod。它说:
您可以使用//关闭标签代替>
我们来试试吧。
发生错误
Chrome犯了一个错误:Uncaught SyntaxError: Invalid or unexpected token
。好吧,我知道我正在取得进展。然后我尝试插入XSS payload。
已插入XSS有效负载
它不起作用,JavaScript解析器不将其视为结束标记。我更改了XSS payload,并在“绕过标记黑名单”部分找到了这个</script/>
。
我们知道的事实是:我们无法插入<
和>
在同一参数中的字符,因为它会被编码。但是,如果我们分开</script/
和>
在不同的参数
(即ori和dest)?在这种情况下,它们之间会有其他字符</script/","dest":">
。这仍然是一个有效的结束标签吗?
XSS审核员突出显示XSS payload
原来这是一个有效的结束标签!Chrome XSS审核员屏蔽了该页面,表明存在反映的XSS。然后我在Firefox上尝试了它,它工作了!
这是我使用的完整payload:https://tiket.tokopedia.com/kereta-api/search/Jakarta-Gambir-GMR/Bandung-Bandung-BD?dep_date=26-06-2019&adult=1&infant=0&trip=departure&ori=</script//&dest=><svg/onload=alert(document.location.href))//.
反射型xss
Tokopedia中的cookie(已命名_SID_Tokopedia)仅限HTTP,因此我们无法通过XSS窃取会话。但事实证明,cookie意外地存储在一个名为
JavaScript变量中dataSession.session.cookies。这违背了cookie上仅HTTP属性的目的。通过利用XSS,攻击者可以窃取受害者的会话,
28/03/2019 - 向Tokopedia安全团队报告了漏洞。
08/04/2019 - 发送了一封后续电子邮件。该漏洞已得到修复,报告的严重性也很高。
11/06/2019 - Tokopedia奖励IDR 3.000.000并获得证书。