挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞
字数 1355 2025-08-18 11:37:23

PayPal 表达式注入漏洞挖掘与分析

漏洞概述

在 PayPal 网站 manager.paypal.com 上发现了一个表达式注入漏洞 (Expression Language Injection),攻击者可以利用该漏洞获取 PayPal 系统的内部 IP、端口和方法类等敏感数据信息。

漏洞发现背景

  • 时间:2018年2月
  • 测试平台:bountyfactory.io 漏洞众测平台
  • 目标范围:所有 *.paypal.com 域名

前期侦察

  1. 常规侦察步骤

    • 枚举子域名
    • 枚举可访问文件
    • 枚举目录
  2. 发现可疑页面

    • 页面特征:多个可填写区域但没有提交按钮
    • 页面架构识别:WappAlyzer 只识别到 "Apache" 无版本信息
    • 页面风格:相比新式网页显得"老旧"

漏洞测试过程

初始测试思路

  1. 尝试反射型XSS

    • 测试结果:PayPal 的 WAF 有效拦截,未发现绕过方法
  2. 尝试注入漏洞

    • 测试 payload:
      • {7*7}
      • {{7*7}}
      • ${7*7}
    • 成功 payload:${7*7} 返回了计算结果 49

技术分析

  1. 漏洞类型确认

    • JSTL (JSP Standard Tag Library) 表达式注入
    • 通过 JSTL 标记库执行表达式语法命令
  2. JSTL 基础知识

    • 用途:在 JSP 页面中使用标签库代替传统 Java 片段语言
    • 功能:迭代和条件判断、数据管理格式化、XML 操作、数据库访问
  3. 可利用的隐式对象

    • pageContext 对象及其属性:
      • pageContext.request
      • pageContext.response
      • pageContext.properties
      • pageContext.page
      • pageContext.servletConfig
      • pageContext.servletContext
    • 通过这些属性可以访问:
      • 请求协议
      • 服务器端口
      • Servlet API 版本
      • 请求、响应、会话和应用上下文信息

深入利用

  1. 信息泄露利用

    • 使用 BurpSuite Intruder 功能对发现的属性进行 fuzzing
    • 发现新参数:${pageContext.servletContext.docRoot}
      • 可显示服务器上编译过的 WAR 文件相对路径
  2. 尝试 RCE

    • 测试 payload:${T(java.lang.System).getenv()}
    • 结果:被 WAF 拦截,响应 301 跳转
    • 结论:无法实现 RCE,可能受 WAF 限制或技术限制

漏洞影响

  • 可获取的敏感信息:
    • 内部 IP 地址
    • 服务端口
    • 方法类信息
    • WAR 文件路径
    • Servlet 配置信息

漏洞修复建议

  1. 对用户输入进行严格过滤和验证
  2. 禁用或限制 JSTL 表达式的执行能力
  3. 更新 WAF 规则以检测和阻止表达式注入尝试
  4. 对老旧系统进行安全审计和升级

漏洞报送结果

  • 报送时间:2018-03-08
  • PayPal 响应:安全风险不明,但给予漏洞赏金

经验总结

  1. 老旧系统往往是安全漏洞的高发区
  2. 表达式注入是一种容易被忽视的漏洞类型
  3. 系统性的 fuzzing 可以发现意外漏洞
  4. 即使无法实现 RCE,信息泄露也可能带来严重风险
  5. 漏洞赏金项目需要持续投入和耐心测试
PayPal 表达式注入漏洞挖掘与分析 漏洞概述 在 PayPal 网站 manager.paypal.com 上发现了一个表达式注入漏洞 (Expression Language Injection),攻击者可以利用该漏洞获取 PayPal 系统的内部 IP、端口和方法类等敏感数据信息。 漏洞发现背景 时间:2018年2月 测试平台:bountyfactory.io 漏洞众测平台 目标范围:所有 *.paypal.com 域名 前期侦察 常规侦察步骤 : 枚举子域名 枚举可访问文件 枚举目录 发现可疑页面 : 页面特征:多个可填写区域但没有提交按钮 页面架构识别:WappAlyzer 只识别到 "Apache" 无版本信息 页面风格:相比新式网页显得"老旧" 漏洞测试过程 初始测试思路 尝试反射型XSS : 测试结果:PayPal 的 WAF 有效拦截,未发现绕过方法 尝试注入漏洞 : 测试 payload: {7*7} {{7*7}} ${7*7} 成功 payload: ${7*7} 返回了计算结果 49 技术分析 漏洞类型确认 : JSTL (JSP Standard Tag Library) 表达式注入 通过 JSTL 标记库执行表达式语法命令 JSTL 基础知识 : 用途:在 JSP 页面中使用标签库代替传统 Java 片段语言 功能:迭代和条件判断、数据管理格式化、XML 操作、数据库访问 可利用的隐式对象 : pageContext 对象及其属性: pageContext.request pageContext.response pageContext.properties pageContext.page pageContext.servletConfig pageContext.servletContext 通过这些属性可以访问: 请求协议 服务器端口 Servlet API 版本 请求、响应、会话和应用上下文信息 深入利用 信息泄露利用 : 使用 BurpSuite Intruder 功能对发现的属性进行 fuzzing 发现新参数: ${pageContext.servletContext.docRoot} 可显示服务器上编译过的 WAR 文件相对路径 尝试 RCE : 测试 payload: ${T(java.lang.System).getenv()} 结果:被 WAF 拦截,响应 301 跳转 结论:无法实现 RCE,可能受 WAF 限制或技术限制 漏洞影响 可获取的敏感信息: 内部 IP 地址 服务端口 方法类信息 WAR 文件路径 Servlet 配置信息 漏洞修复建议 对用户输入进行严格过滤和验证 禁用或限制 JSTL 表达式的执行能力 更新 WAF 规则以检测和阻止表达式注入尝试 对老旧系统进行安全审计和升级 漏洞报送结果 报送时间:2018-03-08 PayPal 响应:安全风险不明,但给予漏洞赏金 经验总结 老旧系统往往是安全漏洞的高发区 表达式注入是一种容易被忽视的漏洞类型 系统性的 fuzzing 可以发现意外漏洞 即使无法实现 RCE,信息泄露也可能带来严重风险 漏洞赏金项目需要持续投入和耐心测试