某网关的RCE

之前分析的一个洞,顺便同步到博客。

0x01 初始化

diff了下代码,以为会和Java那种一样,两个中间件解析差异造成的问题。还去看底层代码了, 实际上不是, 此处浪费了一小时...

实际上就是/apisix/admin/migrate/export,/apisix/admin/migrate/import没做鉴权而已。(鉴权中间件是在droplet中注册的 而这两路由没有用wgin.Wraps()函数转换为droplet的路由函数)

环境搭建:

https://github.com/apache/apisix-docker

将2.10.1-alpine改成2.7就可以快速跑起来了。

0x02 加载中

官方文档提示在转发过程中可以执行lua脚本的,所以思路也简单,利用未授权的接口覆盖一个带脚本的配置进去,再访问触发即可。

构造的过程比较乏味,很少有人这么用,Google没搜到案例。

大概分为:

1.构造一个带脚本的数据包。

2.导出payload模板。

3.重新计算checksum。(c26就是神!)

4.发包覆盖配置:

4.触发:

0x03 加载成功

效果:

实际利用可以先导出原配置,打完再给人还原回去。

最近看的另一个开源系统的洞: https://t.zsxq.com/yBYZj6m

也无风雨也无晴