云攻防
云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等
云厂商攻防:阿里云,腾讯云,华为云,亚马云,谷歌云,微软云等
云服务攻防:对象存储,云数据库,弹性计算服务器,VPC&RAM等
云原生攻防:Docker,Kubernetes(k8s),容器逃逸,CI/CD等
对象存储:
各大厂商对于对象存储的称呼都不一样, 但是都叫对象存储
阿里云:OSS 腾讯云:COS 华为云:OBS
谷歌云:GCS 微软云:Blob 亚马逊云:S3
Bucket也就是经常说的存储桶

文件上传:
创建后, 在此处上传文件

上传完后点击该文件, 会有个地址, 通过这个地址可以直接访问


这里提示我们AccessDenied, 也就是权限被拒绝, 在修改权限之后, 我们也能读写

在对象存储中, 如果配置不当会出现一些问题
如果选择包含ListObject, 会直接显示该对象存储下的所有文件


将权限改为公共读写后, 我们可以抓包将GET改为PUT, 达到一个任意文件上传的操作



虽然我们成功上传了进去, 但是存储桶的特性就是不解析, 那么如何能够解析存储桶的文件

我们绑定域名后, 用域名访问就可以成功解析了, 但是直接通过存储桶访问还是执行的一个下载操作, 如果上传的是其他文件, 具体是下载还是其他的也就根据实际情况去操作了



如何判断网站是联动了OSS
- 访问网站, 出现了以下错误页面, 则网站是用到了OSS

- 如果ping网站的时候, 显示以下, 则网站也是用到了OSS

域名接管:
可以尝试通过桶去接管域名, 如果对方只删除了桶没有删除域名解析的话, 通过创建桶可以直接接管该域名, 存储桶不绑定账号且唯一, 双方的平台要一致, 解析亚马逊的桶也要去亚马逊创建桶



Bucket爆破:
当不知道 Bucket 名称的时候,可以通过爆破获得 Bucket 名称,这有些类似于目录爆破,只不过目录爆破一般通过状态码判断,而这个通过页面的内容判断。
当 Bucket 不存在时有两种返回情况,分别是 InvalidBucketName 和 NoSuchBucket
<font style="color:rgba(0, 0, 0, 0.85);"></font>
<font style="color:rgba(0, 0, 0, 0.85);"></font>
当 Bucket 存在时也会有两种情况,一种是列出 Object
另一种是返回 AccessDenied
<font style="color:rgba(0, 0, 0, 0.85);"></font>
这样通过返回内容的不同,就可以进行 Bucket 名称爆破了,知道 Bucket 名称后,Key 的爆破也就很容易了
AccessKeyId,SecretAccessKey泄漏:
APP,小程序,JS中泄漏导致
一般使用工具或者插件去正则匹配到泄露出来的AKSK

