CVE-2023-46747和AJP走私漏洞
字数 1626 2025-08-19 12:41:48

AJP走私漏洞与CVE-2023-46747深度分析

1. AJP协议基础

1.1 AJP协议概述

AJP (Apache JServ Protocol)是一种用于连接web服务器与应用服务器的二进制协议,主要用于:

  • Apache HTTP Server或Nginx与Tomcat等Java应用服务器间的通信
  • 提供比HTTP更高效的二进制通信方式
  • 支持请求属性、头部和正文的传输

1.2 AJP协议特点

  • 二进制协议(不同于HTTP的文本协议)
  • 默认使用8009端口
  • 在Tomcat中实现为AJP连接器
  • 协议详细文档:Apache AJPv13协议

2. AJP走私漏洞原理

2.1 基本概念

AJP走私漏洞利用的是:

  1. AJP协议与HTTP协议之间的差异
  2. 中间件(如代理服务器或负载均衡器)和应用服务器对HTTP请求的不同解析方式

2.2 攻击原理

攻击者通过特殊构造的请求:

  • 操纵AJP协议下的数据流
  • 实现请求走私(Request Smuggling)
  • 发送额外的"隐藏"请求

2.3 实际危害

  • 访问原本无法访问的地址
  • 绕过外部访问配置限制
  • 结合其他漏洞提升攻击效果

2.4 历史案例

最著名的AJP利用案例是长亭发现的"Ghostcat"漏洞:

  • 允许读取目标机器webapp目录下的任意文件
  • 影响范围广,危害严重

3. CVE-2023-46747漏洞分析

3.1 漏洞背景

  • 影响F5 BIG-IP设备的Apache定制版(基于Apache 2.4.6)
  • 结合AJP走私和其他漏洞实现攻击链

3.2 漏洞利用前提

  1. 已知BIG-IP历史漏洞CVE-2022-1388可通过/mgmt/tm/util/bash执行命令
  2. 但该漏洞的权限绕过(X-F5-Auth-Token)已被修复
  3. 需要新的认证方式来获取有效token

3.3 完整攻击流程

3.3.1 第一阶段:创建管理员账户

  1. 通过AJP走私访问/tmui/Control/form
  2. 调用/tmui/system/user/create.jsp创建新用户
  3. 关键点:需要绕过CSRF防护

3.3.2 CSRF防护绕过

需要构造三个特殊参数:

  1. _timenow = a
  2. Tmui-Dubbuf = BBBBBBBBBBB
  3. _bufvalue = eIL4RUnSwXYoPUIOGcOFx2o00Xc=

要求:_bufvalue的值必须等于Tmui-Dubbuf + Tmui-Dubbuf

3.3.3 第二阶段:获取认证token

  1. 使用新创建的用户凭证
  2. 访问/mgmt/shared/authn/login
  3. 获取有效的X-F5-Auth-Token

3.3.4 第三阶段:命令执行

  1. 使用获取的token
  2. 访问/mgmt/tm/util/bash
  3. 执行任意系统命令

3.4 技术细节

请求构造要点

  • 使用Transfer-Encoding: chunked
  • 第一个204表示trunk size大小(十进制516,对应十六进制请求长度)
  • 最后的0表示请求结束

实际攻击注意事项

  1. 可能需要多次尝试才能成功
  2. 成功标志:返回的不是登录界面
  3. 成功后获取token并执行命令

4. 漏洞利用POC示例

POST /tmui/Control/form HTTP/1.1
Host: target
Transfer-Encoding: chunked

204
... [走私请求内容,长度516字节] ...
0

[空行]

5. 防御建议

  1. 禁用不必要的AJP连接器
  2. 限制AJP端口的访问(默认8009)
  3. 及时更新F5 BIG-IP到安全版本
  4. 实施严格的输入验证
  5. 监控异常的AJP请求模式

6. 扩展思考

  1. 老版本组件中可能存在类似漏洞
  2. AJP走私可与其他漏洞形成攻击链
  3. 在代码审计和渗透测试中应关注:
    • 系统使用的中间件版本
    • AJP协议是否暴露
    • 历史漏洞的潜在利用方式

