CVE-2024-40544 /getHtml 接口导致SSRF 漏洞详细分析
字数 1192 2025-08-29 08:30:36

CVE-2024-40544 /getHtml接口SSRF漏洞分析与利用指南

漏洞概述

CVE-2024-40544是一个存在于PublicCMS系统中的服务器端请求伪造(SSRF)漏洞,位于/getHtml接口。该漏洞允许经过部分认证的攻击者通过精心构造的请求,使服务器向内部网络发起任意HTTP请求,可能导致内部服务探测、数据泄露等安全问题。

环境搭建

  1. 下载并部署PublicCMS系统
  2. 配置数据库连接信息
  3. 启动系统服务
  4. 访问后台管理界面

漏洞复现步骤

1. 获取appToken

要利用此漏洞,首先需要获取有效的appToken:

  1. 访问系统后台
  2. 找到"授权应用"功能模块
  3. 获取应用的appKeyappSecret
  4. 使用以下API获取appToken:
    POST /api/appToken
    {
      "appKey": "your_app_key",
      "appSecret": "your_app_secret"
    }
    
  5. 响应中会返回appToken和有效时间

2. 利用SSRF漏洞

获取appToken后,可以调用存在漏洞的/getHtml接口:

POST /api/getHtml
{
  "appToken": "your_app_token",
  "url": "http://internal-service/path"
}

探测端口示例

  • 访问未开放端口(如8888)会返回null
  • 访问开放端口会返回页面内容

漏洞分析

漏洞位置

漏洞位于GetHtmlMethod类中,该接口会对外部传入的URL参数发起HTTP请求。

关键代码流程

  1. 路由处理

    • 请求被路由到GetHtmlMethod
    • 需要提供有效的appToken
  2. 认证流程

    • 代码路径:com/publiccms/views/directive/api/AppTokenDirective.java
    • 使用appKeyappSecret生成appToken
    • 生成的token会被保存并返回给用户
  3. 请求处理

    • 首先检查token的合法性
    • 验证token是否具有对应API的访问权限
    • 解析参数并调用对应的API方法
    • 最终对用户提供的URL发起HTTP请求,导致SSRF漏洞

漏洞利用限制

  1. 需要获取有效的appKeyappSecret来生成appToken
  2. 生成的appToken有有效期限制
  3. 需要token具有调用/getHtml接口的权限

防御建议

  1. /getHtml接口的URL参数进行严格过滤:

    • 禁止访问内网IP段
    • 限制协议类型(如只允许HTTPS)
    • 使用白名单机制限制可访问的域名
  2. 加强appToken的权限控制:

    • 细粒度控制每个token可访问的API
    • 记录token的使用日志
  3. 升级到已修复此漏洞的PublicCMS版本

调试方法

  1. GetHtmlMethod类中设置断点
  2. 跟踪token验证流程
  3. 观察URL请求发起过程
  4. 监控网络请求以确认SSRF确实发生

总结

CVE-2024-40544是一个典型的认证后SSRF漏洞,虽然需要一定的前置条件才能利用,但一旦成功利用可能对系统安全造成严重影响。开发人员应重视所有会发起外部请求的接口,实施严格的输入验证和访问控制。

CVE-2024-40544 /getHtml接口SSRF漏洞分析与利用指南 漏洞概述 CVE-2024-40544是一个存在于PublicCMS系统中的服务器端请求伪造(SSRF)漏洞,位于 /getHtml 接口。该漏洞允许经过部分认证的攻击者通过精心构造的请求,使服务器向内部网络发起任意HTTP请求,可能导致内部服务探测、数据泄露等安全问题。 环境搭建 下载并部署PublicCMS系统 配置数据库连接信息 启动系统服务 访问后台管理界面 漏洞复现步骤 1. 获取appToken 要利用此漏洞,首先需要获取有效的appToken: 访问系统后台 找到"授权应用"功能模块 获取应用的 appKey 和 appSecret 使用以下API获取appToken: 响应中会返回 appToken 和有效时间 2. 利用SSRF漏洞 获取appToken后,可以调用存在漏洞的 /getHtml 接口: 探测端口示例 : 访问未开放端口(如8888)会返回 null 访问开放端口会返回页面内容 漏洞分析 漏洞位置 漏洞位于 GetHtmlMethod 类中,该接口会对外部传入的URL参数发起HTTP请求。 关键代码流程 路由处理 : 请求被路由到 GetHtmlMethod 类 需要提供有效的 appToken 认证流程 : 代码路径: com/publiccms/views/directive/api/AppTokenDirective.java 使用 appKey 和 appSecret 生成 appToken 生成的token会被保存并返回给用户 请求处理 : 首先检查token的合法性 验证token是否具有对应API的访问权限 解析参数并调用对应的API方法 最终对用户提供的URL发起HTTP请求,导致SSRF漏洞 漏洞利用限制 需要获取有效的 appKey 和 appSecret 来生成 appToken 生成的 appToken 有有效期限制 需要token具有调用 /getHtml 接口的权限 防御建议 对 /getHtml 接口的URL参数进行严格过滤: 禁止访问内网IP段 限制协议类型(如只允许HTTPS) 使用白名单机制限制可访问的域名 加强 appToken 的权限控制: 细粒度控制每个token可访问的API 记录token的使用日志 升级到已修复此漏洞的PublicCMS版本 调试方法 在 GetHtmlMethod 类中设置断点 跟踪token验证流程 观察URL请求发起过程 监控网络请求以确认SSRF确实发生 总结 CVE-2024-40544是一个典型的认证后SSRF漏洞,虽然需要一定的前置条件才能利用,但一旦成功利用可能对系统安全造成严重影响。开发人员应重视所有会发起外部请求的接口,实施严格的输入验证和访问控制。