某网关的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

CoolCat
也无风雨也无晴