7. 总结

CVE-2023-46747展示了AJP走私漏洞的实际危害:

  • 通过请求走私重新利用已修复的老漏洞
  • 绕过安全防护措施
  • 最终实现权限提升和命令执行

该案例强调了:

  1. 协议级漏洞的重要性
  2. 防御纵深的需要
  3. 及时更新和全面安全评估的必要性
AJP走私漏洞与CVE-2023-46747深度分析 1. AJP协议基础 1.1 AJP协议概述 AJP (Apache JServ Protocol)是一种用于连接web服务器与应用服务器的二进制协议,主要用于: Apache HTTP Server或Nginx与Tomcat等Java应用服务器间的通信 提供比HTTP更高效的二进制通信方式 支持请求属性、头部和正文的传输 1.2 AJP协议特点 二进制协议(不同于HTTP的文本协议) 默认使用8009端口 在Tomcat中实现为AJP连接器 协议详细文档: Apache AJPv13协议 2. AJP走私漏洞原理 2.1 基本概念 AJP走私漏洞利用的是: AJP协议与HTTP协议之间的差异 中间件(如代理服务器或负载均衡器)和应用服务器对HTTP请求的不同解析方式 2.2 攻击原理 攻击者通过特殊构造的请求: 操纵AJP协议下的数据流 实现请求走私(Request Smuggling) 发送额外的"隐藏"请求 2.3 实际危害 访问原本无法访问的地址 绕过外部访问配置限制 结合其他漏洞提升攻击效果 2.4 历史案例 最著名的AJP利用案例是长亭发现的"Ghostcat"漏洞: 允许读取目标机器webapp目录下的任意文件 影响范围广,危害严重 3. CVE-2023-46747漏洞分析 3.1 漏洞背景 影响F5 BIG-IP设备的Apache定制版(基于Apache 2.4.6) 结合AJP走私和其他漏洞实现攻击链 3.2 漏洞利用前提 已知BIG-IP历史漏洞CVE-2022-1388可通过 /mgmt/tm/util/bash 执行命令 但该漏洞的权限绕过(X-F5-Auth-Token)已被修复 需要新的认证方式来获取有效token 3.3 完整攻击流程 3.3.1 第一阶段:创建管理员账户 通过AJP走私访问 /tmui/Control/form 调用 /tmui/system/user/create.jsp 创建新用户 关键点:需要绕过CSRF防护 3.3.2 CSRF防护绕过 需要构造三个特殊参数: _timenow = a Tmui-Dubbuf = BBBBBBBBBBB _bufvalue = eIL4RUnSwXYoPUIOGcOFx2o00Xc= 要求: _bufvalue 的值必须等于 Tmui-Dubbuf + Tmui-Dubbuf 3.3.3 第二阶段:获取认证token 使用新创建的用户凭证 访问 /mgmt/shared/authn/login 获取有效的X-F5-Auth-Token 3.3.4 第三阶段:命令执行 使用获取的token 访问 /mgmt/tm/util/bash 执行任意系统命令 3.4 技术细节 请求构造要点 使用 Transfer-Encoding: chunked 头 第一个204表示trunk size大小(十进制516,对应十六进制请求长度) 最后的0表示请求结束 实际攻击注意事项 可能需要多次尝试才能成功 成功标志:返回的不是登录界面 成功后获取token并执行命令 4. 漏洞利用POC示例 5. 防御建议 禁用不必要的AJP连接器 限制AJP端口的访问(默认8009) 及时更新F5 BIG-IP到安全版本 实施严格的输入验证 监控异常的AJP请求模式 6. 扩展思考 老版本组件中可能存在类似漏洞 AJP走私可与其他漏洞形成攻击链 在代码审计和渗透测试中应关注: 系统使用的中间件版本 AJP协议是否暴露 历史漏洞的潜在利用方式 7. 总结 CVE-2023-46747展示了AJP走私漏洞的实际危害: 通过请求走私重新利用已修复的老漏洞 绕过安全防护措施 最终实现权限提升和命令执行 该案例强调了: 协议级漏洞的重要性 防御纵深的需要 及时更新和全面安全评估的必要性