bugbounty:赏金3000美元 在Tokopendia中bypass两个XSS
2019-07-04 06:02:00 Author: xz.aliyun.com(查看原文) 阅读量:113 收藏

原文链接:https://visat.me/security/reflected-xss-in-tokopedia-train-ticket/

为了更好的阅读附件中有漏洞挖掘视频

在Tokopedia中bypass两个xss过滤器得到反射型XSS漏洞

TL;DR

有一个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,你必须:

  1. 绕过JavaScript

插入</script><script>alert(1)</script>参数。这将使HTML解析器不正确地关闭上下文,导致先前的JavaScript执行错误(我们不关心这个!)并启动新的攻击者控制的脚本内容。

  1. 绕过JavaScript变量中的dataJs.query。

    插入"}; alert(1); //其中一个参数。这将导致JavaScript解析器关闭变量,直接执行我们的受控脚本,并忽略其余的。

我以前的报告使用的是第一种方法。服务器没有编码危险字符,例如<into &lt;。然而,它编码"\"\\\,所以不能使用第二种方法。

然后我注意到一种奇怪的行为。ori和dest参数中使用的编码与其他编码不同。请注意在其他参数中,"字符是如何被编码的%22。

使用了不同的编码

我尝试使用另一个参数>

> 没有在两个参数中编码

有趣的是,它没有编码ori和dest参数。如果我插入两个<和>字符怎么办?

>< 没有编码

<> 编码

显然,服务器确实清理了参数,但只有<.*>在参数中出现!

Bypassing 过滤器

我搜索了一些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并获得证书。


文章来源: http://xz.aliyun.com/t/5528
如有侵权请联系:admin#unsafe.sh