以下是大佬整理出来的常见AKSK特征文章:
对于云场景的渗透,现在已经层出不穷,获得AK和SK,也是云安全渗透中重要的一环。
通常,我们会在一些敏感的配置文件或者通过未授权访问、任意文件读取漏洞等方式,来寻找AK和SK。
但市面上,通过正则匹配式来寻找AK和SK的,如下:
(?i)((access_key|access_token|admin_pass|admin_user|algolia_admin_key|algolia_api_key|alias_pass|alicloud_access_key|amazon_secret_access_key|amazonaws|ansible_vault_password|aos_key|api_key|api_key_secret|api_key_sid|api_secret|api.googlemaps AIza|apidocs|apikey|apiSecret|app_debug|app_id|app_key|app_log_level|app_secret|appkey|appkeysecret|application_key|appsecret|appspot|auth_token|authorizationToken|authsecret|aws_access|aws_access_key_id|aws_bucket|aws_key|aws_secret|aws_secret_key|aws_token|AWSSecretKey|b2_app_key|bashrc password|bintray_apikey|bintray_gpg_password|bintray_key|bintraykey|bluemix_api_key|bluemix_pass|browserstack_access_key|bucket_password|bucketeer_aws_access_key_id|bucketeer_aws_secret_access_key|built_branch_deploy_key|bx_password|cache_driver|cache_s3_secret_key|cattle_access_key|cattle_secret_key|certificate_password|ci_deploy_password|client_secret|client_zpk_secret_key|clojars_password|cloud_api_key|cloud_watch_aws_access_key|cloudant_password|cloudflare_api_key|cloudflare_auth_key|cloudinary_api_secret|cloudinary_name|codecov_token|config|conn.login|connectionstring|consumer_key|consumer_secret|credentials|cypress_record_key|database_password|database_schema_test|datadog_api_key|datadog_app_key|db_password|db_server|db_username|dbpasswd|dbpassword|dbuser|deploy_password|digitalocean_ssh_key_body|digitalocean_ssh_key_ids|docker_hub_password|docker_key|docker_pass|docker_passwd|docker_password|dockerhub_password|dockerhubpassword|dot-files|dotfiles|droplet_travis_password|dynamoaccesskeyid|dynamosecretaccesskey|elastica_host|elastica_port|elasticsearch_password|encryption_key|encryption_password|env.heroku_api_key|env.sonatype_password|eureka.awssecretkey)[a-z0-9_ .\-,]{0,25})(=|>|:=|\|\|:|<=|=>|:).{0,5}['\"]([0-9a-zA-Z\-_=]{8,64})['\"]
但这是通过匹配 AccessKey 开头的内容,比如 <font style="color:rgba(0, 0, 0, 0.85);background-color:rgb(242, 243, 245);">access_token:AKID1AS893JF90AWK</font> 中 <font style="color:rgba(0, 0, 0, 0.85);background-color:rgb(242, 243, 245);">access_token</font> 这个开头来进行正则匹配的,但如果没有这样的开头呢?那我们要怎么办?
那这里我就将不同厂商的 <font style="color:rgba(0, 0, 0, 0.85);background-color:rgb(242, 243, 245);">Access Key</font> 内容特征,分别整理出来,欢迎各位师傅补充和纠错哈哈 ~
同时也能够根据不同厂商 Key 的不同特征,直接能判断出这是哪家厂商的 <font style="color:rgba(0, 0, 0, 0.85);background-color:rgb(242, 243, 245);">Access Key</font> ,从而针对性进行渗透测试。
Amazon Web Services
亚马逊云计算服务 (Amazon Web Services, AWS) 的 Access Key 开头标识一般是 "AKIA"。
^AKIA[A-Za-z0-9]{16}$
- Access Key ID: 20个随机的大写字母和数字组成的字符,例如 AKHDNAPO86BSHKDIRYTE
- Secret Access Key ID: 40个随机的大小写字母组成的字符,例如 S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU(无法找回丢失的 Secret Access Key ID)。
Google Cloud Platform
Google Cloud Platform (GCP) 的 Access Key 开头标识一般是 "GOOG"。
^GOOG[\w\W]{10,30}$
- 服务账号的JSON文件中包含了Access Key和密钥的信息,其中Access Key为
<font style="color:rgba(0, 0, 0, 0.85);background-color:rgb(242, 243, 245);">client_email</font>,其长度不固定,由字母、数字和特殊字符组成。 - 密钥(Key)的长度为256个字符,由字母、数字和特殊字符组成。
Microsoft Azure
Microsoft Azure 的 Access Key 开头标识一般是 "AZ"。
^AZ[A-Za-z0-9]{34,40}$
- Azure AD Application的Client ID通常用作Access Key,长度为36个字符,由字母和数字组成。
- 对于Azure AD Application的密钥(Secret),长度为44个字符,由字母、数字和特殊字符组成。
IBM Cloud
IBM 云 (IBM Cloud) 的 Access Key 开头标识一般是 "IBM"。
^IBM[A-Za-z0-9]{10,40}$
或者是以下规则:
[a-zA-Z0-9]{8}(-[a-zA-Z0-9]{4}){3}-[a-zA-Z0-9]{12}$
Oracle Cloud
Oracle云 (Oracle Cloud) 的 Access Key 开头标识一般是 "OCID"。
^OCID[A-Za-z0-9]{10,40}$
阿里云
阿里云 (Alibaba Cloud) 的 Access Key 开头标识一般是 "LTAI"。
^LTAI[A-Za-z0-9]{12,20}$
- Access Key ID长度为16-24个字符,由大写字母和数字组成。
- Access Key Secret长度为30个字符,由大写字母、小写字母和数字组成。
腾讯云
腾讯云 (Tencent Cloud) 的 Access Key 开头标识一般是 "AKID"。
^AKID[A-Za-z0-9]{13,20}$
- SecretId长度为17个字符,由字母和数字组成。
- SecretKey长度为40个字符,由字母和数字组成。
华为云
华为云 (Huawei Cloud) 的 Access Key 是20个随机大写字母和数字组成,较难用正则表达式匹配。
[A-Z0-9]{20}
百度云
百度云 (Baidu Cloud) 的 Access Key 开头标识一般是 "AK"。
^AK[A-Za-z0-9]{10,40}$
京东云
京东云 (JD Cloud) 的 Access Key 开头标识一般是 "JDC_"。
^JDC_[A-Z0-9]{28,32}
字节跳动火山引擎
字节跳动火山引擎 (Volcengine) 的 Access Key 开头标识一般是 "AKLT",长度小于256位。
^AKLT[a-zA-Z0-9-_]{0,252}
UCloud
UCloud (UCloud) 的 Access Key 开头标识一般是 "UC"
^UC[A-Za-z0-9]{10,40}$
青云
青云 (QingCloud) 的 Access Key 开头标识一般是 "QY"。
^QY[A-Za-z0-9]{10,40}$
金山云
金山云 (Kingsoft Cloud) 的 Access Key 开头标识一般是 "AKLT"。
^AKLT[a-zA-Z0-9-_]{16,28}
联通云
联通云 (China Unicom Cloud) 的 Access Key 开头标识一般是 "LTC"。
^LTC[A-Za-z0-9]{10,60}$
移动云
移动云 (China Mobile Cloud) 的 Access Key 开头标识一般是 "YD"。
^YD[A-Za-z0-9]{10,60}$
电信云
中国电信云 (China Telecom Cloud) 的 Access Key 开头标识一般是 "CTC"。
^CTC[A-Za-z0-9]{10,60}$
一云通
一云通 (YiYunTong Cloud) 的 Access Key 开头标识一般是 "YYT"。
^YYT[A-Za-z0-9]{10,60}$
用友云
用友云 (Yonyou Cloud) 的 Access Key 开头标识一般是 "YY"。
^YY[A-Za-z0-9]{10,40}$
南大通用云
南大通用云 (OUCDC) 的 Access Key 开头标识一般是 "CI"。
^CI[A-Za-z0-9]{10,40}$
G-Core Labs
G-Core Labs 的 Access Key 开头标识一般是 "gcore"
^gcore[A-Za-z0-9]{10,30}$
总结
云服务,顾名思义就是云上服务,在云厂商上购买的产品服务。
国内有阿里云、腾讯云、华为云、天翼云、Ucloud、金山云等,
国外有亚马逊的AWS、Google的GCP、微软的Azure,IBM云等。
各个云厂商对云服务的叫法都不统一,这里统一以AWS为例。
S3 对象存储Simple Storage Service,简单的说就是一个类似网盘的东西
EC2 即弹性计算服务Elastic Compute Cloud,简单的说就是在云上的一台虚拟机。
RDS 云数据库Relational Database Service,简单的说就是云上的一个数据库。
IAM 身份和访问管理Identity and Access Management,简单的说就是云控制台上的一套身份管理服务,可以用来管理每个子账号的权限。
对象存储各大云名词:
阿里云:OSS 腾讯云:COS 华为云:OBS
谷歌云:GCS 微软云:Blob 亚马逊云:S3
对象存储:
权限配置错误
-公共读或公共读写:可完整访问但不显示完整结构
-权限Bucket授权策略:设置ListObject显示完整结构
-权限Bucket读写权限:公共读写直接PUT文件任意上传
域名解析Bucket接管:
Bucket存储桶绑定域名后,当存储桶被删除而域名解析未删除,可以尝试接管!
当Bucket显示NoSuchBucket说明是可以接管的,如果显示AccessDenied则不行。
AccessKeyId,SecretAccessKey泄漏:
APP,小程序,JS中泄漏导致
知识点:
1、云服务-对象存储-权限配置不当
2、云服务-对象存储-域名解析接管
3、云服务-对象存储-AccessKey泄漏
案例
案例**1:对象存储任意文件上传**
1、打开xxx.xxx.com 显示目录遍历一般肯定是公共可读写

2、 尝试获取解析oss的url地址

3、尝试对oss的url地址进行put上传


案例**2:对象存储解析域名劫持**

1、访问该域名显示NoSuchBucket,
那么只需要去阿里云存储桶重新创建一个与HostID一样的存储桶名称即可


2、随后只需要上传文件,就可以让该域名显示我们上传的任意文件

案例**3:对象存储泄漏AccessKey**

1、在JS文件中找到存在泄露的AccessKey

2、在托管平台找到存在泄露的AccessKey

3、在第三方组件配置不当导致泄露AccessKey
常见场景:/actuator/heapdump堆转储文件泄露SecretId/SecretKey
4、 在APP,小程序反编译中泄漏AccessKey

5、利用官方OSS工具连接

实战操作
fofa直接查询NoSuchBucket, 查询到后去阿里云创建存储桶


上传文件后访问, 接管成功

有域名:
直接ping域名, 可以直接拿到地址

无域名:
用xxx.oss-cn-hongkong.aliyun.com反推到xxx.com
如何反推:关注xxx, 有没有类似域名, 或者关注IP地址下是否有网站

Comments NOTHING